本帖最后由 57185490 于 2023-1-15 12:38 编辑
52单片机+a8944驱动控制2相4线步进电机 按键控制正反转 A8944 “ENABLE 启动”空悬 ,接电后(由于低电平属于启动)所以按键无操作,电机也有电流持续升温,时间长就烧电机(已经烧了一个,但正反转运行正常)!所以必须接单片机拉高电平,只有按键操作拉低电平再转动,松开按键停止启动(无电流,避免电机持续发热) 现在“ENABLE”接的单片机P1^1, 问题出现啦~~~1:正转按键按下(P2_0)高电平3.9v拉低到0v,运行!但松开按键电平还是低电平 2:反转按键按下(P2_1)高电平只能拉低到1.7v,无法运行!松开按键,电平恢复到3.9v ENABLE=1和ENABLE=0 放到这个程序的任何位置都这样~~哪里出问题了? while 不用“y” (就是取消“y”这个操作,只用ENABLE=1和ENABLE=0 来启动和停止,也是这种情况) 这个是程序: #include <reg51.h> #define uchar unsigned char unsigned int y ; /**********************????****************/ void Delay(unsigned int xms) //@12.000MHz Delay(1)=1ms { unsigned char i, j; while(xms--) { i = 2; j = 239; do {while (--j);} while(--i); } } void delay1(unsigned int b)//可忽略,闲着无聊加个延时~~~ { uchar g; for(;b>0;b--) { g=250; while(--g); g=249; while(--g); } } /***********************************************/ sbit DIR=P2^0; // sbit STEP=P2^1; // sbit P2_0=P2^2; // sbit P2_1=P2^5; sbit ENABLE=P1^1; void step(void) { STEP=0; //脉冲 Delay(1); // Delay(1)=1ms STEP=1; Delay(1); } void UP_dj(void) //正转 { DIR=0; //正转 step(); if(P2_0==1)// 按键松开,电机停止 delay1(10);// 延时,防按键误操作 if(P2_0==1) { y=0;//while循环程序停止 } } void DN_dj(void) //反转 { DIR=1; //反转 step(); if(P2_0==1) // 按键松开,电机停止 delay1(10); // 延时 ,防按键误操作 if(P2_0==1) { y=0; } } void main() //??? { ENABLE=1; y=1; while(y) { if(P2_0==0) //?????????? delay1(10); if(P2_0==0) { ENABLE=0; UP_dj(); //正转 } if(P2_1==0) //?????????? delay1(10); if(P2_1==0) { ENABLE=0; DN_dj(); //反转 } } }
|