Chat
Danh mục
Bài 14:Khối toán đo quãng đường bằng Encoder

Bài 14:Khối toán đo quãng đường bằng Encoder

Số lượng:
Thêm vào giỏ
Bài 14:Khối toán đo quãng đường bằng Encoder đã được thêm vào giỏ hàng


Encoder là gì:
Encoder là thiết bị thường được sử dụng để đo và tính các khoảng cách dựa trên việc đếm số lổ trên encoder.
Có nhiều loại encoder nhưng chúng chỉ khác nhau về số lỗ. Có loại chỉ có 50 lỗ, 100 lỗ nhưng có loại lên đến vài ngàn lỗ.
Cấu tạo:
Encoder thường gồm một tấm tròn được khoét các lỗ cách đều nhau. Encoder 100 lỗ tức là trên tấm đĩa tròn có 100 lỗ. tấm đĩa đó được giử ở trong thân encoder và được nối với trục quay của encoder. Một bên tấm đĩa gắn một con LED phát sáng, bên còn lại gắn một con cảm biến ánh sáng (tương tự như là cảm biến dò đường vậy). Con led phát sáng và con cảm biến ánh sáng nằm cố định khi encoder quay.



Nguyên lý hoạt động của encoder dùng để đếm số lỗ có thể hiểu đơn giản như sau:
-         Khi trục encoder quay, tấm đĩa gắn với trục quay nên cùng quay với trục quay.
-         Con led phát sáng liên tục khi cấp nguồn và chiếu vào tấm đĩa, phía bên kia cứ mỗi lần ánh sáng từ con led chiếu qua 1 lỗ của tấm đĩa thì con cảm biến ánh sáng thu nhận được và xác định tương ứng 1 lỗ. Như vậy nếu trục encoder quay đúng 1 vòng thì tương ứng con cảm biến ánh sáng cũng phát hiện ra đúng số lỗ của encoder đó.
Ví dụ:
Muốn đo quảng đường 1 mét bằng cách sử dụng encoder 100 lỗ và trục của encoder được gắn vào trục quay của bánh xe ta thực hiện như sau:
-         Xác định chu vi của bánh xe (chẳng hạn là 25 cm)
-         Cứ 1 vòng quay của encoder thì bánh xe quay được một vòng, tức là:
Cứ 100 lỗ robot-> chạy được 25 cm
? lỗ                   -> chạy được 100 cm
Vậy ta có số lỗ cần thiết của encoder để robot chạy được 1m bằng 100*100/25=400(lỗ)
Thuật toán sử dụng encoder.



Chương trình sử dụng ngắt ngoài để đếm số lổ encoder:


void EX0_int0(void) interrupt 0
{
      ACC=encoder_low;                            
      if(ACC==0)
      {
       ACC=encoder_high;                                      
      if(ACC==0)
         EX0=0;           
        else
         {
          encoder_high=encoder_high-1;
          encoder_low=255;
         }
         }
    else       
    encoder_low=encoder_low-1;
}




Blog Điện Tử | Tin Học