步进电机的的控制以及数码管显示档位和转速.docx
- 文档编号:16915428
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:12
- 大小:15.75KB
步进电机的的控制以及数码管显示档位和转速.docx
《步进电机的的控制以及数码管显示档位和转速.docx》由会员分享,可在线阅读,更多相关《步进电机的的控制以及数码管显示档位和转速.docx(12页珍藏版)》请在冰豆网上搜索。
步进电机的的控制以及数码管显示档位和转速
//**********本例程主要实现步进电机的的控制以及数码管显示档位和转速**********
//****************S6档位调节S7暂停并且查看转速S8正转S9逆转**********
//*********************数码管第一位显示档位后四位显示转速**********
//*******************发现的问题:
由于数码管显示的延时过多,如果让数码管同步显示转速,会出现一闪一闪的现象。
我将会考虑用中断定时解决这个问题。
#include
typedefunsignedcharuchar;
typedefunsignedintuint;
#definet5
#defineone2//这里只是用了简单的延时函数,一般用中断比较准确
//************根据延时算转速:
本电机的的步距角为5.625度,减速比为64,设定为ONE时,算出转速:
延时为2ms,即2ms/脉冲
//************所以60000ms/30000个脉冲即1分钟/30000个脉冲,由于一个脉冲一个步距角,即1分钟/30000*5.625度=168780度
//**************即1分钟/168780/360圈,所以468.83圈/分钟(内部),所以(外部)真正看到转速应为468.83/64圈=7.32圈/分钟
#definetwo5//计算得转速为2.93rpm
#definethree10//计算得转速为1.46rpm
#definefour30//计算得转速为0.49rpm
uchartemp,num,grade=5;//设定档
bitclockwise=1;//设定顺时针
bitstartstop=0;//设定停止位
sbitdula=P2^6;
sbitwela=P2^7;
unsignedcharcodetable0[]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};//正转表
unsignedcharcodetable1[]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};//反转表
ucharcodetable2[]={0x06,0x07,0x80,0x4f,0x5b};//一档
ucharcodetable3[]={0x5b,0x5b,0x80,0x6f,0x4f};//二档
ucharcodetable4[]={0x4f,0x06,0x80,0x66,0x7d};//三档
ucharcodetable5[]={0x66,0x3f,0x80,0x66,0x6f};//四档
//******************延时函数MS**************************
voiddelay(unsignedcharz)
{
unsignedintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//******************数码管显示**************************
voiddisplay()
{
if(grade==2)//一档
{
dula=1;
P0=table2[0];
dula=0;
P0=0xfe;
wela=1;
delay(5);
P0=0xff;
wela=0;
dula=1;
P0=table2[1];
dula=0;
P0=0xfb;
wela=1;
delay(5);
P0=0xff;
wela=0;
dula=1;
P0=table2[2];
dula=0;
P0=0xf7;
wela=1;
delay(5);
P0=0xff;
wela=0;
dula=1;
P0=table2[3];
dula=0;
P0=0xef;
wela=1;
delay(5);
P0=0xff;
wela=0;
dula=1;
P0=table2[4];
dula=0;
P0=0xdf;
wela=1;
delay(5);
P0=0xff;
wela=0;
}
if(grade==5)//二档
{
dula=1;
P0=table3[0];
dula=0;
P0=0xfe;
wela=1;
delay(5);
P0=0xff;
wela=0;
dula=1;
P0=table3[1];
dula=0;
P0=0xfb;
wela=1;
delay(5);
P0=0xff;
wela=0;
dula=1;
P0=table3[2];
dula=0;
P0=0xf7;
wela=1;
delay(5);
P0=0xff;
wela=0;
dula=1;
P0=table3[3];
dula=0;
P0=0xef;
wela=1;
delay(5);
P0=0xff;
wela=0;
dula=1;
P0=table3[4];
dula=0;
P0=0xdf;
wela=1;
delay(5);
P0=0xff;
wela=0;
}
if(grade==10)//三档
{
dula=1;
P0=table4[0];
dula=0;
P0=0xfe;
wela=1;
delay(5);
P0=0xff;
wela=0;
dula=1;
P0=table4[1];
dula=0;
P0=0xfb;
wela=1;
delay(5);
P0=0xff;
wela=0;
dula=1;
P0=table4[2];
dula=0;
P0=0xf7;
wela=1;
delay(5);
P0=0xff;
wela=0;
dula=1;
P0=table4[3];
dula=0;
P0=0xef;
wela=1;
delay(5);
P0=0xff;
wela=0;
dula=1;
P0=table4[4];
dula=0;
P0=0xdf;
wela=1;
delay(5);
P0=0xff;
wela=0;
}
if(grade==30)//四档
{
dula=1;
P0=table5[0];
dula=0;
P0=0xfe;
wela=1;
delay(5);
P0=0xff;
wela=0;
dula=1;
P0=table5[1];
dula=0;
P0=0xfb;
wela=1;
delay(5);
P0=0xff;
wela=0;
dula=1;
P0=table5[2];
dula=0;
P0=0xf7;
wela=1;
delay(5);
P0=0xff;
wela=0;
dula=1;
P0=table5[3];
dula=0;
P0=0xef;
wela=1;
delay(5);
P0=0xff;
wela=0;
dula=1;
P0=table5[4];
dula=0;
P0=0xdf;
wela=1;
delay(5);
P0=0xff;
wela=0;
}
}
//*****************键盘扫描**************************
voidkeyscan()
{
P3=0xfe;//扫描第一行
temp=P3;
temp=temp&0xf0;
if(temp!
=0xf0)
{
delay(t);
temp=P3;
temp=temp&0xf0;
if(temp!
=0xf0)
{
temp=P3;
switch(temp)
{
case0xee:
//调节档速
num++;
if(num==1)grade=one;
if(num==2)grade=two;
if(num==3)grade=three;
if(num==4){grade=four;num=0;}break;
case0xde:
startstop=0;break;//停止
case0xbe:
clockwise=1;startstop=1;break;//正转
case0x7e:
clockwise=0;startstop=1;break;//逆转
}
while(temp!
=0xf0)
{
temp=P3;
temp=temp&0xf0;
}
}
}
}
//***********************电机运转方式*****************
voidstepmotor()
{
chari,r;
while(clockwise&startstop)//正转
{
keyscan();
for(i=0;i<8;i++)//一轮通电
{
P1=table0[i];
delay(grade);//通过延时改变速度
}
}
while(!
clockwise&startstop)//反转
{
keyscan();
for(r=0;r<8;r++)
{
P1=table1[r];
delay(grade);
}
}
}
//***********************主函数**************************
voidmain()
{
while
(1)
{
keyscan();//如果单单是这里加键盘扫描,当进入电机运转程序后,会进入while的死循环段,将无法进行键盘扫描
stepmotor();
display();//实时显示速度
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 步进 电机 控制 以及 数码管 显示 档位 转速