Thuật toán chương trình đo tốc độ động cơ

Một phần của tài liệu Điều khiển tốc độ động cơ điện một chiều (Trang 45 - 47)

Chương trình đo tốc độ động cơ được đặt trong hàm phục vụ ngắt timer1. Thuật toán chương trình phục vụ ngắt timer1 được thể hiện trong hình 4.3. Timer1 được cài đặt tràn sau mỗi 2.5ms. Như vậy chương trình phục vụ ngắt timer1 được thực thi sau mỗi 2.5ms. Nhiệm vụ chính của hàm này là tính tốc độ hiện tại của động cơ rồi so sánh với tốc độ cài đặt, tính toán độ rộng xung theo thuật toán PID sau đó cập nhật độ rộng xung vừa tính cho bộ PWM.

Ban đầu, hàm sẽ dừng bộ timer1 và không cho phép ngắt trên chân RB0. Gán biến pulse_count cho biến Sp, biến pulse_count được dùng để đếm số xung từ encoder đưa về chân RB0 trong khoảng thời gian 2.5ms. Biến này được tăng lên một đơn vị trong chương trình phục vụ ngắt chân RB0. Sau khi gán, biến này được xóa về 0.

Sau đó, chương trình sẽ tính tốc độ của động cơ dựa trên công thức sau: Tốc độ = pulse_count / (400 x 2.5ms x 10-3) PPR (pulses per round). Trong đó 400 là số xung encoder tạo ra khi động cơ quay đúng một vòng. Sau khi đã có tốc độ động cơ hiện thời, chương trình sẽ so sánh tốc độ hiện thời và tốc độ cài đặt, tính toán độ rộng xung theo thuật toán PID dựa trên các tham số Kp, Ki, Kd, vận tốc cài đặt, vận tốc đo được.

Khi đã có độ rộng xung cần điều khiển, chương trình tiến hành cập nhật độ rộng xung cho bộ PWM. Như vậy việc áp dụng thuật toán PID để điều khiển độ rộng xung được thực hiện trong chương trình phục vụ ngắt timer1 này.

Sau khi đã thực hiện xong việc tính toán độ rộng xung cho khối PWM, chương trình sẽ cấu hình lại bộ timer1 tràn sau 2.5ms và kết thúc hàm. Cụ thể như sau:

- Cấu hình giá trị phù hợp cho thanh ghi TMR1, các bit điều khiển bộ prescaler.

- Cho phép bộ timer1 hoạt động. - Cho phép ngắt timer1.

Chương 4: Thiết kế phần mềm

Hình 4.3 Lưu đồ thuật toán chương trình phục vụ ngắt timer1. Bắt đầu

Dừng timer1

Không cho phép ngắt ngoài trên chân RB0

Gán biến pulse_count cho biến Sp. Hiển thị tốc độ động cơ lên LCD.

Gởi giá trị biến Sp lên máy tính.

Gán 0 cho biến pulse_count.(biến pulse_count được dùng để đếm số xung encoder đưa về chân ngắt ngoài RB0, trong chương trình phục vụ ngắt RB0, biến

pulse_count được tăng lên một đơn vị). Cập nhật duty cho module PWM

Cài đặt lại timer1 tràn sau 2.5ms. Cho phép timer1 đếm Cho phép ngắt timer1

Cho phép ngắt ngoài INT trên chân RB0.

Chương 4: Thiết kế phần mềm

Một phần của tài liệu Điều khiển tốc độ động cơ điện một chiều (Trang 45 - 47)