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

基于STM32CubeIDE驱动无刷电机做的动量轮平衡自行车(四)

[复制链接]
STMCU小助手 发布时间:2023-2-9 17:42
背景
        本文用于记录平衡自行车的制作过程,及制作中遇到的问题;总体方案如下:采用采用STM32F103C8T6作为主控单元、MPU-6050作为位姿采集单元、0.96寸OLED显示位姿、无刷电机带动动量轮调节小车平衡、1S锂电池配合5V和12V升压模块作为电源、蓝牙模块用于无线控制及调试、SG90舵机用于控制行驶方向。

无刷电机简介
        我用的无刷电机是在TB上淘的便宜货,小日本万宝至无刷电机,内置驱动,带100线双通道编码器,12V-24V的电压下均可运行。

21ZNG9V]}G9}`O~$RJD~PD5.png

无刷电机驱动
        在上一篇专栏建立工程()的基础上,使用外部中断测量电机转速,使用定时器3产生PWM信号控制电机转速,从而实现电机的闭环控制。

1、STM32外部中断配合编码器测独特速度

将编码器A相与PA3连接,B相与PA4连接,并且连接编码器VCC、GND。

在mian.c文件中重新定义外部中断回调函数:
  1. /* USER CODE BEGIN PV */
  2. int32_t counterA = 0;
  3. //重定义外部中断函数
  4. /**
  5.   * @brief  EXTI line detection callbacks.
  6.   * @param  GPIO_Pin: Specifies the pins connected EXTI line
  7.   * @retval None
  8.   */
  9. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
  10. {
  11.    if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_4) == RESET)//检测编码器B相的电平,判断编码器转向
  12.            counterA +=1;
  13.    else
  14.            counterA -=1;
  15. }
  16. /* USER CODE END PV */
复制代码

在mian()函数while循环中增加在OLED中显示编码器运动状态的相关代码:

  1. /* **********显示编码器数值*********** */   sprintf(buffer, "%d", counterA);//int32_t转换成char[]   OLED_ShowStr(10,7,"Encoder:",1);   OLED_ShowStr(60,7,"        ",1);   OLED_ShowStr(60,7,buffer,1);
复制代码

最终演示效果如下:

LTCC%{}`@99FN8TU52A2WQT.png

2、STM32定时器PWM控制电机转速


在mian()函数增加下列代码,打开定时器3,并设置初始占空比为1(此时为PWM输出为高电平)

  1. //启动定时器3的通道1,控制无刷电机
  2. HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
  3. //设置通道1的占空比,无刷电机0~1200
  4. __HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1,1200);
复制代码

在mian()函数while循环中增加下列代码,是PWM占空比由1-0逐渐下降
  1. /* **********调试无刷电机转速*********** */
  2. static uint16_t brushless1 = 1200;
  3. __HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1,brushless1);
  4. brushless1 -=5;
  5. if(brushless1<=0) brushless1 = 1200;

  6. sprintf(buffer, "%d", brushless1);//int32_t转换成char[]
  7. OLED_ShowStr(10,7,"BMoter:",1);
  8. OLED_ShowStr(60,7,"        ",1);
  9. OLED_ShowStr(60,7,buffer,1);
复制代码

通过测量PWM输出引脚的电压变化,大致判断PWM输出是否正常,如下所示:

JNE8L%K7EIO6WUV7W{3UOVW.png

3、STM32F103C8T6引脚、外部中断、定时器3配置如下:
设置PA3引脚为GPIO_EXTI3;PA4引脚为GPIO_INPUT;

]13O5_K{{)`S)D2JA0P{BLD.png

打开外部中断3

)AL0D$BCH9MXUIO@`0PW}U8.png

设置外部中断引脚PA3为上拉,触发模式:上升沿触发

TX_QXT`5X`)X3}~5`XM%E_4.png

设置引脚PA4为上拉

9XW@}7(2M%]9T)K[_FV%(.png

设置定时器3通道1位PWM输出模式,PWM频率位20kHz(计算方式参考()),初始占空比为1000。

_{8N]~`I4]QEILQNJ(5Y`9I.png

作者:DIY攻城狮 https://www.bilibili.com/read/cv21718261?spm_id_from=333.999.0.0 出处:bilibili


收藏 评论1 发布时间:2023-2-9 17:42

举报

1个回答
STMWoodData 回答时间:2023-2-10 15:08:58

学习学习

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版