Cách Tính Xung Encoder Về Tốc Độ Đc, Cách Quy Đổi Từ Xung Encoder Về Tốc Độ Đc

Ta biết rằng, trong một số ứng dụng thực tế, ta cần phải đo đạc được tốc độ vòng quay của động cơ, hoặc tốc độ quay của 1 thiết bị có chuyển động quay nào đó (Ví dụ như tốc độ quay của bánh xe..v…v). Khi đó encoder là 1 giải pháp tối ưu cả về chi phí lẫn cách vận hành và sử dụng.

Đang xem: Cách tính xung encoder

Chỉ cần ta nắm rõ nguyên lý hoạt động của Encoder và nắm trong tay các công cụ, tính năng của Vi điều khiển là có thể làm chủ được nó 1 cách dễ dàng! Trong bài viết này, chúng tôi đề cập tới vi điều khiển họ AVR, tất nhiên nó chỉ là 1 đại diện cho các dòng vi điều khiển nói riêng và các máy tính nhúng nói chung. Ngoài AVR nếu các bác thông thạo các dòng vi điều khiển khác như PIC, 8051, STM… hoặc Arduino, Tiva thì chúng ta vẫn làm được dựa vào các chức năng tương tự của nó.

 

Encoder hoạt động cho ngõ ra dạng tín hiệu xung vuông

Khi encoder quay, cơ cấu cơ khí sẽ làm quay đĩa chia rãnh của nó cắt ngang qua đường tín hiệu quang được phát bởi máy phát quang (hồng ngoại, laser..). Việc chia cắt tín hiệu này cho ra đường tín hiệu dạng xung ở các kênh A, B và I. Xung này thường trả về tín hiệu ở mức logic 5V(High) và 0V(Low). Tín hiệu dạng xung này như bất kể các tín hiệu dạng xung điện khác, nó đều có những đặc tính sau để ta có thể phát hiện và đo đạc nó, bao gồm:

– Tín hiệu xung ở mức thấp 0V

– Tín hiệu xung ở mức cao 5V

– Tín hiệu sườn lên của xung

– Tín hiệu sườn xuống của xung

*

 

4 đặc tính của xung tín hiệu mà VĐK có thể phát hiện được nhờ các tính năng tích hợp trong nó

Như vậy, quay về bản chất của đọc xung Encoder đó là việc sử dụng vi điều khiển bắt các tín hiệu của xung ở 1 trong 4 đặc tính tín hiệu trên.

Tùy theo đại lượng điều khiển (vị trí hay vận tốc) và đặc điểm encoder (độ phân giải) chúng ta có các giải pháp sau để đọc encoder bằng AVR

Dùng chức năng Input Capture

Một số bộ timer-counter trên AVR có chức năng Input Capture, hiểu nôm na như sau: Cứ mỗi lần có một tín hiệu cạnh sườn lên hoăc cạnh sườn xuống của xung, trên chân ICP (Input Capture Pin), giá trị thời gian của timer được tự động gán cho thanh ghi ICR (Input capture Register).

*

Khối Input Capture trong AVR

So sánh giá trị thanh ghi ICR trong 2 lần liên tiếp sẽ đọc được chu kỳ của tín hiệu kích chân ICP. Từ đó suy ra tần số tín hiệu. Nếu một kênh của Encoder được nối với chân ICP thì chúng ta có thể đo được tần số tín hiệu của kênh này. Nói cách khác, chúng ta sẽ tính được vận tốc của động cơ.

Chúng ta có thể dùng ngắt Input capture và khi ngắt xảy ra, có thể đếm số thêm số xung để biết được góc quay motor, cũng có thể xác định được hướng quay thông qua xác định mức kênh B trong trình phục vụ ngắt input capture. Đây là một phương pháp hay, nhưng có nhược điểm là khá phức tạp khi sử dụng chức năng input capture của AVR. Mặc khác trên các chip AVR từ mega32 trở xuống, Input capture chỉ có ở timer 1, trong khi Timer này thường dùng để tạo PWM điều khiển động cơ.

Như vậy với Input Capture trong đo đạc Encoder ta làm được 2 việc:

– Thứ nhất là đo được tần số của động cơ từ đó suy ra tốc độ động cơ.

Xem thêm: Cách Link Dữ Liệu Trong Excel Lại Với Nhau, Cách Link, Liên Kết Dữ Liệu Giữa Các File Excel

– Thứ hai là đo được số xung của encoder từ đó suy ra được góc quay của động cơ

Dùng chức năng counter của AVR

Counter trong các vi điều khiển, nó là chức năng giúp đếm được các xung ngoài cấp từ các thiết bị phát xung độc lập vào trong Vi điều khiển. Bộ Encoder nói chung cũng là 1 trong các thiết bị đó. Để sử dụng chức năng Counter, các bạn cần có 1 vài cài đặt thanh ghi khởi tạo ban đầu để kích hoạt tính năng này. Điều này sẽ thay đổi tùy thuộc vào các loại vi điều khiển khác nhau do chúng có các thanh ghi khác nhau.

*

 

Khối chức năng counter của AVR

Chúng ta sẽ đặt các kênh của Encoder vào các chân đếm xung ngoài của Vi điều khiển, ở AVR là các chân T0, T1 của các bộ timer. Chúng ta sẽ đếm được số lượng xung của các kênh. Đây là phương pháp sử dụng ít tài nguyên nhất (ít tốn thời gian cho Encoder).

Nhược điểm lớn nhất của phương pháp này là không xác định được chiều quay, mặc khác phương pháp này không ổn định khi vận tốc động cơ có sự thay đổi lớn.

Sử dụng ngắt ngoài của AVR- External Interrupt

Đây là phương pháp dễ nhưng chính xác để đọc encoder và cũng là phương pháp được dùng trong bài học này. Ý tưởng của phương pháp rất đơn giản, chúng ta nối kênh A của encoder với 1 ngắt ngoài (INT2 chẳng hạn) và kênh B với một chân nào đó bất kỳ (không phải chân ngắt).

Cứ mỗi lần ngắt ngoài xảy ra, tức có 1 xung xuất hiện trên ở kênh A thì trình phục vụ ngắt ngoài tự động được gọi. Trong trình phục vụ ngắt này chúng ta kiểm tra mức của kênh B, tùy theo mức của kênh B chúng ta sẽ tăng biến đếm xung lên 1 hoặc giảm đi 1. Tuy nhiên, bạn cần phải tính toán rất cẩn thận khi sử dụng phương pháp này.

Xem thêm: Soạn Chương Trình Địa Phương Phần Văn Lớp 9 Chương Trình Địa Phương (Phần Văn)

Ví dụ:

Trường hợp encoder có độ phân giải 2000 xung/vòng, motor bạn quay với vận tốc 100 vòng/s thì tần số xung trên kênh A của encode là 2000×100=200KHz, nghĩa là cứ mỗi 5 us ngắt ngoài xảy ra một lần. Tần số ngắt như thế là quá cao cho AVR, điều này có nghĩa là AVR chỉ tập trung cho mỗi việc “đếm xung” và ngắt do các ngắt ngoài là các ngắt có mức ưu tiên rất cao chỉ sau ưu tiên Reset chip. Do vậy khi sử dụng phương pháp này chúng ta cần phải lựa chọn được tần số ngắt hợp lý và tần số phát xung của Encoder phù hợp.

Xem thêm bài viết thuộc chuyên mục: Cách tính