• Rotary Encoder Interfacing with ATmega8 Microcontroller

QC

Rotary Encoder Interfacing with ATmega8 Microcontroller

 Rotary Encoder Interfacing with ATmega8 Microcontroller - Giao diện bộ mã hóa quay với vi điều khiển ATmega8 



Trong hướng dẫn này, chúng ta sẽ giao tiếp một bộ mã hóa quay với vi điều khiển ATmega8. ATmega8 là dòng vi điều khiển của Atmel được thiết kế cho các ứng dụng nhúng. Bộ mã hóa quay được sử dụng để biết vị trí chuyển động và chuyển động góc của động cơ hoặc trục. Nó thường là thiết bị ba đầu cuối, với nguồn và chân nối đất được đếm đến năm. Mô-đun bộ mã hóa quay được hiển thị bên dưới.



The pins of a rotary encoder are:

  • Ground.
  • Positive connected to +5V
  • Output signal A pin
  • Output signal B pin
  • Clock pin or common pin.


ENCODER cung cấp các xung thể hiện sự thay đổi vị trí trục để hệ thống hiểu được. Hãy xem xét một NĂNG LƯỢNG XOAY được cấp nguồn và trục được di chuyển.



Như thể hiện trong bảng trên, hãy xem xét trục được di chuyển đồng hồ khôn ngoan. Với điều này, sẽ có Falling Edge ở nhà ga A sau đó ở nhà ga B.


Xem xét trục được di chuyển Chống đồng hồ khôn ngoan. Với điều này, sẽ có Falling Edge ở nhà ga B sau đó ở nhà ga A.


Cạnh này sẽ xảy ra một lần cho 360/20 = 18 độ (Đây là cho Bộ mã hóa có 20 vị trí, điều này thay đổi từ loại này sang loại khác, số lượng càng cao thì độ chính xác càng cao).


Với cả hai điều kiện trên, chúng ta có thể nhận được hướng và độ quay. Do đó, chúng tôi nhận được các thông số cần thiết để có được vị trí của trục.

Components


Phần cứng: ATMEGA8, chân kết nối, BỘ LẬP TRÌNH AVR-ISP, điện trở 220Ω, đèn LED (tám miếng), điện trở 1KΩ, điện trở 220Ω (2 miếng), tụ điện 100nF (2 miếng), bảng mạch bánh mì.

Phần mềm: Atmel studio 6.1, progisp hoặc flash magic.

Circuit Diagram and Working Explanation



Các tụ điện ở đây là để vô hiệu hóa hiệu ứng nảy tiếp xúc trong ENCODER. Nếu không có những tụ điện đó sẽ có một số vấn đề nghiêm trọng trong việc đọc vị trí.

Khi trục được di chuyển sẽ có sự chênh lệch thời gian giữa hai đầu ra chân ra. ATMEGA8 sẽ nhận ra sự chênh lệch thời gian này đối với chiều kim đồng hồ của Vòng quay khôn ngoan của đồng hồ.

Nếu quay theo chiều kim đồng hồ, số đếm nhị phân sẽ tăng lên một và số đếm này được hiển thị trong cổng LED như trong hình.

Nếu vòng quay là Anti clock thì số lượng nhị phân sẽ giảm đi một và số lượng nhị phân được hiển thị ở byte LED.

Hãy nhớ ở đây chúng tôi không thiết lập bất kỳ bit cầu chì nào của atmega8, Vì vậy, bộ điều khiển sẽ hoạt động trên tinh thể bên trong mặc định 1Mhz.

Hoạt động của bộ mã hóa quay giao diện với vi điều khiển ATmega8 được giải thích trong đoạn mã dưới đây.

#include <avr/io.h>

// header to enable data flow control over pins

#define F_CPU 1000000UL

//telling controller crystal frequency attached

#include <util/delay.h>

//header to enable delay function in program

int main(void)

{

                DDRD = 0xFF;// portD as output

                PORTD =0;

                DDRC= 0;//portC as input

                int count =0;

                int i=0;

    while(1)

    {

                                if (i==0)

                                {

                                                                if ((bit_is_clear(PINC,0))||(bit_is_clear(PINC,1)))

                                                //If any Encoder pins show falling edge execute lop

                                                                {

                                                                                i= 1;

                                                                                _delay_ms(10);

                                                                                if (bit_is_clear(PINC,0) )//if PINB is second to go LOW

                                                                                {

                                                                                                if (count<255)

                                                                                                {

                                                                                                                count++;

                                                                                                // increment binary count if count is less than 255

                                                                                                }

                                                                                }

if (bit_is_clear(PINC,1))// if PINA is second to go LOW

                                                                                {

                                                                                                if (count>0)

                                                                                                {

                                                                                                                count--;

                                                                                                // if binary count is greater than 0 decrease count by 1

                                                                                                }

                                                                                }

                                                                }

                                }

                PORTD = count;

                                   if ((bit_is_set(PINC,0))&&(bit_is_set(PINC,1) ))// wait till shaft position reset

                                   {

                                                   i = 0;

                                   }

    }

}











Nap Code vào PY32F003 dùng Stlink

 Nap Code vào PY32F003 dùng Stlink Bước 1: Cài đặt  KeilC v5.39 theo link sau ( chú ý 5.39 keil c mới nạp ok). https://edge07.111.ir.cdn.ir/...