步进电机C语言程序.doc_第1页
步进电机C语言程序.doc_第2页
步进电机C语言程序.doc_第3页
步进电机C语言程序.doc_第4页
步进电机C语言程序.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

步进电机C语言程序2009-04-18 20:20:42|分类:单片机|字号订阅/两相5、6线步进电机,分为四拍和八拍,这里介绍输出八拍方式:A-AC-C-CB-B-BD-D-DA/四拍:A-C-B-D,因此在八拍的基础上减去中间的就可以了,不过步距角要大一倍#include #include sbit la=P20; /定义两相电机的四组线,从板上设计来分配,选择P2口的低四位输出,相应的输出也可以反应在LED灯上 /P2。0为A相,P2。1为B相,P2。2为C相,P2。3为D相sbit lb=P21;sbit lc=P22;sbit ld=P23;#define uchar unsigned charcode unsigned int lhj=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、反转) /第二个是步进量,第三个是转速unsigned char key();/键盘动作,这里的键盘扫描只用到四个按键有效(板上标的0,4,8,C)unsigned char right(unsigned int Speed,unsigned int road); /正转unsigned char left(unsigned int Speed,unsigned int road); /反转void mDelay(unsigned int DelayTime); /延时函数void main()uchar i=0;while(1) if(key()=0xde)/8的按键按下 for(i=0;i34;i+=3)/循环输出我们定义好的动作数据 if(lhji) /调入数组,先判断正反转 right(lhji+1,lhji+2); /两个参数代表步进量和转速 else left(lhji+1,lhji+2); if(key()=0xee)/C的按键按下 break; unsigned char right(unsigned int Speed,unsigned int road)/两个参数代表步进量和转速/步进节拍:A-AC-C-CB-B-BD-D-DAwhile(1) if(!Speed) /判断步进量走完没?以下都是,每走一步,判断一次 break; ld=1; la=0; /a mDelay(road);/这里的延时就可控制转速 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(road); if(!Speed-) break; la=0; /da mDelay(road); Speed-;P3=P3|0x0f;/将四个脚输出置高unsigned char left(unsigned int Speed,unsigned int road)/两个参数代表步进量和转速 /步进节拍 A-AD-D-DB-B-BC-C-CAwhile(1) if(!Speed)/判断步进量走完没?以下都是,每走一步,判断一次 break; lc=1; la=0; /a mDelay(road); if(!Speed-) break; 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 mDelay(road); if(!Speed-) break; lb=1; /c mDelay(road); if(!Speed-) break; la=0; /ca mDelay(road); Speed-;P3=P3|0x0f;/将四个脚输出置高void mDelay(unsigned int DelayTime) /延时函数unsigned char j=0; while(DelayTime-)for(j=0;j10;j+)unsigned char key()/键盘扫描是否有键按下,这里只扫描一列四个键,其它不用uchar KeyV;P0=0xfe;KeyV=P0;if(KeyV=0xfe)/只扫描一列 return(0);mDelay(100);KeyV=P0;if(KeyV=0xfe) return(0); else return(KeyV);/两相5、6线步进电机,分为四拍和八拍,这里介绍输出八拍的第二种方式:A-AC-C-CB-B-BD-D-DA/四拍:A-C-B-D,因此在八拍的基础上减去中间的就可以了,不过步距角要大一倍#include #include #define uchar unsigned charcode unsigned int lhj=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、反转) /第二个是步进量,第三个是转速unsigned char dataout8=0xfe,0xfa,0xfb,0xf9,0xfd,0xf5,0xf7,0xf6; /这里我们定义8组数,分别对应八拍:A-AC-C-CB-B-BD-D-DA 从板上设计来分配,选择P2口的低四位输出 /相应的输出也可以反应在LED灯上 /P2。0为A相,P2。1为B相,P2。2为C相,P2。3为D相,将高四位都置1,也就是F。 /我们用索引的方式输出,比如正转,元素由0到8这样的循环,反转则由8到0的循环 /程序中我们保存索引号,比如上次转在第4元素停下,则下次的正转由5开始向后计数,反转则由3开始向前计数 /这样,电机的转角度就会很准确unsigned char datac=0;/定义这个为存放索引号(元素号)unsigned char key();/键盘动作,这里的键盘扫描只用到四个按键有效(板上标的0,4,8,C)unsigned char right(unsigned int Speed,unsigned int road); /正转unsigned char left(unsigned int Speed,unsigned int road); /反转void mDelay(unsigned int DelayTime); /延时函数void main()uchar i=0;while(1) if(key()=0xde)/8的按键按下 for(i=0;i34;i+=3) if(lhji) /调入数组 right(lhji+1,lhji+2); /两个参数代表步进量和转速 else left(lhji+1,lhji+2); if(key()=0xee)/C的按键按下 break; if(key()=0x7e) /1的按键接下,正转1步 right(1,20); if(key()=0xbe) /4的按键接下,反转1步 left(1,20);unsigned char right(unsigned int Speed,unsigned int road)/两个参数代表步进量和转速/步进节拍:A-AC-C-CB-B-BD-D-DAdo/循环步进到指定角位 if(datac=7)/索引号超出8回到0 datac=0; else datac+; P2=dataoutdatac;/这里就在P2口输出我们定义好的相序步进,P2。0为A相,P2。1为B相,P2。2为C相,P2。3为D相 /这里我们不考虚P2的高四位,如果不影响高四位,可以用P2&=0xf0;P2+=dataoutdatac;要两句 /这样就不引影响到高四位了 mDelay(road);while(Speed-);P2=0xff; /这里也一样,如果不影响高四位就得用P3|=0x0funsigned char left(unsigned int Speed,unsigned int road) /步进节拍 A-AD-D-DB-B-BC-C-CAdo/循环步进到指定角位 if(datac=0)/索引号超出0回到8 datac=7; else datac-; P2=dataoutdatac;/这里就在P2口输出我们定义好的相序步进,P2。0为A相,P2。1为B相,P2。2为C相,P2。3为D相 /这里我们不考虚P2的低四位,如果不影响高四位,可以用P2&=0xf0;P2+=dataoutdatac;要两句 /这样就不引影响到高四位了 mDelay(road);while(Speed-);P2=0xff;/这里也一样,如果不影响高四位就得用P2|=0x0f;void mDelay(unsigned int DelayTime) /延时函数unsi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论