Professional Documents
Culture Documents
Đọc encoder (Lưu Trữ) - Cơ điện tử Việt Nam
Đọc encoder (Lưu Trữ) - Cơ điện tử Việt Nam
html
Cơ điện tử Việt Nam > Mechatronics (Cơ điện tử) > Tin học - Lập trình > Vi Điều Khiển > Đọc encoder
PDA
View Full Version : Đọc encoder
Ở đây mình có một đoạn chương trình viết cho motor tự hãm. Khi ta quay motor theo chiều này thì encoder
sẽ nhận biết chiều và cho motor quay theo chiều ngược lại. bạn tham khảo nhé. Chúc bạn thành
công!!!!!!!!:)good
#include <mega32.h>
#include <delay.h>
#define En PORTB.3 //chieu quay cua motor
#define Dir PORTC.1 //cho phep motor hoat dong hay khong
#define xungA PIND.2 //xung a noi vao PIND.2
#define xungB PIND.3 //xung B noi vao PIND.3
#define Hight 1 //muc cao
#define Low 0 //muc thap
#define thuan 1 // chieu thuan
#define nghich 0 // chieu nghich
#define off 0 // khong quay
#define on 1
void main(void)
{
while (1)
{
if((xungA==Low)&&(xungB==Low)) // khi ca 2 xung deu muc thap
{
En = off;
}
if((En==off)&&(xungA==Hight)&&(xungB==Low))
//trang thai truoc 2 xung deu muc thap
//xung A tac dong,xung B chua tac dong
//=> chieu quay theo chieu thuan
{
Dir = nghich; // cho motor quay theo chieu nghich
delay_ms(10); //thoi gian cho role dap ung khi dao chieu quay
En = on; // co quay
}
if((En==off)&&(xungA==Low)&&(xungB==Hight))
//trang thai truoc 2 xung deu muc thap
//xung B tac dong,xung A chua tac dong
//=> chieu quay theo chieu nghich
{
Dir = thuan; // cho motor quay theo chieu thuan
delay_ms(10);
En = on; // trang thai dang quay
}
if((xungA==Hight)&&(xungB==Hight))
//neu ca 2 xung deu tac dong cung muc cao
En =on ; //trang thai nay khong xac dinh chieu quay
1 of 2 4/27/2011 5:14 PM
Đọc encoder [Lưu Trữ] - Cơ điện tử Việt Nam http://www.cdtvn.net/forum/archive/index.php/t-136.html
Trong đoạn chương trình trên là sử dụng để xác định được chiều quay của động cơ mà:
Muốn xác định được chiều quay của động cơ thì ta phải sử dụng Encoder có 2 đường tín hiệu trả về tức là
xungA và xungB. 2 xung này sẽ được nối vào 2 chân ngắt ngoài (có thể chân khác)
Còn việc đo tốc độ động cơ thì chỉ cần sử dụng 1 xungA/B là được:)B
" if((En==off)&&(xungA==Hight)&&(xungB==Low))
//trang thai truoc 2 xung deu muc thap
//xung A tac dong,xung B chua tac dong
//=> chieu quay theo chieu thuan "
Nếu điều kiện trong câu lệnh trên đúng tức là động cơ đang quay theo chiều thuận. Sau đó xuất tốc độ
"speed"-> LCD.:)B
" if((En==off)&&(xungA==Low)&&(xungB==Hight))
//trang thai truoc 2 xung deu muc thap
//xung B tac dong,xung A chua tac dong
//=> chieu quay theo chieu nghich"
Nếu điều kiện trong câu lệnh trên đúng tức là động cơ đang quay theo chiều nghịch. Công việc tương tự.:)B
Ở đây mình có đoạn chương trình đếm xung và đo tốc độ của dc bạn tham khảo nhé!
}
Cố gắn bạn nhé!:)hinh18 Chúc bạn thành công!:)hinh18:)hinh18:)hinh18
2 of 2 4/27/2011 5:14 PM