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