Trong dự án này, chúng tôi sẽ sử dụng một trong các tính năng của ATmega32A để điều chỉnh độ sáng của đèn LED 1 Watt. Phương pháp được sử dụng để điều chỉnh tốc độ của đèn LED là PWM (Điều chế độ rộng xung). Hướng dẫn PWM Vi điều khiển AVR này giải thích chi tiết khái niệm PWM và cách tạo PWM (Bạn cũng có thể kiểm tra mạch tạo PWM đơn giản này). Xét một mạch điện đơn giản như trong hình.
Bây giờ nếu công tắc trong hình trên được đóng liên tục trong một khoảng thời gian thì bóng đèn sẽ liên tục sáng trong thời gian đó. Nếu công tắc đóng trong 8ms và mở trong 2ms trong chu kỳ 10ms, thì bóng đèn sẽ chỉ BẬT trong thời gian 8ms. Bây giờ thiết bị đầu cuối trung bình vượt qua trong khoảng thời gian 10ms = Thời gian BẬT / (Thời gian BẬT + Thời gian TẮT), đây được gọi là chu kỳ làm việc và là 80% (8 / (8 + 2)), vì vậy mức trung bình điện áp đầu ra sẽ là 80% điện áp của pin.
Trong trường hợp thứ hai, công tắc đóng trong 5ms và mở trong 5ms trong khoảng thời gian 10ms, do đó điện áp đầu cuối trung bình ở đầu ra sẽ bằng 50% điện áp pin. Giả sử nếu điện áp pin là 5V và chu kỳ nhiệm vụ là 50% và do đó, điện áp đầu cuối trung bình sẽ là 2,5V.
Trong trường hợp thứ ba, chu kỳ làm việc là 20% và điện áp đầu cuối trung bình là 20% điện áp pin.
Trong ATMEGA32A, chúng tôi có bốn kênh PWM, đó là OC0, OC1A, OC1B và OC2. Ở đây chúng ta sẽ sử dụng kênh OC0 PWM để thay đổi độ sáng của đèn LED.
Thành phần bắt buộc
Phần cứng:
Vi điều khiển ATmega32
Nguồn điện (5v)
Lập trình viên AVR-ISP
Tụ điện 100uF, LED 1Watt
Bóng bán dẫn TIP127
Các nút (2 miếng)
Tụ điện 100nF (104) (2 cái), Điện trở 100Ω và 1kΩ (2 cái).
Phần mềm:
Atmel studio 6.1
Progisp hoặc phép thuật flash
Sơ đồ mạch và giải thích hoạt động
Hình trên cho thấy sơ đồ mạch của bộ điều chỉnh độ sáng LED với Vi điều khiển AVR (Bạn cũng có thể kiểm tra mạch điều chỉnh độ sáng LED đơn giản này).
Trong ATmega, đối với bốn kênh PWM, chúng tôi đã chỉ định bốn chân. Chúng tôi chỉ có thể lấy đầu ra PWM trên các chân này mà thôi. Vì chúng ta đang sử dụng PWM0, chúng ta nên lấy tín hiệu PWM tại chân OC0 (PORTB 3 rd PIN). Như trong hình, chúng tôi đang kết nối đế của bóng bán dẫn với chân OC0 để điều khiển đèn LED nguồn. Ở đây có một điều khác là hơn bốn kênh PWM, hai là kênh PWM 8-bit. Chúng tôi sẽ sử dụng kênh PWM 8 bit ở đây.
Một tụ điện được kết nối với mỗi nút để tránh nảy. Bất cứ khi nào một nút được nhấn, sẽ có một số tiếng ồn ở chốt. Mặc dù tiếng ồn này ổn định trong mili giây. Đối với bộ điều khiển, các đỉnh sắc nét trước khi ổn định đóng vai trò như các yếu tố kích hoạt. Hiệu ứng này có thể được loại bỏ bằng phần mềm hoặc phần cứng để chương trình trở nên đơn giản. Chúng tôi đang sử dụng phương pháp phần cứng bằng cách thêm tụ bù.
Các tụ điện vô hiệu hóa hiệu ứng nảy của các nút.
Trong ATMEGA có một số cách để tạo PWM, đó là:
1. PWM đúng pha
2. PWM nhanh
Ở đây chúng ta sẽ giữ mọi thứ đơn giản, Vì vậy, chúng ta sẽ sử dụng phương pháp FAST PWM để tạo ra tín hiệu PWM.
Đầu tiên phải chọn tần số của PWM, Điều này thường phụ thuộc vào ứng dụng, đối với đèn LED, bất kỳ tần số nào lớn hơn 50Hz sẽ làm được. Vì lý do này, chúng tôi chọn đồng hồ đếm 1MHZ. Vì vậy, chúng tôi đang chọn không có prescalar. Số đo trước là một số được chọn để có đồng hồ đếm nhỏ hơn. Ví dụ: nếu xung nhịp của bộ dao động là 8Mhz, chúng ta có thể chọn một điểm đặt trước là '8' để lấy xung nhịp 1MHz cho bộ đếm. Giá trị đặt trước được chọn dựa trên tần số. Nếu chúng ta muốn có nhiều xung khoảng thời gian hơn, chúng ta phải chọn prescalar cao hơn.
Bây giờ để lấy PWM NHANH có xung nhịp 50Hz ra khỏi ATMEGA, chúng ta cần kích hoạt các bit thích hợp trong thanh ghi “ TCCR0 ”. Đây là thanh ghi duy nhất mà chúng ta cần bận tâm, để có được PWM NHANH 8bit.
Đây, 1. CS00, CS01, CS02 (MÀU VÀNG) - chọn thang đo sẵn để chọn đồng hồ đếm. Bảng cho vị trí đặt trước thích hợp được hiển thị trong bảng dưới đây. Vì vậy, để đặt trước một (đồng hồ dao động = đồng hồ bộ đếm).
do đó CS00 = 1, hai bit khác bằng không.
2. WGM01 và WGM00 được thay đổi để chọn chế độ tạo dạng sóng, dựa trên bảng dưới đây, cho PWM nhanh. Ta có WGM00 = 1 và WGM01 = 1;
3. Bây giờ chúng ta biết rằng PWM là tín hiệu có tỷ lệ nhiệm vụ khác nhau hoặc thời gian BẬT, TẮT khác nhau. Cho đến bây giờ chúng tôi đã chọn tần số và loại PWM. Chủ đề chính của dự án này nằm trong phần này. Để nhận được tỷ lệ nhiệm vụ khác nhau, chúng tôi sẽ chọn một giá trị từ 0 đến 255 (2 ^ 8 vì 8 bit). Giả sử chúng ta chọn giá trị 180, vì bộ đếm bắt đầu đếm từ 0 và đạt đến giá trị 180, phản hồi đầu ra có thể được kích hoạt. Kích hoạt này có thể đảo ngược hoặc không đảo ngược. Đó là đầu ra có thể được yêu cầu kéo lên khi đạt đến số lượng, hoặc nó có thể được yêu cầu kéo xuống khi đạt đến số lượng.
Lựa chọn kéo lên hoặc xuống này được chọn bởi các bit CM00 và CM01.
Như được hiển thị trong bảng, để đầu ra tăng cao khi so sánh và đầu ra sẽ ở mức cao cho đến giá trị tối đa (như thể hiện trong hình ở dưới cùng). Chúng ta phải chọn chế độ đảo ngược để làm điều đó, vì vậy COM00 = 1; COM01 = 1.
Như thể hiện trong hình dưới đây, OCR0 (Thanh ghi so sánh đầu ra 0) là byte lưu trữ giá trị do người dùng chọn. Vì vậy, nếu chúng ta thay đổi OCR0 = 180, bộ điều khiển sẽ kích hoạt sự thay đổi (cao) khi bộ đếm đạt 180 từ 0.
Bây giờ để thay đổi độ sáng của đèn LED, chúng ta phải thay đổi TỶ LỆ NHIỆM VỤ của tín hiệu PWM. Để thay đổi tỷ lệ nhiệm vụ, chúng ta cần thay đổi giá trị OCR0. Khi chúng ta thay đổi giá trị OCR0 này, bộ đếm sẽ mất thời gian khác để đạt được OCR0. Vì vậy, bộ điều khiển kéo đầu ra cao tại các thời điểm khác nhau.
Vì vậy, đối với PWM của các chu kỳ nhiệm vụ khác nhau, chúng ta cần thay đổi giá trị OCR0.
Trong mạch chúng ta có hai nút. Một nút dùng để tăng giá trị OCR0 và do đó TỶ LỆ NHIỆM VỤ của tín hiệu PWM, nút còn lại dùng để giảm giá trị OCR0 và do đó TỶ LỆ THỜI GIAN của tín hiệu PWM.