找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6414|回复: 2
收起左侧

CC2530控制步进电机正反转的源码,调试通过

[复制链接]
ID:293181 发表于 2018-3-17 15:58 | 显示全部楼层 |阅读模式
CC2530控制步进电机正反转,调试通过。
0.jpg
分别下载程序到任意一节点连接电机如图所示,观察电机运行情况,可以修改
ucSpeed 调整速度哦,代码分析请看程序中的注释。

单片机源程序如下:
  1. /****************************************************************************
  2. * 文 件 名: main.c
  3. * 作    者: Andy
  4. * 修    订: 2016-03-27
  5. * 版    本: 2.0
  6. * 描    述: 用P04 05 06 07控制步进电机
  7. ****************************************************************************/
  8. #include <ioCC2530.h>

  9. typedef unsigned char uchar;
  10. typedef unsigned int  uint;


  11. #define A1 P0_4 //定义步进电机连接端口
  12. #define B1 P0_5
  13. #define C1 P0_6
  14. #define D1 P0_7

  15. //改变这个参数可以调整电机转速,数字越小,转速越快,力矩越小
  16. uchar ucSpeed = 2; //调整速度 建议在1-10范围内
  17. uchar FFW[8]={0x90,0x10,0x30,0x20,0x60,0x40,0xc0,0x80};//正转旋转相序表
  18. uchar REV[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90};//反向旋转相序表

  19. void MotorData(uchar data)
  20. {
  21.   A1 = 1&(data>>4);
  22.   B1 = 1&(data>>5);
  23.   C1 = 1&(data>>6);
  24.   D1 = 1&(data>>7);
  25. }

  26. //ms延时函数
  27. void Delay_ms(uint x)
  28. {
  29.   uint i,j;
  30.   for(i=0;i<x;i++)
  31.     for(j=0;j<535;j++);
  32. }

  33. //顺时针转动
  34. void MotorFFW(float n)
  35. {
  36.   unsigned char i;
  37.   unsigned int j;
  38.   int movie_count=(int)(8*64*n);
  39.   for (j=0; j<movie_count; j++)
  40.   {
  41.     for (i=0; i<8; i++)
  42.     {
  43.       MotorData( FFW[i]);//P0 = FFW[i];
  44.       Delay_ms(ucSpeed);
  45.     }
  46.   }
  47. }

  48. //逆时针转动
  49. void MotorREV(float n)
  50. {
  51.   unsigned char i;
  52.   unsigned int j;
  53.   
  54.   int movie_count=(int)(8*64*n);
  55.   for (j=0; j<movie_count; j++)
  56.   {
  57.     for (i=0; i<8; i++)
  58.     {
  59.       MotorData(REV[i]);
  60.       Delay_ms(ucSpeed);
  61.     }
  62.   }
  63. }

  64. /****************************************************************************
  65. * 名    称: InitIO()
  66. * 功    能: 初始化IO口程序
  67. * 入口参数: state=0正转    1反转
  68. ****************************************************************************/
  69. void ContrlStepMotor(int state, float count)
  70. {
  71.   if(state == 0)
  72.   {
  73.     MotorFFW(count);
  74.   }
  75.   else
  76.   {
  77.     MotorREV(count);
  78.   }
  79. }

  80. /****************************************************************************
  81. * 名    称: InitIO()
  82. * 功    能: 初始化IO口程序
  83. * 入口参数: 无
  84. * 出口参数: 无
  85. ****************************************************************************/
  86. void InitIO(void)
  87. {
  88.   P0SEL &= 0x0F;  //P04 05 06 07定义为普通IO
  89.   P0DIR |= 0xF0;  //P04 05 06 07定义为输出
  90. }

  91. /****************************************************************************
  92. * 程序入口函数
  93. ****************************************************************************/
  94. void main(void)
  95. {
  96.   InitIO();
  97.   
  98.   //改变这个参数可以调整电机转速,数字越小,转速越快,力矩越小
  99.   ucSpeed = 1;    //调整速度建议在1-10范围内,数字越小转速越快力矩越小
  100.   
  101.   while(1)
  102.   {
  103.     ContrlStepMotor(0, 1);//正转1圈
  104.     Delay_ms(3000);
  105.    
  106.     ContrlStepMotor(1, 1);//反转1圈
  107.     Delay_ms(3000);  
  108.   }
  109.   
  110. }
复制代码

所有资料51hei提供下载:
30.控制步进电机正反转.rar (577.05 KB, 下载次数: 51)
回复

使用道具 举报

ID:293181 发表于 2018-3-17 15:58 | 显示全部楼层
该例程调试觉得通过可用。
回复

使用道具 举报

ID:796974 发表于 2021-7-19 16:09 | 显示全部楼层
想问下楼主,步进电机和驱动在哪里获取的?还有链接吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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