Stm32F407控制直流减速编码电机(平衡小车之家出品)--使用增量式速度PI

今天给大家分享一个我先前使用的直流电机的增量式速度PI的算法。首先跟大家介绍应用场景,我们使用 增量式速度PI 控制直流减速编码电机是在 参加 全国大学生工程训练综合能力竞赛时 为了控制一个麦克纳姆轮小车而准备的, 在应用需求中我们一共是需要控制四路 电机 分别对四个电机的速度、方向进行控制,以此来实现对车身姿态的精确控制。可以认为速度控制是脉轮车控制的一个基本需求。(此处说的麦轮车是指 自动运行的, 手动操作的就另当别论) 声明:以下文章中电机 指 直流减速编码电机     如果您只是向要一份参考代码, 那么他的链接在这里; 配合文章会更好的理解代码哟

链接:https://pan.baidu.com/s/19eUZ-PpIRKOBdnUSTj_jEQ 
提取码:1111 
复制这段内容后打开百度网盘手机App,操作更方便哦--来自百度网盘超级会员V5的分享

我们先前使用的电机型号如下

我们使用的是500线的光电编码器,控制相对于 12线磁编码器要简单很多,当然价格 贵不少。。。

控制电机的速度,我们第一步肯定是要使用 PWM波,先使用Stm32F407 生成一个我们需要的 占空比可调的  频率 符合要求的方波信号。(此处注意,方波信号的频率不宜过高或者过低,过高容易导致电机驱动的晶闸管经常处于开关状态--发热巨大;过低则容易产生噪音,对电机也低频的冲击) 直接上代码!

第一部分是产生 可控方波的代码

 

程序大概就是这样的,这一部分很简单,只是简单的定时器的 输出配置

 

第二部分是配置 一路编码器接口,我们的 Stm32F407的定时器 1 2 3 4 5 8 支持编码器的解码功能,本次比赛中我们的 定时器2 3 4 5 分别用作了四路电机的编码器解码。编码器器的配置过程大致如下:

整个过程的配置很简单 :①开时钟② IO复用③调用接口配置函数   通过上述的顾鹏程我们就已经完成了对编码器的配置。

编码器对 电机输出的编码器信号使用硬件解码,编码器的解码过程配置这里不做详细的介绍了,具体请参考 stm32F4xx 中文参考手册。我们这里最终实现了 电机转动产生正交编码的信号,定时器对编码信号进行解码,电机 转动时 TIMx->CNT ++++  或者----  具体的加或者减取决于电机的转动方向。
 

以上是编码器参数处理的部分函数, 这里我没有采用记录上一次值的方法,这是因为在项目的需求中我只需要控制速度,而不需要去管位移, 如果有需要对位移进行控制的函数,那么我们就需要保存上一次的值 使用一个差值去进行速度的控制。

第三部分是 产生一个时间基准:

我们要对电机进行速度控制,但是我们目前获取到的信息是 转角的信息(类比直线运动的位移)我们需要对转速(速度)控制只需要对位移进行微分,所获得的就是速度信息。所以我们需要将时间切片,看每一个时间片内 电机转过的角度,这个值近似等于这一段时间内的电机的平均速度, 也几乎可以反映出电机的瞬时速度。 综上 我们需要一个时间的基准

时间基准我们是通过 定时器中断来产生的,我们通过定时器的定时中断,在中断函数内对 编码器信息处理,以此获得速度信息。 定时器中断部分的配置如下, 这是正点原子的探索者的代码,就不做解释了。

 

 

第四部分是 增量式速度PI的 实现代码 ,这一部分我是抄来的,也是搞不明白。所以就不去班门弄斧了。大家去找其他的大佬的解释吧。我这里只是附上代码

这个是增量式速度PI 的核心部分。

第五部分就是将以上的部分全部融合起来 构成一个可以跑起来的程序  这也是程序的最主要的部分

至此 就差不多完成了电机的速度控制。整个电机的速度控制时比较困难的,我也是花了一个多周的时间才搞明白的。

除了我上述提到的这些以外,我们还需要去大概的了解 电机驱动   正交编码器  等等的概念。

才疏学浅 难免有疏漏之处,望不吝赐教。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字50 设计师:CSDN官方博客 返回首页