ATMEGA48单片机,使用增量式光电编码器测电机转速和转向,LCD1602显示。转速已经测量出来了,但电机的转向,虽然大概知道原理但具体的程序实现不了。正转时B相脉冲超前A相90度,反转则相反是吧,我将AB相分别接入外部中断0和1:
ISR(INT0_vect)//中断服务函数,上升沿触发
{
flag=PIND; //两个外部中断在PD2和PD3口
flag|=0B11110011; //这里读入PD口状态,并滤去其他位只观察PD2PD3
if(flag==0B11110111) //当PD2为1且PD3为0时,表示正转
{表示正转了}
}
ISR(INT1_vect)
{
flag=PIND;
flag|=0B11110011;
if(flag==0B11111011)
{表示反转了}
}
|