我之前做过一个,步进电机模拟电梯运行的控制程序,是那种发一个信号走一步的那种,步进角比较大,好像是15度左右,我当时的做法就是加入系统延时,让程序给步进电机发送信号,通过控制延时来决定单位时间内步进电机转动的次数
我用的是永磁式步进电机,不知道你用的是什么样的,我使用的这种,步进角比较大,步进电机都是一步步转的,转快了就看不出步进电机是一步步转了
而当是步进电机正转是按这样的顺序发送信号,abcd,反转是dcba
转多少圈,就是循环给步进电机发送信号,使用程序控制发送信号的次数,至于怎么控制只要知道接口函数什么的还是不难的。
如果还是不大明白,我倒是可以帮你看看程序
#include <reg52h>
#define uchar unsigned char
#define uint unsigned int
uchar key_l,key,i;
uchar code temp1[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
uchar code temp2[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
uchar code aa[16]=" :";
uchar code smg[]=" shun zhuan mian kuai gen kuai ting zhi fan zhuan ";
sbit e=P2^6;
sbit rs=P2^4;
sbit rw=P2^5;
void delay(int tt)
{
while(tt--);
}
void w_cmd(uchar dd)
{
rs=0;
rw=0;
e=0;
delay(50);
P0=dd;
e=1;
delay(50);
e=0;
delay(50);
}
void w_dat(uchar dd)
{
rs=1;
rw=0;
e=0;
delay(50);
P0=dd;
e=1;
delay(50);
e=0;
}
void init(uchar smg4[],uchar time[])
{
w_cmd(0x38);
delay(2000);
w_cmd(0x38);
delay(500);
w_cmd(0x38);//注意顺序 ,设置工作方式,显示模式设置
delay(500);
w_cmd(0x08);//注意顺序,关闭显示
w_cmd(0x01);//清屏
w_cmd(0x07);//光标·画面滚动模式设置
w_cmd(0x0c);//显示及光标模式设置
w_cmd(0x80);//
for(i=0;i<16;i++)
w_dat(time[i]);
w_cmd(0x80+0X40);
for(i=0;i<16;i++)
w_dat(smg4[i]);
}
void Tb(uchar smg[],uchar n,uchar s,uchar l,uchar d)
{
unsigned char m;
w_cmd(0x82);
for(m=n;m<s;m++)
w_dat(smg[m]);
w_cmd(0x80+0X42);
for(m=l;m<d;m++)
w_dat(smg[m]);
}
void main()
{
init(aa,aa);
while(1)
{
P1=0xf0;
key_l=P1;
if(key_l!=0xf0)
{
delay(100);
if(key_l!=0xf0)
{
P1=key_l|0x0f;
key=P1;
}
}
switch(key)
{
case 0xee: Tb(smg,0,10,11,21);
for(i=0;i<8;i++)
{
P2=temp1[i];
delay(500);
}
break;
case 0xde:Tb(smg,0,10,19,29);
for(i=0;i<8;i++)
{
P2=temp1[i];
delay(300);
}
break;
case 0xbe:Tb(smg,0,10,30,40);
for(i=0;i<8;i++)
{
P2=temp1[i];
delay(100);
}
break;
case 0x7e:P2=0xff;Tb(smg,0,10,39,49); break;
case 0xed:Tb(smg,50,60,11,21);
for(i=0;i<8;i++)
{
P2=temp2[i];
delay(200);
}
break;
case 0xdd:Tb(smg,50,60,19,29);
for(i=0;i<8;i++)
{
P2=temp2[i];
delay(120);
}
break;
case 0xbd: P2=0xff;Tb(smg,50,60,40,50); break;
}
}
}
RunSpeed应该是延时时间,用来控制速度的,RunSpeed值越大,步进电机速度越低。
SPEED[0]=(10006/RunSpeed/100)+48;
SPEED[1]=10006/RunSpeed%100/10+48;
SPEED[2]=10006/RunSpeed%10+48;
以上三个式子是求速度的百位,十位和个位,后面+48即加30H=48用来转换成ASCII码的。
说的对,哥们就采纳下吧~~
以上就是关于控制步进电机C语言代码解释全部的内容,包括:控制步进电机C语言代码解释、关于51单片机控制步进电机编程(c语言),求助、求单片机C语言高手以下是计算步进电机速度的程序,帮忙详细的解释一下越详细越好。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)