找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3351|回复: 3
打印 上一主题 下一主题
收起左侧

赛元SC95F8616单片机驱动步进电机源程序

[复制链接]
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2020-7-14 00:25 编辑

步进电机是一种常用的执行器件,使用它能进行精准的定位及转速调节等工作。一个简单的步进电机驱动要由步进电机、驱动电路及单片机构成,见下图所示。


步进电机驱动的构成图

为了驱动步进电机,除了硬件方面的准备,还需必要的软件配合。在易码魔盒中,就提供了步进电机的外设驱动。由于刚开始学习用易码魔盒来设计程序,便打算在这方面练练手。
起初试了许多次,都一直没有成功,就打算用手工编程的方法先让步进电机转起来,然后再与易码魔盒生成的程序进行对比来发现问题。
要手工编写步进电机驱动程序主要分为以下几步:
1)分配引脚的使用
以步进电机的MA~ MD引脚分别与P32~ P35相连接
sbit MA       =   P3^2;
sbit MB       =   P3^3;
sbit MC       =   P3^4;
sbit MD       =   P3^5;

2)定义输出高低电平的宏定义
#define MAL    MA  =   0;
#define MAH    MA  =   1;
#define MBL    MB  =   0;
#define MBH    MB  =   1;
#define MCL    MC  =   0;
#define MCH    MC  =   1;
#define MDL    MD  =   0;
#define MDH    MD  =   1;

3)配置延时函数
配置延时函数的工作在步进电机的驱动中十分重要,它控制着步进电机运转的快慢。
但问题也正出在这里,对于步进电机来说其速度是与驱动脉冲有关,但也并非脉冲越快,电机的转速越快。因为电机电机属于机械器件,要建立相应的磁场及达到相应的扭矩才能使电机转动。过快的脉冲只会使电机在原地震颤和抖动,并无法旋转。
使电机转动的延时函数为:
  1. void delay_ms(void)
  2. {
  3.            unsigned char b,c;
  4.            for(c=0;c<180;c++)
  5.            {
  6.                for(b=0;b<8;b++);
  7.            }
  8. }
  9. 4)控制电机旋转方向
  10. 对于4相5线式步进电机来讲,可通过8个节拍的脉冲序列来控制其正反转。
  11. 正转的驱动函数为:
  12. void zx()
  13. {
  14.     unsigned char X,Y;  
  15.     for(X=0;X<64;X++)
  16.     {
  17.       for(Y=0;Y<8;Y++)
  18.       {
  19.          MDL;
  20.          MAH; //A
  21.          delay_ms();
  22.          MBH; //AB
  23.          delay_ms();
  24.          MAL; //B
  25.          delay_ms();
  26.          MCH; //BC
  27.          delay_ms();
  28.          MBL; //C
  29.          delay_ms();
  30.          MDH; //CD
  31.          delay_ms();
  32.          MCL; //D
  33.          delay_ms();
  34.          MAH; //DA
  35.          delay_ms();
  36.        }               
  37.     }  
  38. }
复制代码

反转的单片机驱动函数为:
  1. void fx()
  2. {
  3.     unsigned char X,Y;
  4.     for(X=0;X<64;X++)    // 控制节拍数
  5.     {
  6.       for(Y=0;Y<8;Y++)   // 控制节拍
  7.       {
  8.          MDH;
  9.          MAH; //A
  10.          delay_ms();
  11.          MAL; //AB
  12.          delay_ms();
  13.          MCH; //B
  14.          delay_ms();
  15.          MDL; //BC
  16.          delay_ms();
  17.          MBH; //C
  18.          delay_ms();
  19.          MCL; //CD
  20.          delay_ms();
  21.          MAH; //D
  22.          delay_ms();
  23.          MBL; //DA
  24.          delay_ms();
  25.        }               
  26.     }
  27. }
复制代码

5)主程序控制电机运行
  1. void main()
  2. {
  3.      unsigned char rdata=9,f,c;
  4.      delay_ms();
  5.      //停止电机转动
  6.      MAL;
  7.      MBL;
  8.      MCL;
  9.      MDL;
  10.      delay_ms();
  11.      f=1;//控制转向
  12.      while(1)
  13.      {
  14.                             for(c=0;c<rdata;c++)    //控制转动的位置
  15.                             {
  16.                                      if(f==0)
  17.                                            fx();
  18.                                      else
  19.                                      {
  20.                                           zx();
  21.                                      }
  22.                            }
  23.      }
  24. }
复制代码


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:385637 发表于 2021-4-19 16:05 | 只看该作者
赛元单片机资料很少,是不是很少人用呀?
回复

使用道具 举报

板凳
ID:908482 发表于 2021-4-19 16:56 | 只看该作者
做得很好,资料很足
回复

使用道具 举报

地板
ID:64253 发表于 2023-1-13 14:25 | 只看该作者
赛元的东西找个教程都比较难找,看看楼主的东西学习一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表