You are on page 1of 2

Đọc encoder [Lưu Trữ] - Cơ điện tử Việt Nam http://www.cdtvn.net/forum/archive/index.php/t-136.

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

numberone_vl 21-11-2009, 05:20 PM


anh em cơ điện tử giúp mình với!!!
bọn mình đang phải làm đồ án dùng vi điều khiển đọc tốc độ quay encorde,nhưng mình chưa biết chương
trình như thế nào để biết được khi động cơ quay ngược và quay thuận.mấy anh em giúp bọn mình với:)hinh8

Mylife 22-11-2009, 11:35 PM


anh em cơ điện tử giúp mình với!!!
bọn mình đang phải làm đồ án dùng vi điều khiển đọc tốc độ quay encorde,nhưng mình chưa biết chương
trình như thế nào để biết được khi động cơ quay ngược và quay thuận.mấy anh em giúp bọn mình với:)hinh8

Ở đâ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

PORTC.0 = Dir; // xuat ra chieu quay cua Encoder


};
}

numberone_vl 23-11-2009, 10:50 PM


cam on bac nhe!de em viet lai chuong trinh cho chay thu da nhe!

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

numberone_vl 23-11-2009, 11:02 PM


à bác mylife hiểu nhầm ý em rùi!em hỏi chương trình để phát hiện khi động cơ quay thuận và quay nghịch
cơ!(đề bài cụ thể nhé bác: [I][I]hiển thị lên lcd số vòng quay của động cơ //vòng/phút.biết được tốc độ khi
ấy của động cơ là đang quay thuận hay nghịch ).mấy bác giúp bọn em với:)hinh9:)hinh9

Mylife 25-11-2009, 03:47 AM


à bác mylife hiểu nhầm ý em rùi!em hỏi chương trình để phát hiện khi động cơ quay thuận và quay nghịch
cơ!(đề bài cụ thể nhé bác: [I][I]hiển thị lên lcd số vòng quay của động cơ //vòng/phút.biết được tốc độ khi
ấy của động cơ là đang quay thuận hay nghịch ).mấy bác giúp bọn em với:)hinh9:)hinh9

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é!

#define VDC2 OCR1BL


/*================================================= ==*/
int xungA, speed;
int count;
/*================================================= ===*/
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void) //đếm xung
{
xungA ++;
}
/*================================================= ===*/
interrupt [TIM0_OVF] void timer0_ovf_isr(void) //xác định số xung trong một giây
{
count++;
if (count>=Clock value/256)
{
count=0;
speed= xungA*60; //rpm vòng / phút
xung=0;
}

}
Cố gắn bạn nhé!:)hinh18 Chúc bạn thành công!:)hinh18:)hinh18:)hinh18

numberone_vl 25-11-2009, 03:29 PM


cam on bac nhieu nhe!!!!

maimechinhchienvayeuduong 14-12-2009, 11:11 PM


tiện đây cho mình hỏi với.Mình chưa hiểu cách điều khiển động cơ có Encoder,bạn viết cho mình đoạn chương
trình mẫu(có chú thích rõ ràng xíu:)D).Về cách hiển thị tốc độ lên LCD,VB và cách đảo chiều động cơ với.Giúp
đỡ mình xíu nha bạn.A,cả cách thiết lập trong CodeVision nữa,khai báo ra sao,những gì.Mình xin lỗi vì hỏi
nhìu quá.Mình yếu lập trình lắm.Mình đang cố càm cự:)L

vBulletin® v3.8.4, Copyright ©2000-2011, Jelsoft Enterprises Ltd.

2 of 2 4/27/2011 5:14 PM

You might also like