最近在做一个直流电机测速模块 测速采用红外对管,将电机的叶轮置于红外对管之间,叶轮转过,挡住对管,产生中断,给单片机,从而实现计数,进而计算出电机的速度。 下面是测速程序:
void init0() //定时器0,外部中断0的初始化 { TMOD=0x01; //设置定时器T0工作在方式1下 TH0=(65536-50000)/256; //置初值 TL0=(65536-50000)%256; EA=1; //开总中断 ET0=1; //开定时器T1中断 EX0=1; //开外部中断 IT0=1; //设置外部中断为下降沿触发 TR0=1; //开定时器
}
void INT0_0() interrupt 0 //外部中断0的中断函数 { speed_sd++;
}
void T0_time() interrupt 1 //定时器T0的中断函数 { EA=0; TR0=0; TH0=(65536-50000)/256; TL0=(65536-50000)%256; time++; if(time==10) { time=0; speed=speed_sd; speed_sd=0; } EA=1; TR0=1; }
void cesu() { speed=speed*2; bai=speed/100; shi=speed%100/10; ge=speed%10; display(0x03,bai); display(0x04,shi); display(0x05,ge); }
/*********************************************************************************
主函数 *********************************************************************************/ void main() //主函数 { init0(); while(1) { if(con==0) cesu(); } }
显示是通过1602显示的 显示程序是正确的所以没贴 0.5S更新一次数据 测试的时候显示数据变的很快 稳定不了 请大家帮我看看有什么问题没? 很急.....还有问一下 一般的那种5V直流电机当加5V电压时转速为多少??? 哪位大哥有做过本题目的请教下你们的方法 有没有什么更好的方法.......
|