资源描述:
《步进电机C语言程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、步进电机C语言程序 2009-04-1820:20:42
2、 分类: 单片机
3、字号 订阅//两相5、6线步进电机,分为四拍和八拍,这里介绍输出八拍方式:A-AC-C-CB-B-BD-D-DA//四拍:A-C-B-D,因此在八拍的基础上减去中间的就可以了,不过步距角要大一倍#include#includesbitla=P2^0; //定义两相电机的四组线,从板上设计来分配,选择P2口的低四位输出,相应的输出也可以反应在LED灯上 //P2。0为A相,P2。1为B相,P2。2为C相,P2。3为D相sbitlb=P2^1;sbitlc=P2^2;s
4、bitld=P2^3;#defineucharunsignedcharcodeunsignedintlhj[]={1,50,100,1,50,80,1,100,50,0,120,40,0,30,80,0,50,100, 1,50,120,0,200,80,1,400,20,1,50,130,0,200,90,0,50,150}; //定义电机动作的参数,每三个数为一组,第一个是方向(1、正转,0、反转) //第二个是步进量,第三个是转速unsignedcharkey();//键盘动作,这里的键盘扫描只用到四个按键有效(板上标的0,4,8,C)unsigned
5、charright(unsignedintSpeed,unsignedintroad);//正转unsignedcharleft(unsignedintSpeed,unsignedintroad);//反转voidmDelay(unsignedintDelayTime); //延时函数voidmain(){ uchari=0;while(1){ if(key()==0xde){//8的按键按下 for(i=0;i<34;i+=3){//循环输出我们定义好的动作数据 if(lhj[i]) //调入数组,先判断正反转 right(lhj[i+1],lhj[i+2])
6、;//两个参数代表步进量和转速 else left(lhj[i+1],lhj[i+2]); if(key()==0xee)//C的按键按下 break; } }} }unsignedcharright(unsignedintSpeed,unsignedintroad)//两个参数代表步进量和转速{//步进节拍:A-AC-C-CB-B-BD-D-DAwhile(1){ if(!Speed)//判断步进量走完没?以下都是,每走一步,判断一次 break; ld=1; la=0; //a mDelay(road);//这里的延时就可控制转速
7、 if(!Speed--) break; lc=0; //ac mDelay(road); if(!Speed--) break; la=1; //c mDelay(road); if(!Speed--) break; lb=0; //cb mDelay(road); if(!Speed--) break; lc=1; //b mDelay(road); if(!Speed--) break; ld=0; //bd mDelay(road); if(!Speed--) break; lb=1; //d mDelay(
8、road); if(!Speed--) break; la=0; //da mDelay(road); Speed--;}P3=P3
9、0x0f;//将四个脚输出置高}unsignedcharleft(unsignedintSpeed,unsignedintroad)//两个参数代表步进量和转速{ //步进节拍A-AD-D-DB-B-BC-C-CAwhile(1){ if(!Speed)//判断步进量走完没?以下都是,每走一步,判断一次 break; lc=1; la=0; //a mDelay(road); if(!Speed--) break;
10、 ld=0; //ad mDelay(road); if(!Speed--) break; la=1; //d mDelay(road); if(!Speed--) break; lb=0; //db mDelay(road); if(!Speed--) break; ld=1; //b mDelay(road); if(!Speed--) break; lc=0; //bc mD