Cách tính xung encoder đọc xung bộ mã hoá trục với Vi điều khiển AVR

Trong 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.

Tìm hiểu thêm: Encoder là gì ?

Chúng tôi, 2H Automation sẽ cùng bạn đọc tìm hiểu Cách tính xung encoder đọc xung bộ mã hoá trục với Vi điều khiển AVR.

Tổng quan về cách dùng vi điều khiển đọc xung encoder

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:

Để đọ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í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

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ơ.

– 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.

Minh hoạ cách tính khi dùng vi điều khiển AVR đọc xung encoder

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.

Tìm hiểu thêm: Ứng dụng của encoder trong công nghiệp, cơ khí, tự động hoá, ô tô, văn phòng, y tế, khoa học, quốc phòng.

 

Được đăng vào

Viết bình luận