Ðăng Nhập

View Full Version : Đếm xung encoder cho 2 động cơ


ElecTel
28-12-2011, 06:14 PM
Chào các anh ! em đang tìm hiểu điều khiển động cơ .... đọc tài liệu cũng nhiều .... Em có thắc mắc thế này : nhiều người sử dụng ngắt ngoài để đếm xung từ 1 encoder của 1 động cơ .... mà trong PIC16F877a thì chỉ có 1 chân B0 ... vậy khi sử dụng từ 2 động cơ muốn đọc xung từ 2 động cơ thì phải làm thế nào ???

daokhanhvimaru
28-12-2011, 10:03 PM
Chào các anh ! em đang tìm hiểu điều khiển động cơ .... đọc tài liệu cũng nhiều .... Em có thắc mắc thế này : nhiều người sử dụng ngắt ngoài để đếm xung từ 1 encoder của 1 động cơ .... mà trong PIC16F877a thì chỉ có 1 chân B0 ... vậy khi sử dụng từ 2 động cơ muốn đọc xung từ 2 động cơ thì phải làm thế nào ???

ở Pic 16F877a chỉ có 1 chân ngắt ngoài theo cạnh nhưng cả cổng B có chế độ ngắt khi có sự thay đổi trên chân . Như vậy vậy có thể sử dụng ngắt cổng B khi có sự thay đổi nhưng chú ý 1 sự thay đổi chỉ ứng với T/2 không phải T như như ngắt ngoài .
chúc bạn thành công !

ElecTel
29-12-2011, 01:54 AM
ở Pic 16F877a chỉ có 1 chân ngắt ngoài theo cạnh nhưng cả cổng B có chế độ ngắt khi có sự thay đổi trên chân . Như vậy vậy có thể sử dụng ngắt cổng B khi có sự thay đổi nhưng chú ý 1 sự thay đổi chỉ ứng với T/2 không phải T như như ngắt ngoài .
chúc bạn thành công !

Cảm ơn anh ! Đây là ý tưởng cho chương trình của em ...... rất mong ý kiến đánh giá của anh !


#byte portb=0x06
#byte intcon=0x000B
#bit RB4=portb.4
#bit RB5=portb.5
#bit RBIF=intcon.0 //dinh nghia co ngat RB
#bit RBIE=intcon.3 //dinh nghia bit cho phep ngat RB
int ec1=0; int ec2=0;// Chuong trinh ngat
#int_RB void ngat_RB()
{ if((RBIF)&&(RBIE))
{
{
if(RB4==1)
// // doc ec1
{
if(ec1==255)
ec1=0;

ec1 ++;
}
}
{
if(RB5==1)
///// doc ec2
{
if(ec2==255)
ec2=0;

ec2 ++;
}
RBIF=0; //Xoa co ngat RB
}
}

Trong đoạn code trên dùng ngắt ngoài trên portB vậy lỡ khi 2 xung đồng thời tới trên 2 chân thì có ảnh hưởng gì tới việc đọc được xung ???
Em vẫn chưa hiểu về T với T/2 ..... em nghĩ ngắt ngoài thì khi nào có tác động ngoài thì ngắt mới hoặt động chứ nhỉ ???