打印
[通用8051核FLASH系列]

【芯圣SDK-HC89F0541测评】+步进电机驱动

[复制链接]
8580|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 芯圣电子官方QQ 于 2023-7-21 09:01 编辑

步进电机是一种常用的执行器件,使用它能进行精准的定位及转速调节等工作。一个简单的步进电机驱动要由步进电机、驱动模块及单片机构成。
为了驱动步进电机,除了硬件方面的准备,还需必要的软件配合。
要手工编写步进电机驱动程序主要分为以下几步:
1)分配引脚的使用
以步进电机的MA~ MD引脚分别与P24P35P34P33相连接

2)定义输出高低电平的宏定义
#define MAL      P2_4= 0
#define MAH     P2_4= 1
#define MBL      P3_5=0
#define MBH     P3_5= 1
#define MCL     P3_4= 0
#define MCH     P3_4= 1
#define MDL     P3_3= 0
#define MDH     P3_3= 1

3)配置延时函数
配置延时函数的工作在步进电机的驱动中十分重要,它控制着步进电机运转的快慢。
但问题也正出在这里,对于步进电机来说其速度是与驱动脉冲有关,但也并非脉冲越快,电机的转速越快。因为电机电机属于机械器件,要建立相应的磁场及达到相应的扭矩才能使电机转动。过快的脉冲只会使电机在原地震颤和抖动,并无法旋转。
使电机转动的延时函数为:
void delay_ms(void)
{
           unsigned char b,c;
           for(c=0;c<180;c++)
           {
                 for(b=0;b<15;b++);
           }
}

4)控制电机旋转方向
对于4相5线式步进电机来讲,可通过8个节拍的脉冲序列来控制其正反转。
正转的驱动函数为:
void zx()
{
    unsigned char X,Y;  
    for(X=0;X<64;X++)
    {
      for(Y=0;Y<8;Y++)
      {
         MDL;
         MAH; //A
         delay_ms();
         MBH; //AB
         delay_ms();
         MAL; //B
         delay_ms();
         MCH; //BC
         delay_ms();
         MBL; //C
         delay_ms();
         MDH; //CD
         delay_ms();
         MCL; //D
         delay_ms();
         MAH; //DA
         delay_ms();
       }               
    }  
}

反转的驱动函数为:
void fx()
{
    unsigned char X,Y;
    for(X=0;X<64;X++)   
    {
      for(Y=0;Y<8;Y++)  
      {
         MDH;
         MAH; //A
         delay_ms();
         MAL; //AB
         delay_ms();
         MCH; //B
         delay_ms();
         MDL; //BC
         delay_ms();
         MBH; //C
         delay_ms();
         MCL; //CD
         delay_ms();
         MAH; //D
         delay_ms();
         MBL; //DA
         delay_ms();
       }               
    }
}

5)主程序控制电机运行
void main(void)
{
          unsigned char rdata=1,f,c;
          while((CLKCON&0x20)!=0x20);
          CLKSWR = 0x51;
          while((CLKSWR&0xC0)!=0x40);
          CLKDIV = 0x01;
          P0M0 = 0xC2;
          P2M4 = 0xC2;
          P3M5 = 0xC2;
          P3M4 = 0xC2;
          P3M3 = 0xC2;
          LED4 = 1;
          delay_ms();
          MAL;
          MBL;
          MCL;
          MDL;
          delay_ms();
          LED4 = 0;
          f=1;
          for(c=0;c<rdata;c++)
          {
                  if(f==0)
                       fx();
                 else
                  {
                       zx();
                  }
          }
          LED4 = 1;
          f=0;
          for(c=0;c<rdata;c++)
          {
                  if(f==0)
                        fx();
                  else
                 {
                       zx();
                 }
          }
          while(1);
}

经实际验证,其效果正常并如图所示。
步进电机驱动效果图

使用特权

评论回复
沙发
电竞孔乙己| | 2021-6-10 16:11 | 只看该作者
直接用延时函数只能用于一般的控制,精度太差,

使用特权

评论回复
板凳
jinglixixi|  楼主 | 2021-6-10 16:26 | 只看该作者
电竞孔乙己 发表于 2021-6-10 16:11
直接用延时函数只能用于一般的控制,精度太差,

道理上的确是这么说,但实际效果有限,这种步进电机的调节空间有限,过快过慢均不相应。

使用特权

评论回复
地板
yangxiaor520| | 2021-6-10 21:24 | 只看该作者
这个步进电机有点历史了

使用特权

评论回复
5
jinglixixi|  楼主 | 2021-6-11 08:01 | 只看该作者
yangxiaor520 发表于 2021-6-10 21:24
这个步进电机有点历史了

的确是这样,基本是做些简单测试和使用。

使用特权

评论回复
6
勇者无惧你和我| | 2021-6-11 08:55 | 只看该作者
这个驱动确实不错的。很棒。

使用特权

评论回复
7
usysm| | 2021-7-6 14:50 | 只看该作者
两相步进电机驱动程序?

使用特权

评论回复
8
typeof| | 2021-7-6 14:51 | 只看该作者
步进电机驱动器怎么选的  

使用特权

评论回复
9
yujielun| | 2021-7-6 14:52 | 只看该作者
步进电机启动器的脉冲频率与速度成正比吧  

使用特权

评论回复
10
htmlme| | 2021-7-6 14:53 | 只看该作者
给步进电机子程序加个延时  

使用特权

评论回复
11
pklong| | 2021-7-6 14:54 | 只看该作者
用定时的方式来控制步进电机   

使用特权

评论回复
12
touser| | 2021-7-6 14:54 | 只看该作者
没加延时函数效率高            

使用特权

评论回复
13
myiclife| | 2021-7-6 14:55 | 只看该作者
电机的最大速度会受到延时方法的影响

使用特权

评论回复
14
uytyu| | 2021-7-6 14:55 | 只看该作者
            

使用特权

评论回复
15
iyoum| | 2021-7-6 14:55 | 只看该作者
中断PWM/延时函数                 

使用特权

评论回复
16
jkl21| | 2021-7-6 14:56 | 只看该作者
脉冲序列的产生用微处理器实现,有软件延时和硬件定时两种方法。

使用特权

评论回复
17
htmlme| | 2021-7-6 14:56 | 只看该作者
中断步进电机运行   

使用特权

评论回复
18
yujielun| | 2021-7-6 14:56 | 只看该作者
步进电机28byj48的延时程序中的值如何计算?   

使用特权

评论回复
19
typeof| | 2021-7-6 14:56 | 只看该作者
步进电机驱动器如何接线  

使用特权

评论回复
20
usysm| | 2021-7-6 14:56 | 只看该作者
用单片机编写步进电机的驱动程序 有哪几种方案?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

453

主题

2750

帖子

38

粉丝