免费论文查重: 大雅 万方 维普 turnitin paperpass

试议单片机利用单片机实现对步进电机简单制约

最后更新时间:2024-03-27 作者:用户投稿原创标记本站原创 点赞:29961 浏览:134841
论文导读:速度的大小值是由显示函数在数码管上显示出来。2端口、函数与变量定义#defineKeyPortP3//由P3口连接控制按钮#defineDataPortP0//定义数据端口程序中遇到DataPort则用P0替换sbitLATCH1=P2^2;//定义锁存使能端口段锁存sbitLATCH2=P2^3;//位锁存sbitA1=P1^0;//定义步进电机连接端口sbitB1=P1^1;sb
摘要:本文主要介绍了利用LY-51SV2.3开发板实现对步进电机的简单控制,以实现步进电机的正反转、加减速以及开始停止等功能。通过对步进电机的控制,使人们对开发板的应用以及如何编写C语言程序有更深层次的理解。通过本文的介绍,也为下一步更好的利用开发板控制步进电机打下一个基础。
关键词:单片机;步进电机;语言
中图分类号:TP368.1
目前,单片机应用得到了非常广泛的应用,几乎涉及到了社会生活中的各个领域,对于与计算机相关专业的单片机的知识有一个简单的学习了解是必要的,而对于初学者或者教学人员利用开发板进行学习是有效的途径。开发板是学习和实践的最好产品,因为有配套测试好的软件和硬件,这样用户就不必操心组建开发系统的过程。只需要专心研究程序。开发板只不过是个工具,利用这个工具,可以使我们更快的了解并掌握需要的知识。
1设计思路
本次单片机使用STC89C51,通过开发板的5个按键K1-K5分别实现对步进电机的加减速、正反转与停止的控制,在实现正反转的过程中分别由Led指示灯进行指示,并在数码管上显示当前速度的大小值,其最大值不超过18,在整个按键过程中是由键盘扫描函数来控制,速度的大小值是由显示函数在数码管上显示出来。
2端口、函数与变量定义
#defineKeyPortP3//由P3口连接控制按钮
#defineDataPortP0//定义数据端口程序中遇到DataPort则用P0替换
sbitLATCH1=P2^2;//定义锁存使能端口段锁存
sbitLATCH2=P2^3;//位锁存
sbitA1=P1^0;//定义步进电机连接端口
sbitB1=P1^1;sbitC1=P1^2;sbitD1=P1^3;sbitled=P1^5;sbitled1=P1^7;
unsignedcharcodedofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsignedcharcodedofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsignedcharTempData[8];//存储显示值的全局变量
定义AB相通电,其他相断电,定义BC相通电,其他相断电,定义CD相通电,其他相断电,定义D相通电,其他相断电,定义A相通电,其他相断电,定义B相通电,其他相断电,定义C相通电,其他相断电,定义D相通电,其他相断电全部断电
unsignedcharSpeed=1;bitStopFlag=1;
unsignedcharFlag=1;//定义电机正反转变量标志
voidDisplay(unsignedcharFirstBit,unsignedcharNum);//显示函数,在数码管显示具体速度值
voidInit_Timer0(void);unsignedcharKeyScan(void);
延时函数DelayUs2x(unsignedchart),voidDelayMs(unsignedchart)
3函数调用过程
voidDelayUs2x(unsignedchart)voidDelayMs(unsignedchart)
main()
{unsignedinti=512;unsignedcharnum;Coil_OFF;
while(1){num=KeyScan();//循环调用按键扫描
if(num==1)//第一个按键,速度等级增加
{if(Speed<18)Speed++;
elseif(num==2)//第二个按键,速度等级减小
{if(Speed>1)
Speed--;}
elseif(num==3)//电机停止
{Coil_OFF;
StopFlag=1;led=1;
led1=1;EA=0;}
elseif(num==4)//电机启动
{Init_Timer0();StopFlag=0;
Flag=1;led=1;
led=0;led1=1;}
elseif(num==5)//反转
{Init_Timer0();StopFlag=0;
Flag=2;led1=1;论文导读:ase4:i=0;break;default:break;}}times++;}}}unsignedcharKeyScan(void){unsignedcharkeyvalue;if(KeyPort!=0xff){DelayMs(10);if(KeyPort!=0xff){keyvalue=KeyPort;while(KeyPort!=0xff);switch(keyvalue){case0xfe:return1;break;case0xfd:return2;break;源于:论文www.7ctime.comcase0

led1=0;led=1;}
TempData[0]=dofly_DuanMa[Speed/10];
TempData=dofly_DuanMa[Speed%10];}}
voidDisplay(unsignedcharFirstBit,unsignedcharNum)
{staticunsignedchari=0;
DataPort=0;LATCH1=1;
LATCH1=0;DataPort=dofly_WeiMa[i+FirstBit];
LATCH2=1;LATCH2=0;
DataPort=TempData[i];LATCH1=1;
LATCH1=0;i++;if(i==Num)i=0;}
voidInit_Timer0(void)
voidTimer0_isr(void)interrupt1
{Display(0,8);if(!StopFlag){if(Flag==1)
{if(times==(20-Speed))//最大值18,所以最小间隔值20-18=2
{times=0;
switch(i){
case0:Coil_D1;i++;break;case1:Coil_C1;i++;break;
case2:Coil_B1;i++;break;case3:Coil_A1;i++;break;
case4:i=0;break;default:break;}}times++;}
if(Flag==2)
{if(times==(20-Speed))//最大值18,所以最小间隔值20-18=2
{times=0;switch(i)
{case0:Coil_A1;i++;break;case1:Coil_B1;i++;break;
case2:Coil_C1;i++;break;case3:Coil_D1;i++;break;
case4:i=0;break;default:break;}}times++;}}}
unsignedcharKeyScan(void)
{unsignedcharkeyvalue;
if(KeyPort!=0xff)
{DelayMs(10);if(KeyPort!=0xff)
{keyvalue=KeyPort;while(KeyPort!=0xff);switch(keyvalue)
{case0xfe:return1;break;case0xfd:return2;break;源于:论文www.7ctime.com
case0xfb:return3;break;case0xf7:return4;break;
case0xef:return5;break;case0xdf:return6;break;
case0xbf:return7;break;case0x7f:return8;break;
default:return0;break;}}}return0;}
4总结
到此为止,整个控制步进电机的设计就做完了,由于篇幅有限,本文里有一些具体函数没有内容,但这些函数都有现成的模式可供应用。通过对步进电机的控制,使我们对单片机的应用有了一定的理解,并对使用C语言编程来控制步进电机有了更明确的理解,掌握了一定的知识,并对以后的进一步学习有了一定的基础。
参考文献:
郭天祥.新概念51单片机C语言教程:入门、提高、开发、拓展全攻略[M].北京:电子工业出版社,2011,02.
杨欣,王玉凤.电子设计从零开始[M].北京:清华大学出版社,2012,05.
[3]张毅刚.新编MCS-51单片机应用设计(第3版)[J].哈尔滨工业大学,2008,04.