Mục lục:
2025 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2025-01-13 06:58
PWM LÀ GÌ?
PWM STANDS FOR PULSE WIDTH MODULATION là một kỹ thuật mà độ rộng của xung thay đổi.
Để hiểu rõ khái niệm này, hãy xem xét một xung đồng hồ hoặc bất kỳ tín hiệu sóng vuông nào mà nó có chu kỳ làm việc 50% có nghĩa là chu kỳ Ton và Toff là như nhau, Tổng thời lượng tín hiệu cao và thời lượng tín hiệu thấp được gọi là tổng khoảng thời gian.
Đối với hình ảnh hiển thị ở trên, sóng này có chu kỳ nhiệm vụ là 50%
Chu kỳ làm việc = (Thời gian BẬT / Tổng thời gian) * 100
ON time - thời gian cho tín hiệu cao
Thời gian TẮT - thời gian đối với tín hiệu thấp Tổng thời gian -Tổng thời gian của xung (cả thời gian BẬT và TẮT)
Bước 1: Chọn Bộ vi điều khiển
Lựa chọn vi điều khiển thích hợp cho dự án, đây là phần thiết yếu của dự án Tín hiệu PWM có thể được tạo ra trong vi điều khiển có kênh PWM (thanh ghi CCP). Đối với dự án này, tôi dự định gắn bó với pic16f877. bạn có thể tải xuống liên kết biểu dữ liệu được cung cấp bên dưới
Bảng dữ liệu PIC16F877a bấm vào đây
Mô-đun CCP chịu trách nhiệm tạo ra tín hiệu PWM. CCP1 và CCP2 được ghép với PORTC. PORTC là một cổng hai chiều rộng 8 bit. Thanh ghi hướng dữ liệu tương ứng là TRISC. Đặt bit TRISC (= 1) sẽ làm cho chân PORTC tương ứng làm đầu vào. Xóa một bit TRISC (= 0) sẽ làm cho chân PORTC tương ứng trở thành đầu ra.
TRISC = 0; // Xóa bit này sẽ làm cho PORTC làm đầu ra
Bước 2: CẤU HÌNH MÔ ĐUN CCP
CCP - CÁC CHẾ ĐỘ CAPTURE / SO SÁNH / PWM
Mỗi mô-đun Capture / Compare / PWM (CCP) chứa một thanh ghi 16 bit có thể hoạt động như một:
• Thanh ghi Capture 16 bit
• Thanh ghi so sánh 16 bit
• Thanh ghi chu kỳ nhiệm vụ PWM Master / Slave
Cấu hình thanh ghi CCP1CON sang chế độ PWM
Đăng ký Mô tả
CCPxCON Thanh ghi này được sử dụng để cấu hình mô-đun CCP cho Capture / Compare / PWM opertaion.
CCPRxL Thanh ghi này chứa các bit 8-Msb của PWM, 2-bit thấp hơn sẽ là một phần của thanh ghi CCPxCON.
TMR2 Bộ đếm chạy tự do sẽ được so sánh với CCPR1L và PR2 để tạo ra đầu ra PWM.
Bây giờ tôi sẽ sử dụng nhị phân để biểu diễn các bit để cấu hình thanh ghi CCP1CON.
tham khảo hình ảnh trên.
CCP1CON = 0b00001111;
Bạn cũng có thể định dạng hex
CCP1CON = 0x0F; // cấu hình thanh ghi CCP1CON cho chế độ PWM
Bước 3: Cấu hình Mô-đun Timer2 (Đăng ký TMR2)
Timer2 là một bộ định thời 8 bit với một bộ định mức trước và một bộ định mức sau. Nó có thể được sử dụng làm cơ sở thời gian PWM cho chế độ PWM của (các) mô-đun CCP. Thanh ghi TMR2 có thể đọc và ghi được và bị xóa khi Reset thiết bị bất kỳ.
Thanh ghi T2CON được hiển thị
Tỷ lệ đặt trước và tỷ lệ đăng sẽ điều chỉnh tần số đầu ra của sóng PWM được tạo ra.
Tần số = tần số xung nhịp / (4 * bộ đếm đặt trước * (PR2-TMR2) * Bộ đếm số lượng bài viết *)
Trong đó Tout = 1 / tần số
T2CON = 0b00000100;
Điều này sẽ tạo ra tinh thể 2,5 KHz @ 1Mhz hoặc 100KHz @ 4MHz (thực tế có một giới hạn đối với biểu dữ liệu cụ thể tham khảo tần số PWM này để biết thêm chi tiết)
đại diện hex
T2CON = 0x04; // kích hoạt T2CON mà không cần cấu hình Prescaler và postscale
Bước 4: Cấu hình PR2 (Đăng ký định kỳ Timer2)
Mô-đun Timer2 có một thanh ghi chu kỳ 8-bit, PR2. Timer2 tăng từ 00h cho đến khi khớp với PR2 và sau đó đặt lại thành 00h trong chu kỳ tăng tiếp theo. PR2 là một thanh ghi có thể đọc và ghi được. Thanh ghi PR2 được khởi tạo thành FFh khi Reset.
Đặt một phạm vi thích hợp cho PR2 sẽ cho phép sử dụng để thay đổi chu kỳ nhiệm vụ của sóng PWM được tạo ra
PR2 = 100; // Đặt thời gian chu kỳ thành 100 để thay đổi chu kỳ nhiệm vụ từ 0-100
Để đơn giản, tôi đang sử dụng PR2 = 100 bằng cách tạo CCPR1L = 80; Có thể đạt được 80% chu kỳ nhiệm vụ.
Bước 5: Định cấu hình Mô-đun CCPR1l
Vì PR2 = 100 CCPR1l có thể được định cấu hình ở bất kỳ đâu trong khoảng từ 0-100 để có được chu kỳ nhiệm vụ mong muốn.
Bước 6: Viết bản phác thảo cho bạn MPLAB X IDE mã được đưa ra dưới đây
#bao gồm
void delay (int a) // hàm tạo độ trễ {
for (int i = 0; i <a; i ++)
{
for (int j = 0; j <144; j ++);
}
}
void main ()
{TRISC = 0; // Xóa bit này sẽ làm cho PORTC làm đầu ra.
CCP1CON = 0x0F; // cấu hình thanh ghi CCP1CON cho chế độ PWM
T2CON = 0x04; // kích hoạt T2CON mà không cần cấu hình Prescaler và postscale.
PR2 = 100; // Đặt thời gian chu kỳ thành 100 để thay đổi chu kỳ nhiệm vụ từ 0-100
trong khi (1) {
CCPR1L = 75; // tạo ra độ trễ chu kỳ nhiệm vụ 75% (1);
}
}
Tôi cũng đã thực hiện một chút sửa đổi đối với mã để tần số của sóng PWM được tạo ra
Đây là mã được mô phỏng trong proteus và sóng PWM đầu ra được hiển thị bên dưới. Để tải nó lên bảng phát triển pic của bạn, hãy sử dụng #include với các bit cấu hình phù hợp.
Cảm ơn bạn