logo资料库

用51单片机控制两相四线步进电机.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
用用51单片机控制两相四线步进电机 单片机控制两相四线步进电机 在这里和大家分享一个用51单片机控制两相四线步进电机的程序。 最近学习步进电机的驱动原理,照着教材自己实践了一下用ULN2003驱动28BYJ-48两相5线步进电机,可以正常转动。手头 有一个旧光驱,拆开发现里面有三个电机,其中有一个控制激光头寻迹的两相四线步进电机,我就用51的单片机让它也转起 来。一开始照葫芦画瓢用ULN2003驱动,结果发现无论如何也不行。原来ULN2003基本没输出电流,只能驱动有公共端的两 相五线、两相六线步进电机,不能驱动2相4线步进电机。然后改用L293D驱动,可以转动。通过按钮控制正反转时发现,按 键释放后,电机迅速发热,烫手。用万用表测量,发现电机A,A-或B,B-直接存在电位差!应该是按键释放时,IN1-IN4没有 归零。找到问题,就容易解决了。修改程序,可以完美运行,键1按下正转,释放停下,键2按下反转,释放停下。IN1-IN4分 别接P1口的低四位。工作方式选用8拍。 附上源程序,仅供参考。 #include #define uint unsigned int #define uchar unsigned char sbit K3=P2^5; sbit K4=P2^4; //k3正转。k4反转。释放停止 uchar code step_table[]={0x8,0xa,0x2,0x6,0x4,0x5,0x1,0x9}; void delay(unsigned int m) { unsigned int i,j; for(i=m;i>0;i--) for(j=110;j>0;j--); } void xp()//x轴正转 { while(!K3)
{ uint i; for(i=0;i<8;i++) { P1=step_table[ i]; delay(10); } } P1=0;//按键释放时,反转P1停在table某处,导致电机有电压从而使电机发热,需要归零。 } void xn()//x轴反转 { uint i; while(!K4) { for(i=8;i>0;i--) { P1=step_table[ i]; delay(10); } } P1=0;//按键释放时,反转P1停在table某处,导致电机有电压从而使电机发热,需要归零。 } void main() { while(1) { if(K3==0) { delay(20); if(K3==0) { // LED1=0; xp(); } } if(K4==0)
{ delay(20); if(K4==0) { // LED1=0; xn(); } } } }
分享到:
收藏