关于51单片机控制步进电机编程(c语言),求助

关于51单片机控制步进电机编程(c语言),求助,第1张

#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;

}

}

}

理论上可以,但是注意,28BYJ是四相五线制步进电机,42和57式是两相四线制步进电机,它们的驱动时序是不同的,程序肯定要改。四相五线可以接成两相四线用(省去中性线,驱动电压翻倍,不建议这样),但两相四线是绝对没法当成四相五线用的。

一般常用的步进电机(42、57)都是两相四线的,最好还是用专门的步进驱动器,比如drv8825、A4988等等,单片机只需要往驱动器送脉冲就行了,至于电机的控制时序,驱动器自己会处理好,这样控制起来就更简单。而且步进驱动器具有电流细分功能,可以成倍成倍地提高步进电机的精度,转动也会更平滑,毕竟这种驱动器就是专门为步进电机设计的,何尝不试试呢?

#include //51芯片管脚定义头文件\x0d\#include //内部包含延时函数 _nop_();\x0d\\x0d\#define uchar unsigned char\x0d\#define uint unsigned int\x0d\\x0d\uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};\x0d\uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};\x0d\\x0d\//\x0d\/ \x0d\/ 延时t毫秒 \x0d\/ 110592MHz时钟,延时约1ms \x0d\/ \x0d\//\x0d\void delay(uint t)\x0d\{ \x0d\ uint k;\x0d\ while(t--)\x0d\ {\x0d\ for(k=0; k回答于 2022-11-16

以上就是关于关于51单片机控制步进电机编程(c语言),求助全部的内容,包括:关于51单片机控制步进电机编程(c语言),求助、l298n能不能驱动42步进电机(17HS4401,步距角1.8,电流1.7A,电阻1.5欧)、51单片机, 编一个控制步进电机转动的程序。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9669973.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存