Xây dựng mạch mô phỏng trên Proteus

Một phần của tài liệu Hướng dẫn lập trình AVR rất hay (Trang 43 - 47)

4 Các bài tập ví dụ

4.4.3 Xây dựng mạch mô phỏng trên Proteus

Từ mục phân tích mạch điện, ta thấy mạch điện mô phỏng gồm có vi xử lý ATmega16, mạch của khối ngắt ngoài, mạch công suất IRF540, động cơ DC và Oscilloscope.

Hình 55: Mạch nguyên lý điều khiển động cơ DC bằng PWM

Sau khi chọn các linh kiện từ thư viện và thiết bị Oscilloscope, chúng ta sắp xếp và nối dây cho các linh kiện như hình 55. Chú ý các chân đầu vào của INT2 và đầu ra xung PWM OC1A sẽ tương ứng với quá trình chuẩn bị lập trình sau này.

4.4.4 Lập trình cho vi xử lý

a) Xác định yêu cầu làm việc của vi xử lý

Yêu cầu làm việc của vi xử lý trong bài ví dụ này là: Tạo xung PWM tại chân OC1A, chu kỳ (Time Period) 20ms, Duty Cycle hoặc 1 ms hoặc 2ms theo sự kiện ngắt ngoài INT2.

b) Xây dựng thuật toán điều khiển

Trước khi xây dựng thuật toán điều khiển PWM người đọc cần nắm rõ nguyên lý hoạt động của bộ PWM đã được giới thiệu ở phần đầu tài liệu.

Sau khi nắm rõ cơ bản nguyên lý hoạt động chế độ PWM của T/C1 trong ATmega16, chúng ta thấy rằng Time Period và Duty Cycle phụ thuộc lần lượt vào giá trị hai biến ICR và OCR. Như vậy trong ví dụ này, với chu kỳ 20ms không đổi, Duty Cycle 1 ms hoặc 2ms thì ta chỉ cần thay đổi giá trị biến OCR trong chương trình ngắt ngoài.

Hình 56: Sơ đồ làm việc của ngắt ngoài và T/C1 ở chế độ tạo PWM

Thuật toán cũng tương tự như ở ví dụ Timer/Counter, chỉ khác ở chỗ chương trình ngắt ngoài dùng để thay đổi biến OCR1A thay vì giá trị x, và bộ T/C1 làm việc ở chế độ tạo xung PWM.

Bộ T/C1 có nhiều cách để tạo ra xung PWM (xem lại phần giới thiệu chức năng tạo PWM ở phần trước), trong bài ví dụ sẽ trình bày chế độ Fast PWM.

Hình 57: Chế độ Fast PWM

Nhắc lại chế độ Fast PWM như ở hình 57, ta thấy rằng các giá trị ICR1, OCR1A cần được tính tương tự như khi tính giá trị biến TCNT1 ban đầu ở ví dụ Timer/Counter.

Chu kỳ dao động thạch anh: 1 6 6 0, 25.10 ( ) 4.10

o

ts

  

Chọn Prescale = 8, suy ra chu kỳ làm việc bộ T/C1:

6 6 3

0, 25.10 .8 2.10 ( ) 2.10 ( s)

t   sm

   

Giá trị ICR1 ứng với 5ms là: 5 3

R1 2500

2.10

IC   

Nếu viết trong hệ cơ số 16: ICR1 9C4

Giá trị OCR1A ứng với Duty Cycle 1ms là: 1 s 1 3

R1A 500

2.10

m

OC   

Nếu viết trong hệ cơ số 16: OCR1A1 sm 1 4F

Giá trị OCR1A ứng với Duty Cycle 2ms là: 1,5 s 4 3

R1A 2000

2.10

m

OC   

Nếu viết trong hệ cơ số 16: OCR1A1,5 sm 7D0

Sau khi xác định các giá trị ICR1, OCR1A ta tiến hành lập trình cho vi xử lý ATmega16.

c) Chuẩn bị lập trình bằng phần mềm CodeVision

Thiết lập các thông số và chức năng của vi xử lý ban đầu như sau.  Vi xử lý ATmega16, thạch anh 4 Mhz.

 Thiết lập In/Out cho chân OC1A.  Kích hoạt ngắt ngoài INT2.

Hình 58: Thiết lập T/C1 tạo PWM

Thiết lập T/C1 ở chế độ Fast PWM như sau. 1. Prescale = 8.

2. Chế độ: Fast PWM top = ICR1. 3. Out. A: Non-Inv.

4. Giá trị ICR1 = 9C4.

