找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC15F2K60S2单片机控制步进电机程序

[复制链接]
跳转到指定楼层
楼主
ID:559628 发表于 2019-6-11 09:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近项目关键技术测试,需要用到单片机控制步进电机驱动一个机械件,因此根据硬件配置编写了一些代码,供大家参考。
硬件配置:STC15F2K60S2单片机、28BYJ-48步进电机(5V、12V兼容)、驱动器为UN2003AN。
代码在附件中。
  1. //此代码比较抽象:
  2. #include<reg52.h>

  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. #define MotorData P0

  6. uchar phasecw[8] ={0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1,0xf9};//顺时针

  7. void delay(uint a,b)
  8. {
  9.         uint i,k,j;
  10.         for(i=11;i>0;i--)
  11.         {
  12.                 for(k=a;k>0;k--)
  13.                 {       
  14.                         for(j=b;j>0;j--);
  15.                 }
  16.         }
  17. }
  18. sbit P1_0=P1^0;           //气泵
  19. sbit stop=P1^1;
  20. main()
  21. {
  22.         uint n,r,m;
  23.     MotorData=0xf0;   
  24.         while(stop)
  25.         {         
  26.                 for(n=6;n>1;n--)
  27.                 {
  28.                         for(r=85;r>0;r--)
  29.                         {
  30.                                 for(m=0;m<8;m++)
  31.                                   {
  32.                                         MotorData=phasecw[m];
  33.                                         delay(100,1);
  34.                                 }
  35.                                
  36.                         }
  37.                         if(!stop) delay(100,1);          //关机时、电源低于10%时,电机恢复原位,可增加位置
  38.                         else
  39.                         {
  40.                         MotorData=0xf0;
  41.                         delay(2000,100);   //insert power manage
  42.                         P1_0=0;
  43.                         delay(2000,100);        //insert power manage
  44.                         P1_0=1;
  45.                         }
  46.                 }
  47.                 for(r=87;r>0;r--)
  48.                 {
  49.                         for(m=0;m<8;m++)
  50.                           {
  51.                                    MotorData=phasecw[m];
  52.                                 delay(100,1);
  53.                         }
  54.                        
  55.                 }
  56.                 MotorData=0xf0;
  57.                 if(!stop) delay(100,1);          //关机时,电机恢复原位 ,可增加位置
  58.                 else
  59.                 {
  60.                         delay(2000,1000);
  61.                         n=6;
  62.                 }
  63.          }
  64. }          
复制代码

上述源码word: STC15F2K60S2控制步进电机程序.docx (12.68 KB, 下载次数: 36)

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:464755 发表于 2019-6-13 10:20 来自手机 | 只看该作者
如果项目关键,最好用标准的步进电机驱动器。单片机负责脉冲方向会更好点。
回复

使用道具 举报

板凳
ID:559628 发表于 2019-6-13 17:17 | 只看该作者
nsush 发表于 2019-6-13 10:20
如果项目关键,最好用标准的步进电机驱动器。单片机负责脉冲方向会更好点。

这个只是用来进行测试关键技术点,产品中会设计为1个整体的模块,程序会更完善。
回复

使用道具 举报

地板
ID:732181 发表于 2020-4-21 09:03 | 只看该作者
谢谢大神的分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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