步进电机的的控制以及数码管显示档位和转速.docx

上传人:b****2 文档编号:892081 上传时间:2023-04-30 格式:DOCX 页数:12 大小:15.75KB
下载 相关 举报
步进电机的的控制以及数码管显示档位和转速.docx_第1页
第1页 / 共12页
步进电机的的控制以及数码管显示档位和转速.docx_第2页
第2页 / 共12页
步进电机的的控制以及数码管显示档位和转速.docx_第3页
第3页 / 共12页
步进电机的的控制以及数码管显示档位和转速.docx_第4页
第4页 / 共12页
步进电机的的控制以及数码管显示档位和转速.docx_第5页
第5页 / 共12页
步进电机的的控制以及数码管显示档位和转速.docx_第6页
第6页 / 共12页
步进电机的的控制以及数码管显示档位和转速.docx_第7页
第7页 / 共12页
步进电机的的控制以及数码管显示档位和转速.docx_第8页
第8页 / 共12页
步进电机的的控制以及数码管显示档位和转速.docx_第9页
第9页 / 共12页
步进电机的的控制以及数码管显示档位和转速.docx_第10页
第10页 / 共12页
步进电机的的控制以及数码管显示档位和转速.docx_第11页
第11页 / 共12页
步进电机的的控制以及数码管显示档位和转速.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

步进电机的的控制以及数码管显示档位和转速.docx

《步进电机的的控制以及数码管显示档位和转速.docx》由会员分享,可在线阅读,更多相关《步进电机的的控制以及数码管显示档位和转速.docx(12页珍藏版)》请在冰点文库上搜索。

步进电机的的控制以及数码管显示档位和转速.docx

步进电机的的控制以及数码管显示档位和转速

//**********本例程主要实现步进电机的的控制以及数码管显示档位和转速**********

//****************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();//实时显示速度

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 临时分类 > 批量上传

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2