STM32增量式pid直流电机调速(内附源码)

       

目录

一.

1.硬件组成

2.模块分析

        1.TB6612电机驱动模块

        2.直流减速电机

        3.电源稳压模块

二.接线

三.代码思路讲解(详见源码)

四.STM32cubmx配置

1.系统基础配置:(重要)

2.电机旋转方向引脚配置

3.TIM1每10ms触发一次的定时器中断

4.TIM4输出pwm

5.TIM3四倍频读取编码器电机脉冲

6.串口1配置

五.源码链接

六.总结


        本例程采用了HAL库进行项目开发(主要使用软件CubexMX和keil5),主控使用STM32F1.3c8t6,文章末尾会有代码开源,欢迎各位对文章进行指正和探讨。

        最后附有源码地址。

一.

1.硬件组成

        STM32f103c8t6单片机,TB6612电机驱动,稳压模块,直流电机(带霍尔编码器), 12v电池。

2.模块分析

        1.TB6612电机驱动模块

在这里插入图片描述

        1.模块可以驱动两路电机,AO1AO2,BO1BO2各连接一路

        2.STBY接高电平,TB6612使能能够驱动电机,STBY接低电平,电机全部停止

        3.VM:接12v以内电源

        4.VCC:接5v电源

        5.GND:接电源负极

        6.PWMA和PWMB负责结束PWM来控制电机速度

        7.AIN1AIN2和BIN1BIN2用来控制电机正反转,下面是驱动逻辑

STM32增量式pid直流电机调速(内附源码)_第1张图片

        2.直流减速电机

STM32增量式pid直流电机调速(内附源码)_第2张图片

1.电机线+和电机线-连接TB6612输出AO或者BO

2.编码器GND和编码器5V连接负极电源和电源5v用来给霍尔编码器供电用于在电机工作时测量电机脉冲.

3.编码器A相,编码器B相。测量电机的旋转速度以及选装方向,这里使用定时器的编码器模式读取AB相发出的脉冲

4.我的型号的电机线数为13减速比为30,也就是电机旋转一圈会发送13 * 30 = 390个脉冲,普通的直流电机一般情况下都是这个脉冲(以商品实际信息为主)

        3.电源稳压模块

STM32增量式pid直流电机调速(内附源码)_第3张图片

 我这里面使用的电池电压为12v这里使用降压模块将12v降压为5v给TB6612供电

二.接线

        这里展示驱动一个编码器电机的示例。大家一定要认真接线,看清楚每一根线的作用,不要随便接线,一不小心就会冒香气(烧毁电机驱动或单片机)

        注意这里是我实际的接线,大家可以根据自己单片机的引脚资源合理进行分配。(注意单片机需要与电池共GND来同步电平标准)

TB6612 C8T6
STBY 高电平(+3.3V)
AIN1 PA3
AIN2 PA4
PWMA PB8 (TIM4-CH3)
AO1 电机电源+
AO2 电机电源-
VM 12V
VCC 3.3V
GND 和单片机共地

        编码器

编码器的A、B相 C8T6
A相 PA7 (TIM3-CH1)
B相 PA6 (TIM3-CH2)

        

三.代码思路讲解(详见源码)

1.定时器串口初始化等外设初始化

2.根据设定的期望脉冲通过每10ms触发一次的定时器中断来调用增量式pid函数来根据期望脉冲来调整输出的pwm,直到单片机读取到的脉冲和期望脉冲一致。

        初次进行实验时,我对pid期望速度有所疑问。具体疑问是单片机读取到的是电机发送过来的脉冲,我了解到可以使用M法测速将电机转速计算出来,但是无法将转速与pwm进行联系,后来我直接将期望速度改成了期望脉冲,根据期望脉冲的差值来控制pwm,直到达到我想要的效果。

四.STM32cubmx配置

1.系统基础配置:(重要)

RCC:

STM32增量式pid直流电机调速(内附源码)_第4张图片

SYS:

STM32增量式pid直流电机调速(内附源码)_第5张图片

clock configuration

STM32增量式pid直流电机调速(内附源码)_第6张图片

配置只有电机回车即可

2.电机旋转方向引脚配置

首先设置配置AIN1--PA3, AIN2-PA4的输出引脚:

STM32增量式pid直流电机调速(内附源码)_第7张图片

和TB6612的真值表做对比,电机反转(这里让电机正转或者反转都行)

3.TIM1每10ms触发一次的定时器中断

配置过程:

STM32增量式pid直流电机调速(内附源码)_第8张图片

 STM32增量式pid直流电机调速(内附源码)_第9张图片

 开启定时器中断

4.TIM4输出pwm

使用TIM4的CH3输出pwm对应PB8引脚

STM32增量式pid直流电机调速(内附源码)_第10张图片

5.TIM3四倍频读取编码器电机脉冲

STM32增量式pid直流电机调速(内附源码)_第11张图片

6.串口1配置

我这里因为没有使用串口接收数据,只是作为发送数据使用,因此没有开启串口中断

STM32增量式pid直流电机调速(内附源码)_第12张图片

到此基本配置已经完成,可以使用STM32cubmx生成代码了。

VOFA上位机查看数据:第一个数字为期望脉冲,第二个为实际脉冲,第三个为输出pwm,第四个为转速

STM32增量式pid直流电机调速(内附源码)_第13张图片

 

五.源码链接

链接:https://pan.baidu.com/s/1Ex-7BXWQoUminx9GFN6wjA 
提取码:etqp

六.总结

        这是我第一个基于pid的应用,最初做起来一脸迷茫,只知道原理,却不知道从哪里进行下手不知道如何将pid应用到实践中去,经过读过网上许多大佬的源码和博客,逐渐有了一定理解。

你可能感兴趣的:(stm32,单片机,嵌入式硬件)