.1 Tính tốc độ động cơ

Một phần của tài liệu Thiết kế mạng giám sát và điều khiển MC68HC11 dùng RS 485 (Trang 85 - 88)

Động cơ được sử dụng là động cơ DC cĩ gắn sẵn Encoder, tốc độ động cơ vào khoảng 3800-4000 vịng/phút, mức xung Encoder đưa về là 100 xung/vịng (thơng số này cĩ thể khơng chính xác vì đây là loại Encoder dùng cơ cấu rơ le từ, sai số xung đưa về cao hơn so với loại dùng quang). Ở tốc độ cao nhất 4000 vịng/phút, một chu kỳ xung vào khoảng 150µs.

Để lấy tốc độ động cơ, xung từ Encoder sẽ được nối với chân PA2 là chân bắt giữ ngõ vào IC1 (Input Capture1). Khi phát hiện cạnh lên của xung tại chân này, MCU sẽ nhảy vào chương trình ngắt IC1SRT, tăng biến đếm PP30MS lên một.

Bắt đầu

RTI

PP30MS = PP30MS + 1

Xố cờ báo ngắt

Lưu đồ chương trình Ngắt IC1SRT đếm xung từ Encoder

Chương trình chính sẽ tính thời gian và chuyển giá trị trong biến PP30MS ra tốc độ của động cơ. Sau đây là thuật tốn tính tốc độ động cơ :

! Gọi số xung trong một vịng của Encoder là PPR (Pulses per Round)

! Số xung trong 30ms là PP30MS (Pulses per 30 ms)

! Số vịng trong 30 ms là RP30MS (Rounds per 30 ms) Ta cĩ

Số vịng động cơ trong 30ms = Số xung trong 30ms / Số xung một vịng

Hay RP30MS = PP30MS/PPR (1)

1phút = 60s = 60,000ms = 2000 x 30ms

Như vậy, tốc độ động cơ trong một phút tính theo RP30MS sẽ là

Thay (1) vào (2), ta cĩ

RPM = 2000 x PP30MS/PPR

Với PPR = 100 ta suy ra RPM = 20 x PP30MS (3) Cĩ thể thấy cách tính này cho sai số khá lơn, nếu việc đếm xung trong 30ms cho kết quả sai từ 1 đến 2 xung thì tốc độ sẽ sai từ 20 đến 40 vịng.

Cĩ 2 cách giảm sai số này :

! Tăng PPR. Với PPR = 500 xung/vịng, sai số tốc độ sẽ giảm xuống 5 lần khoảng 4-8 vịng/phút

! Tăng thời gian lấy mẫu (tức thời gian đếm xung PP30MS).

Vì khơng thể thay đổi PPR, ta chỉ cĩ thể thực hiện theo cách thứ hai là tăng thời gian đếm xung. Trong cơng thức (3), ta thấy nếu đếm xung trong 100ms thì sai số sẽ chỉ cịn 6 vịng/phút và đặc biệt nếu tăng lên nữa giả sử đếm trong 600ms thì cơng thức (3) trở thành

RPM = PP600MS

Tốc độ động cơ chính bằng số xung đếm được trong 600ms hay sai số chỉ cịn 1vịng/phút. Tuy nhiên 600ms là thời gian lấy mẫu lớn nếu cần điều khiển động cơ theo một thuật tốn cĩ hồi tiếp tốc độ.

Vì chỉ thu thập tốc độ động cơ, nên chương trình sẽ quan tâm nhiều hơn đến độ sai số của dữ liệu đọc về. Do đĩ, thời gian lấy mẫu được chọn là 300ms. Số xung trong 300ms sẽ được nhân đơi để lấy giá trị là số xung trong 600ms (và giá trị này cũng chính là tốc độ động cơ). Để tính thời gian, ta dựa vào giá trị thanh ghi TCNT 16 bit, cứ mỗi chu kỳ máy giá trị thanh ghi này tăng lên 1. Như vậy, nếu lấy mốc từ lúc bằng 0 đến khi TCNT= 60,000 cĩ nghĩa là đã qua : 60,000 x 500ns = 30ms.

Để đếm xung trong 300ms = 30ms x 10 ta cần thêm một biến COUNT. Biến này được nạp giá trị ban đầu là 10 và sẽ giảm đi 1 mỗi khi được 30 ms. Cứ 30ms số xung đếm được sẽ được cộng dồn vào biến ROUNDS. Khi được 300ms tức khi biến COUNT = 0, tốc độ động cơ sẽ được tính theo thuật tốn như trên tức

RPM = 2 x ROUNDS = ROUNDS + ROUNDS.

Sau đây là thuật tốn chương trình đếm xung và tính tốc độ động cơ (phần chữ in đậm chỉ một chương trình con được gọi).

Bắt đầu RTS Đã được 30 ms chưa Rounds = Rounds + Số xung trong 30 ms Count = 0 Rounds = Rounds x 2 RPM = Rounds Count = 10

Nạp lại các thơng số thời gian cho 30 ms tiếp theo

Y

N

Y N

Bắt đầu

Gán giá trị hiện thời của thanh ghi TCNT vào biến OLDTCNT

PP30MS = 0 Kết thúc

Lưu đồ chương trình Nạp lại các thơng số thời gian cho 30 ms tiếp theo

Một phần của tài liệu Thiết kế mạng giám sát và điều khiển MC68HC11 dùng RS 485 (Trang 85 - 88)

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

(131 trang)