你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【HAL库每天一例】第101例:28BYJ48步进电机控制实现

[复制链接]
haohao663 提问时间:2016-8-23 08:54 /
【HAL库每天一例】系列例程从今天开始持续更新。。。。。
我们将坚持每天至少发布一个基于YS-F1Pro开发板的HAL库例程,
该系列例程将带领大家从零开始使用HAL库,后面会持续添加模块应用例程。
同样的,我们还程序发布基于HAL库的指导文档和视频教程,欢迎持续关注,并提出改进意见。

参考文档见:

硬石电机控制专题指导手册
例程下载:
资料包括程序、相关说明资料以及软件使用截图

百度云盘:https://pan.baidu.com/s/1slN8rIt 密码:u6m1
360云盘:http://yunpan.cn/OcPiRp3wEcA92u密码 cfb6
(硬石YS-F1Pro开发板HAL库例程持续更新\5. 软件设计之电机控制(HAL库版本)\步进电机.zip
/**
  ******************************************************************************
  *                           硬石YS-F1Pro开发板例程功能说明
  *
  *  例程名称: YSF1_HAL_MOTOR-002. 28BYJ48步进电机控制实现
  *   
  ******************************************************************************
  * 说明:
  * 本例程配套硬石stm32开发板YS-F1Pro使用。
  *
  * 淘宝:
  * 论坛:硬石电子社区
  * 版权归硬石嵌入式开发团队所有,请勿商用。
  ******************************************************************************
  */

【1】例程简介

【2】跳线帽情况

【3】操作及现象

/******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/

CubeMX_1.jpg
CubeMX_2.jpg

main.c文件内容

  1. /**
  2.   ******************************************************************************
  3.   * 文件名程: main.c
  4.   * 作    者: 硬石嵌入式开发团队
  5.   * 版    本: V1.0
  6.   * 编写日期: 2015-10-04
  7.   * 功    能: 28BYJ48步进电机控制实现
  8.   ******************************************************************************
  9.   * 说明:
  10.   * 本例程配套硬石stm32开发板YS-F1Pro使用。
  11.   *
  12.   * 淘宝:
  13.   * 论坛:http://www.ing10bbs.com
  14.   * 版权归硬石嵌入式开发团队所有,请勿商用。
  15.   ******************************************************************************
  16.   */
  17. /* 包含头文件 ----------------------------------------------------------------*/
  18. #include "stm32f1xx_hal.h"
  19. #include "StepMotor/bsp_uln2003.h"
  20. #include "key/bsp_key.h"

  21. /* 私有类型定义 --------------------------------------------------------------*/
  22. /* 私有宏定义 ----------------------------------------------------------------*/
  23. #define STEPMOTOR_SPEED               10   // 定义步进电机速度,值越小,速度越快
  24.                                            // 最小不能小于8
  25. #define STEPMOTOR_CIRCLE_NUMBER       10    //  转动圈数
  26. #define STEPMOTOR_DIRECTION           1    // 1:顺时针  0:逆时针


  27. /* 私有变量 ------------------------------------------------------------------*/
  28. // 速度,该值越小,速度越快,最小不能小于8
  29. uint8_t speed=STEPMOTOR_SPEED;
  30. // 转动圈数:28BYJ-48步进电机的步距角度为5.625/64,即每64个脉冲转5.625度
  31. // 要转一圈需要360/5.625*64=4096个脉冲。
  32. uint32_t Circle_number=STEPMOTOR_CIRCLE_NUMBER;
  33. // 选择方向控制
  34. uint8_t direction=STEPMOTOR_DIRECTION;

  35. /* 扩展变量 ------------------------------------------------------------------*/
  36. /* 私有函数原形 --------------------------------------------------------------*/
  37. /* 函数体 --------------------------------------------------------------------*/
  38. /**
  39.   * 函数功能: 输出一个数据给ULN2003从而实现向步进电机发送一个脉冲
  40.   * 输入参数: step:指定步进序号,可选值0~7
  41.   *           direction:方向选择
  42.   *               可选值:1:顺时针
  43.   *                       0:逆时针
  44.   * 返 回 值: 无
  45.   * 说    明: 无
  46.   */
  47. static void step_motor_pulse(uint8_t step,uint8_t direction)
  48. {
  49.   uint8_t temp=step;
  50.   
  51.   if(direction==0)    // 如果为逆时针旋转
  52.   {
  53.     temp=8-step;      // 调换节拍信号
  54.   }
  55.   switch(temp)
  56.   {
  57.     // 8个节拍控制:A->AB->B->BC->C->CD->D->DA
  58.     case 0:
  59.       A_ON;  B_OFF; C_OFF; D_OFF;
  60.     break;
  61.     case 1:
  62.       A_ON;  B_ON;  C_OFF; D_OFF;
  63.     break;
  64.     case 2:
  65.       A_OFF; B_ON;  C_OFF; D_OFF;
  66.     break;
  67.     case 3:
  68.       A_OFF; B_ON;  C_ON;  D_OFF;
  69.     break;
  70.     case 4:
  71.       A_OFF; B_OFF; C_ON;  D_OFF;
  72.     break;
  73.     case 5:
  74.       A_OFF; B_OFF; C_ON;  D_ON;
  75.     break;
  76.     case 6:
  77.       A_OFF; B_OFF; C_OFF; D_ON;
  78.     break;
  79.     case 7:
  80.       A_ON;  B_OFF; C_OFF; D_ON;
  81.     break;
  82.   }
  83. }


  84. /**
  85.   * 函数功能: 主函数.
  86.   * 输入参数: 无
  87.   * 返 回 值: 无
  88.   * 说    明: 无
  89.   */
  90. int main(void)
  91. {   
  92.   /* 复位所有外设,初始化Flash接口和系统滴答定时器 */
  93.   HAL_Init();
  94.   /* 配置系统时钟 */
  95.   SystemClock_Config();
  96.   
  97.   KEY_GPIO_Init();
  98.   
  99.   ULN2003_GPIO_Init();
  100.   
  101.   /* 无限循环 */
  102.   while (1)
  103.   {
  104.     if(KEY1_StateRead()==KEY_DOWN)
  105.     {
  106.       Circle_number=STEPMOTOR_CIRCLE_NUMBER;//赋值给目标旋转圈数,重新开始旋转
  107.     }
  108.     if(KEY2_StateRead()==KEY_DOWN)
  109.     {
  110.       direction=1-direction; // 1 --> 0 ; 0 --> 1 反转方向
  111.       
  112.     }
  113.   }
  114. }

  115. void HAL_SYSTICK_Callback(void)
  116. {
  117.   static uint8_t count=0;               // 用于旋转速度控制
  118.   static uint8_t step=0;                // 当前步进节拍
  119.   static uint16_t pulse_count=0;        // 脉冲计数,4096个脉冲电机旋转一圈
  120.   
  121.   if(Circle_number)                     // 如果等待旋转圈数不为0
  122.   {
  123.     count++;                            // 增加时间计数
  124.     if(count==speed)                    // 时间计数与目标速度相对时执行下一节拍输出
  125.     {
  126.       step_motor_pulse(step,direction); // 输出新节拍信号
  127.       pulse_count++;                    // 脉冲输出数增加      
  128.       step++;                           // 节拍数增加
  129.       if(step==8) step=0;               // 循环开始输出节拍
  130.       count=0;                          // 清零时间计数
  131.     }
  132.    
  133.     if(pulse_count==4096)               // 如果已经输出了4096个脉冲信号,已经转动了一圈
  134.     {
  135.       pulse_count=0;                    // 脉冲计数清零
  136.       Circle_number--;                  // 等待旋转圈数减1
  137.     }
  138.   }
  139.   else
  140.   {
  141.     A_OFF;  B_OFF; C_OFF; D_OFF;        // 停机
  142.   }
  143. }
  144. /******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
复制代码


收藏 1 评论4 发布时间:2016-8-23 08:54

举报

4个回答
gameng 回答时间:2016-8-23 16:52:00
楼主辛苦!学习了。
bb123 回答时间:2016-8-23 17:27:35
好文章 学习了
disheng4688 回答时间:2016-8-24 08:14:59
谢谢分享。
anny 回答时间:2016-8-24 08:26:24
支持,支持

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版