BÀI 14: ENCODER VỚI STM32F103.



  1. Một số khái niệm về lý thuyết.
  2. Để xác định được góc quay, vận tốc quay hay vị trí quay một cách chính xác thì sử dụng encoder là một biện pháp hữu hiệu nhất. Từ các thông số mà encoder đưa về chúng ta phải xử lý và đưa ra các phương pháp điều khiển phù hợp. Thông thường các động cơ như AC Servo hay DC Servo điều có encoder đi kèm để dễ dàng điều khiển vận tốc cũng như vị trí. Đa số các encoder đều phải cấp nguồn riêng(khác với nguồn cấp cho động cơ). Điều cơ bản cần biết về 1 encoder là độ phân giải bao nhiêu(bao nhiêu xung – càng cao càng tốt), điện áp cấp là bao nhiêu, số dây in-out.
    2 loại cấu tạo thông dụng nhất của encoder là encoder quang(bao gồm một thiết bị phát quang, 1 đĩa chia rãnh hoặc khe, 1 thiết bị thu quang) và encoder dùng cảm biến từ Hall. Người ta chia encoder ra làm 2 loại encoder tuyệt đối(độ chính xác cao, hoạt động ổn định tuy nhiên giá thành cao và tín hiệu ngõ ra phức tạp) và encoder tương đối(độ chính xác ở mức vừa, giá rẻ, dễ sử dụng).
    Encoder có nhiều loại nên cấu tạo, cách sử dụng, số dây ra, điện áp cấp là khác nhau. Tuy nhiên về cơ bản thì thường sẽ có 5 dây chính: 2 dây cấp nguồn cho encoder hoạt đông, 2 dây A,B để xác định chiều quay, 1 dây Z để xác định số vòng quay.
    Ở STM32F013C8T6 có 4 timer sử dụng được mode encoder tương thích với thư viện của nhà sản xuất – nghĩa là sử dụng được tối đa là 4 encoder riêng biệt. Với mode encoder của thư viện, cách sử dụng đó là: Loại encoder 2 dây(cả pha A và B)sử dụng trên cùng 1 timer với 2 kênh tương ứng là CH1 và CH2 – không được sử dụng trên các kênh CH2 và CH3 hoặc CH1 và CH3…
    Bộ đếm của các timer này tối đa là 16 bit tương ứng với giá trị 65535 là sẽ bị tràn. Khi bị tràn chúng ta phải cấu hình ngắt tràn để xử lí sự kiện tràn và reset bộ đếm để tránh tình trạng đọc sai giá trị encoder. Chỉ cần sử dụng STM32F103C8 loại 48 chân là bạn có thể thoải mái điều khiển động cơ mà không cần lo về việc thiếu timer.
  3. Cấu hình sử dụng thư viện chuẩn.
  4. Vd: mình sẽ sử dụng TIM1 với 4 kênh timer để băm xung điều khiển 2 động cơ là TIM1_CH2, TIM1_CH2N, TIM1_CH3, TIM1_CH3N; tần số 1khz. 2 động cơ có sẵn 2 encoder với 2 pha A,B được đọc về ở 2 timer là TIM2 và TIM3, có cấu hình ngắt tràn. TM4 được cấu hình ngắt tràn mỗi 10ms để tính vận tốc. Vận tốc được tính sẽ được in lên máy tính thông qua UART với tốc độ baud 115200.
    Sơ đồ kết nối:
    1. Cấu hình TIM1 với 4 kênh PWM để điều khiển động cơ.
    2. Cấu hình 2 Encoder có ngắt tràn với TIM2, TIM3.
    3. Cấu hình tràn TIM4 mỗi 10ms.
    4. Chương trình con xử lí ngắt tràn TIM2.
    5. Chương trình con xử lí ngắt tràn TIM3.
    6. Chương trình con xử lí ngắt tràn TIM4.
    7. Chương trình trong main.
    LƯU Ý :
    • Tùy thuộc vào loại encoder mà số xung(độ phân giải) / 1 vòng quay sẽ khác nhau.
    • Tùy thuộc cách mắc dây mà chiều encoder âm hay dương.
    • Khi sử dụng encoder cần có IC đệm được mắc kèm theo để tránh hư hỏng chân vi điều khiển và tín hiệu xung đọc về được chính xác hơn.
    Code mình đã upload ở dưới. Đây chỉ là cấu hình theo phần cứng có sẵn của mình các bạn có thể tham khảo hoặc linh hoạt chọn các chân khác. Chúc các bạn thành công, có thắc mắc thì cứ nhắn tin cho mình

Link tải chương trình Encoder