Bài tập kĩ thuật số

37 1.3K 7
Bài tập kĩ thuật số

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Cung cấp cho sinh viên những kiến thức cơ bản về kỹ thuật số, các dạng bài tập thường gặp cũng như những vấn đề chuyên sâu, chuyên ngành kĩ thuật số. Vốn là một lĩnh vực khá mới mẻ ở Việt N

YÊU CẦU:•Dùng PIC 16F877A điều khiển 1 động cơ DC quay thuận, quay nghịch, dùng nút nhấn điều khiển, có thể thay đổi tốc độ dùng phương pháp điều khiển độ rộng xung, dùng ngôn ngữ C. PP ĐIỀU KHIỂN PWM:•Để điều khiển tốc độ động cơ DC người ta có thể dùng nhiều phương pháp khác nhau trong đó có một phương pháp hết sức quan trọng và thông dụng là phương pháp điều chế độ rộng xung kích (PWM), có nghĩa là thay đổi độ rộng xung kích để điều khiển linh kiện đóng ngắt (SCR hay Transistor), từ đó điều khiển tốc độ động cơ. Bộ PWM có thể tạo ra từ các linh kiện điện tử. •Với yêu cầu dùng PIC16F877A điều khiển động cơ quay thuận-nghịch và thay đổi tốc độ, ta sử dụng bộ điều chế độ rộng xung (PWM) tích hợp sẵn bên trong PIC với 2 ngõ ra xung tại hai chân CCP1(17) và CCP2 (16) . Tại các chân này khi hoạt động sẽ xuất chuỗi xung vuông , độ rộng điều chỉnh được dễ dàng. Xung ra này dùng để tạo tín hiệu đóng ngắt Trasistor trong mạch động lực, với độ rộng xác định sẽ tạo ra một điện áp trung bình xác định. Thay đổi độ rộng xung sẽ thay đổi điện áp trung bình và do đó thay đổi được tốc độ động cơ. •Để có thể sử dụng được bộ PWM trước hết nó phải được khởi tạo chế độ PWM bằng lệnh: setup_ccpx (CCP_PWM) với x = 1,2Bộ PWM hoạt động phải được sự hỗ trợ của Timer 2 , đây là Timer 8-bit có bộ chia trước. Ngõ vào xung Clock (=fosc/4) có tuỳ chọn hệ số chia trước là: “1:1”, “1:4”, “1:16” được lựa chọn bằng các bit điều khiển T2CKPS1:T2CKPS2. •Lệnh để khởi tạo Timer2 và cũng là tạo chu kỳ xung cho bộ PWM là:setup_timer_2(mode,period,postscale)với:- Mode có thể chọn một trong các hình thức sau:T2_DISABLED, T2_DIV_BY_1 T2_DIV_BY_4, T2_DIV_BY_16- Period là một số nguyên (0 255) để xác định khi nào thì xung clock reset.- Postscale là số (116) để xác định có bao nhiêu lần reset trước một ngắt: 1 có nghĩa là 1 lần, 2 nghĩa là 2 lần…Chức năng của lệnh này là tạo ra chu kỳ xung và được tính như sau: T = (1/fosc)*4*t2_div*(period+1) •Xét ví dụ:Lệnh: setup_timer_2(T2_div_by_4,0xc0,2)với thạch anh 10MHz , Timer2 sẽ tăng mỗi 1.6us ( 4*4*1/10e6), sẽ bị tràn mỗi 307.2us (1.6*192), và sẽ bị ngắt mỗi 714.4us ( 307.2*2).Ở đây chu kỳ xung là T = (1/10e6)*4*4*(192+1) = 153.6us.Cụ thể trong bài, muốn tạo chu kỳ xung 1ms ta khởi tạo Timer2 như sau:setup_timer_2(T2_div_by_16,154,1)Khi ấy T= (1/10e6)*4*16*(154+1) = 0.992ms = 1ms. •Tiếp theo, tạo xung bằng lệnh:set_pwmx_duty(value) với x = 1, 2- value là biến hoặc hằng ,giá trị 8 hoặc 16 bit.Lệnh này dùng để set duty trong chế độ PWM .Nó ghi 10 bit giá trị vào thanh ghi CCPx. Nếu giá trị chỉ là 8 bit thì nó tự dịch lên với 2 bit zero ở vị trí LSB để đủ 10 bit nạp vào CCPx . Giá trị này để xác định lượng thời gian tín hiệu PWM ở mức cao trong suốt mỗi chu kỳ xung. Thời gian duty được xác định là: value*(1/clock)*t2_div với t2_div là số chia đặt trước của Timer2. •Xét ví dụ trong bài:duty = 620;set_pwm1_duty(duty);với thạch anh 10MHz,giả sử t2_div_16, ta có thời gian duty là: 620*16*(1/10e6) = 0.992ms.Giải thích thêm: Thời gian duty là thời gian xung (mức cao) của chu kỳ xung, minh hoạ:Như vậy, trong bài ta có chu kỳ xung là 0.992ms, để động cơ quay với tốc độ cực đại thì thời gian duty = chu kỳ xung bởi vì khi ấy gần như ngõ ra bộ PWM chỉ là mức 1. Minh hoạ:Thời gian dutyChu kỳ xung PHẦN CỨNG: . T2_DIV_BY_4, T2_DIV_BY_16- Period là một số nguyên (0 255) để xác định khi nào thì xung clock reset.- Postscale là số (116) để xác định có bao nhiêu lần. xác định là: value*(1/clock)*t2_div với t2_div là số chia đặt trước của Timer2. •Xét ví dụ trong bài: duty = 620;set_pwm1_duty(duty);với thạch anh 10MHz,giả

Ngày đăng: 20/10/2012, 08:34

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan