Mô-đun đo tốc độ mô-tơ: Vì một đĩa lập mã (encoder) cho 500 xung/1 vòng quay, nên tốc độ vòng quay của mô-tơ trong một phút (rpm) bằng tần số xung đếm

Một phần của tài liệu Thiết kế tạo bộ điều khiển PID điều khiển mạch điện (Trang 72)

quay, nên tốc độ vòng quay của mô-tơ trong một phút (rpm) bằng tần số xung đếm được chia cho 500 và nhân với 60. Vậy thực chất bộ đo tốc độ mô-tơ chính là bộ đo tần số xung nhận được từ bộ lập mã quang.

Chuỗi xung từ encoder được đưa tới cổng vào CLK1 của chip PIT-8254. Phần mềm sẽ tạo ra các xung cửa rộng 0,025s cho G1. Tần số xung từ encoderr (là số xung trong 1 s) chính bằng số đếm xung đi lọt qua cửa này chia cho 0,025. Tạo xung cửa cho bộ đếm C1 là sóng phát từ máy phát 1 MHz được chia 50.000 lần qua bộ đếm C0 để có các cửa 0,025 s.

Giá trị tốc độ tức thời này của mô-tơ sẽ được cấp tới mô-đun so sánh và mô-đun hiển thị tốc độ.

Hình 3.22. Đo tốc độ.

Đoạn chương trình sau tương ứng trong ngôn ngữ C cho ta kết quả đo tốc độ mô-tơ (đo tần số xung) bằng 2 bộ đếm C1 và C0 của chip PIT-8254:

outportb (0xB80B, 0x36); // 0011 0110 khởi động C0, mode 3 outportb (0xB808, 50000 &0xFF); // nạp byte thấp số đếm 50.000 outportb (0xB80A, 50000 >>7); // nạp byte cao

outportb (0xB80B, 0x70); // 0111 0000 khởi động C1, mode 0 C0 CLK0 1MHz G0 +5V OUT0 C1 CLK1 Chuỗi xung từ Encoder

cần đo tần số

outportb (0xB809, 65535 & 0xFF); // nạp byte thấp số đếm 65.535 outportb (0xB809, 65535 >>7); // nạp byte cao

do

{outportb (0xB80B, 0xE2); // 1110 0010 Chốt trạng thái C0

} while (inportb (0xB808) >>7 = 1; // đợi đến khi G1 = OUT0 bằng 0, cửa G1 đóng

outportb (0xB809, 65535 & 0xFF); // nạp byte thấp số đếm 65.535 cho C1 outportb (0xB809, 65535 >>7); // nạp byte cao

do

{outportb (0xB80B, 0xE2); // 1110 0010 Chốt trạng thái C0

} while (inportb (0xB808) >>7 = 0; // đợi đến khi G1 = OUT0 bằng 1, cửa G1 mở do

{outportb (0xB80B, 0xE2); // 1110 0010 Chốt trạng thái C0

} while (inportb (0xB808) >>7 = 1; // đợi đến khi G1 = OUT0 bằng 0, cửa G1 đóng byte_thap = inportb (0xB809); // đọc byte thấp số đếm lùi của C1

byte_cao = inportb (0xB809); // đọc byte cao

Số_xung = 65535 – (byte_cao * 256 + byte_thap); // số xung qua C1

Một phần của tài liệu Thiết kế tạo bộ điều khiển PID điều khiển mạch điện (Trang 72)

Tải bản đầy đủ (PDF)

(92 trang)