5. Giá trị OCR1A ban đầu = 1F4.

d) Viết chương trình điều khiển

Cũng tương tự như ví dụ Timer/Counter, ta thấy răng quá trình ngắt ngoài cũng như tạo PWM không liên quan tới vòng lặp while chính. Ta chỉ cần thao tác ở phần khai báo biến và chương trình ngắt ngoài, còn bộ T/C1 sẽ luôn hoạt động để tạo PWM theo giá trị OCR1A mong muốn.

Phần chương trình ngắt ngoài người đọc hãy thử tự viết, tương tự như phần khai báo biến và chương trình ngắt ngoái của ví dụ Timer/Counter, rồi so sánh với mẫu sau.

Hình 59: Chương trình ngắt ngoài

Sau khi viết xong, kiểm tra và complie thành công, kiểm tra trên mạch mô phỏng, nhấn nút để quan sát tốc độ động cơ thay đổi xung PWM trên Oscilloscope.

Tóm tắt

Chế độ PWM cuat T/C.

Cách điều khiển PWM.

Mở rộng

4.5 Chuyển đổi ADC

Ví dụ này sẽ hướng dẫn người đọc sử dụng chức năng chuyển đỏi ADC trên vi xử lý Atmega16.

Để bài: Dùng vi xử lý đo điện áp ở đầu ra mạch phân áp (dùng biến trở, từ 0~+5V) và hiển thị trên led 7 thanh tới mức 0,1V.

Người đọc cần xem lại phần giới thiệu chức năng chuyển đổi ADC để hiểu cách hoạt động của bộ chuyển đổi ADC

Để có thể hiển thị kết quả đo trên led 7 thanh thì người đọc cần phải biết cách điều khiển led 7 thanh.

4.5.1 Phân tích mạch điện

Theo như đề bài, ta thấy mạch điện gồm có 3 khối: Vi xử lý, mạch phân áp và hiển thị bằng led 7 thanh.

a) Mạch phân áp

Mạch phân áp là mạch điện hoạt động theo nguyên lý đơn giản sau.

Hình 60: Nguyên lý phân áp

Xét một mạch điện như hình vẽ, R1và R2mắc nối tiếp, được cấp điện áp Vo. Các điện áp rơi trên trở R1và R2 là: 1 1 1 2 o R V V R R   và 2 1 1 2 o R V V R R  

Nếu thay đổi giá trị của R1hoặc R2, điện áp V1và V2 cũng thay đổi theo. Như vậy từ một điện áp Vo 8V , ta có thể thu được điện áp V1hoặc V2 theo yêu cầu (chẳng hạn như

1 5

V   V để đưa vào chân vi xử lý chẳng hạn).

Để có thể thay đổi R1và R2trong quá trình sử dụng, người ta dùng biến trở, nguyên tắc hoạt động của biến trở như sau.

Hình 61: Nguyên lý hoạt động biến trở

Biến trở là một linh kiện điện, thường có 3 chân (1), (2), (3), với điện trở hai chân 1-2 bằng R1 và điện trở hai chân 3-2 bằng R2, trong đó R1R2 Rokhông đổi. Khi điều chỉnh để lấy điện áp Vout ở chân (2), người ta thay đổi điện áp R1và R2. Công thức tính điện áp ra là.

2 out in o R V V R

b) Hiển thị led 7 thanh

Điện áp đưa vào vi xử lý thay đổi từ 0 tới +5V, và yêu cầu độ chính xác tới mức điện áp 0,1V, như vậy chúng ta cần 2 led 7 thanh cho bài ví dụ này.

Để đơn giản hơn với người đọc, trong bài ví dụ này sẽ không trình bày cách hiển thị led 7 thanh bằng phương pháp quet led, mà để 2 led 7 thanh hoạt động độc lập.

Hình 62: Led 7 thanh Anốt chung

Hình 62 giới thiệu cấu trúc của 1 led 7 thanh anốt chung. Muốn cho đoạn led nào sáng (ví dụ đoạn b và đoạn c để hiển thị số 1), ta phải cấp điện áp dương vào chân COM và để mức trạng thái các đầu b và c là 0, các chân còn lại có mức trạng thái là 1. Như vậy nối toàn bộ 8 chân a, b,…, dp của led 7 thanh vào vi xử lý, ta có thể dùng chức năng In/Out để hiển thị số trên led 7 thanh.

Một phần của tài liệu Hướng dẫn lập trình AVR rất hay (Trang 43 - 47)

Tải bản đầy đủ (PDF)

(66 trang)