Tạo sóng PWM với vi điều khiển PIC: 6 bước
Tạo sóng PWM với vi điều khiển PIC: 6 bước
Anonim
Tạo sóng PWM với vi điều khiển PIC
Tạo sóng PWM với vi điều khiển PIC
Tạo sóng PWM với vi điều khiển PIC
Tạo sóng PWM với vi điều khiển PIC
Tạo sóng PWM với vi điều khiển PIC
Tạo sóng PWM với vi điều khiển PIC

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

Chọn bộ vi điều khiển
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

CẤU HÌNH MÔ ĐUN CCP
CẤU HÌNH MÔ ĐUN CCP
CẤU HÌNH MÔ ĐUN CCP
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)

Cấu hình Mô-đun Timer2 (Thanh ghi TMR2)
Cấu hình Mô-đun Timer2 (Thanh ghi 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

Viết bản phác thảo cho bạn MPLAB X IDE mã được đưa ra dưới đây
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