- Tín hiệu PWM là gì?
- Làm thế nào để chuyển đổi tín hiệu PWM sang điện áp Analog?
- Sơ đồ mạch:
- Lập trình MSP cho tín hiệu PWM:
- Kiểm soát độ sáng của đèn LED với PWM:
Hướng dẫn này là một phần của loạt bài hướng dẫn về MSP430G2 LaunchPad mà chúng ta đang học cách sử dụng MSP430G2 LaunchPad từ Texas Instruments. Cho đến nay chúng ta đã học những kiến thức cơ bản về bo mạch và đã trình bày cách đọc điện áp tương tự, giao diện LCD với MSP430G2, v.v… Bây giờ chúng ta tiến hành bước tiếp theo của việc tìm hiểu về PWM trong MSP430G2. Chúng tôi sẽ làm điều đó bằng cách kiểm soát độ sáng của đèn LED bằng cách thay đổi chiết áp. Vì vậy, chiết áp sẽ được gắn vào một chân tương tự của MSP430 để đọc điện áp tương tự của nó, do đó bạn nên biết qua hướng dẫn ADC trước khi tiếp tục.
Tín hiệu PWM là gì?
Điều chế độ rộng xung (PWM) là một tín hiệu kỹ thuật số được sử dụng phổ biến nhất trong mạch điều khiển. Tín hiệu này được đặt ở mức cao (3,3v) và thấp (0v) trong thời gian và tốc độ xác định trước. Thời gian tín hiệu duy trì ở mức cao được gọi là “đúng giờ” và thời gian tín hiệu ở mức thấp được gọi là “thời gian tắt”. Có hai tham số quan trọng đối với PWM như được thảo luận dưới đây:
Chu kỳ hoạt động của PWM:
Phần trăm thời gian mà tín hiệu PWM vẫn ở mức CAO (đúng giờ) được gọi là chu kỳ nhiệm vụ. Nếu tín hiệu luôn BẬT, nó đang ở trong chu kỳ làm việc 100% và nếu nó luôn tắt thì đó là chu kỳ làm việc 0%.
Chu kỳ làm việc = Thời gian BẬT / (Thời gian BẬT + Thời gian TẮT)
Tần suất của một PWM:
Tần số của tín hiệu PWM xác định tốc độ PWM hoàn thành một giai đoạn. Một khoảng thời gian hoàn tất BẬT và TẮT tín hiệu PWM như thể hiện trong hình trên. Trong hướng dẫn của chúng tôi, tần số là 500Hz vì nó là giá trị mặc định được đặt bởi Energia IDE.
Có rất nhiều ứng dụng cho tín hiệu PWM trong thời gian thực, nhưng để cung cấp cho bạn một ý tưởng, tín hiệu PWM có thể được sử dụng để điều khiển Động cơ servo và cũng có thể được chuyển đổi thành điện áp Analog có thể điều khiển độ sáng của đèn LED. Chúng ta hãy tìm hiểu một chút về cách điều đó có thể được thực hiện.
Dưới đây là một số ví dụ PWM với Vi điều khiển khác:
- Tạo PWM bằng Vi điều khiển PIC với MPLAB và XC8
- Điều khiển động cơ Servo với Raspberry Pi
- Bộ điều chỉnh độ sáng LED dựa trên Arduino sử dụng PWM
Kiểm tra tất cả các dự án liên quan đến PWM tại đây.
Làm thế nào để chuyển đổi tín hiệu PWM sang điện áp Analog?
Để chuyển tín hiệu PWM sang điện áp Analog chúng ta có thể sử dụng mạch gọi là bộ lọc RC. Đây là một mạch đơn giản và được sử dụng phổ biến nhất cho mục đích này. Đoạn mạch chỉ gồm một Điện trở và một tụ điện mắc nối tiếp như hình vẽ trong mạch điện dưới đây.
Vì vậy, điều cơ bản xảy ra ở đây là khi tín hiệu PWM cao, tụ điện sẽ sạc qua điện trở và khi tín hiệu PWM xuống thấp, tụ điện sẽ phóng điện qua điện tích được lưu trữ. Bằng cách này, chúng ta sẽ luôn có một điện áp không đổi ở đầu ra sẽ tỷ lệ với chu kỳ nhiệm vụ PWM.
Trong biểu đồ hiển thị ở trên, màu Vàng là tín hiệu PWM và màu xanh lam là điện áp tương tự đầu ra. Như bạn có thể thấy, sóng đầu ra sẽ không phải là sóng DC thuần túy nhưng nó sẽ hoạt động rất tốt cho ứng dụng của chúng ta. Nếu bạn cần sóng DC thuần túy cho loại ứng dụng khác, bạn nên thiết kế một mạch chuyển mạch.
Sơ đồ mạch:
Sơ đồ mạch khá đơn giản; nó chỉ có một chiết áp và một Điện trở và tụ điện để tạo thành một mạch RC và chính Led. Chiết áp được sử dụng để cung cấp điện áp tương tự dựa trên đó chu kỳ nhiệm vụ tín hiệu PWM có thể được điều khiển. Đầu ra của nồi được kết nối với Chân P1.0 có thể đọc điện áp analog. Sau đó chúng ta phải tạo ra tín hiệu PWM, có thể thực hiện bằng cách sử dụng chân P1.2, tín hiệu PWM này sau đó được đưa đến mạch lọc RC để chuyển tín hiệu PWM thành Điện áp Analog sau đó được đưa đến LED.
Điều rất quan trọng là phải hiểu rằng không phải tất cả các chân trên bảng MSP đều có thể đọc điện áp tương tự hoặc có thể tạo ra các chân PWM. Các chân cụ thể có thể thực hiện các nhiệm vụ cụ thể được hiển thị trong hình bên dưới. Luôn sử dụng điều này làm hướng dẫn để chọn các chân của bạn để lập trình.
Lắp ráp mạch hoàn chỉnh như hình trên, bạn có thể sử dụng một breadboard và một vài dây jumper và dễ dàng tạo kết nối. Sau khi kết nối xong, bảng của tôi trông giống như hình dưới đây.
Lập trình MSP cho tín hiệu PWM:
Khi phần cứng đã sẵn sàng, chúng ta có thể bắt đầu với việc lập trình của mình. Điều đầu tiên trong một chương trình là khai báo các chân mà chúng ta sẽ sử dụng. Ở đây chúng tôi sẽ sử dụng chân số 4 (P1.2) làm chân đầu ra của chúng tôi vì nó có khả năng tạo PWM. Vì vậy, chúng tôi tạo một biến và gán tên pin để dễ dàng tham chiếu đến nó sau này trong chương trình. Chương trình hoàn chỉnh được đưa ra ở cuối.
int PWMpin = 4; // Chúng tôi đang sử dụng chân thứ 4 trên mô-đun MSP làm chân PWM
Tiếp theo chúng ta đến với chức năng thiết lập . Bất kỳ mã nào được viết ở đây sẽ chỉ được thực thi một lần, ở đây chúng tôi tuyên bố rằng chúng tôi đang sử dụng chân thứ 4 này làm chân đầu ra vì PWM là chức năng đầu ra. Lưu ý rằng chúng tôi đã sử dụng biến PWMpin ở đây thay vì số 4 để mã trông có ý nghĩa hơn
void setup () { pinMode (PWMpin, OUTPUT); // PEMpin được đặt là Outptut }
Cuối cùng chúng ta vào hàm loop . Bất cứ điều gì chúng ta viết ở đây sẽ được thực thi lặp đi lặp lại. Trong chương trình này, chúng ta phải đọc điện áp tương tự và tạo ra tín hiệu PWM tương ứng và điều này phải lặp đi lặp lại. Vì vậy, trước tiên hãy bắt đầu bằng cách đọc điện áp tương tự từ chân A0 vì chúng ta đã kết nối với chiết áp vào nó.
Ở đây chúng ta đang đọc giá trị bằng hàm AanalogRead , hàm này sẽ trả về giá trị từ 0-1024 dựa trên giá trị của điện áp đặt vào chân. Sau đó, chúng tôi lưu trữ giá trị này vào một biến có tên là “val” như hình dưới đây
int val = analogRead (A0); // đọc giá trị ADC từ chân A0
Chúng ta phải chuyển đổi các giá trị từ 0 đến 1024 từ ADC thành các giá trị từ 0 đến 255 để cung cấp cho hàm PWM. Tại sao chúng ta nên chuyển đổi điều này? Tôi sẽ nói điều đó ngay thôi, nhưng bây giờ hãy nhớ rằng chúng ta phải chuyển đổi. Để chuyển đổi một bộ giá trị này sang một bộ giá trị khác, Energia có một chức năng bản đồ tương tự như Arduino. Vì vậy, chúng tôi chuyển đổi các giá trị của 0-1204 thành 0-255 và lưu lại trong biến “val”.
val = map (val , 0, 1023, 0, 255); // ADC sẽ đưa ra giá trị 0-1023 chuyển nó thành 0-255
Bây giờ chúng ta có một giá trị thay đổi từ 0-255 dựa trên vị trí của chiết áp. Tất cả những gì chúng ta phải làm là sử dụng giá trị này trên chân PWM, điều này có thể được thực hiện bằng cách sử dụng dòng sau.
analogWrite (PWMpin, val); // Ghi giá trị đó vào chân PWM.
Hãy quay lại câu hỏi tại sao 0-255 được ghi vào chân PWM. Giá trị 0-255 này quyết định chu kỳ nhiệm vụ của tín hiệu PWM. Ví dụ: nếu giá trị của tín hiệu là 0 thì nó có nghĩa là chu kỳ nhiệm vụ là 0% đối với 127 nó là 50% và đối với 255 là 100% giống như những gì được hiển thị và giải thích ở đầu bài viết này.
Kiểm soát độ sáng của đèn LED với PWM:
Khi bạn đã hiểu về phần cứng và mã, đã đến lúc bạn có thể vui vẻ với hoạt động của mạch. Tải mã lên bảng MSP430G2 và xoay núm chiết áp. Khi bạn xoay núm, điện áp trên chân 2 sẽ thay đổi và sẽ được bộ vi điều khiển đọc và theo điện áp, tín hiệu PWM sẽ được tạo ra trên chân 4. Điện áp càng lớn thì chu kỳ nhiệm vụ càng lớn và ngược lại.
Tín hiệu PWM này sau đó được chuyển đổi thành điện áp tương tự để phát sáng một đèn LED. Các sáng của đèn LED là tỷ lệ thuận với chu kỳ nhiệm vụ tín hiệu PWM. Ngoài đèn LED trên breadboard, bạn cũng có thể nhận thấy đèn LED smd (màu đỏ) thay đổi độ sáng của nó tương tự như đèn LED breadboard. Đây là LED cũng được kết nối với cùng một chân, nhưng nó không có mạng RC nên nó thực sự nhấp nháy rất nhanh. Bạn có thể lắc bảng trong phòng tối để kiểm tra tính chất nhấp nháy của nó. Hoạt động hoàn chỉnh cũng có thể được xem trong video bên dưới.
Đó là tất cả đối với mọi người, bây giờ chúng ta đã học cách sử dụng tín hiệu PWM trên bo mạch MSP430G2, trong hướng dẫn tiếp theo, chúng ta sẽ tìm hiểu cách dễ dàng điều khiển động cơ servo bằng cách sử dụng cùng các tín hiệu PWM. Nếu bạn có bất kỳ nghi ngờ nào, hãy đăng chúng vào phần bình luận bên dưới hoặc trên các diễn đàn để được trợ giúp kỹ thuật.