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

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


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

整个过程的配置很简单 :①开时钟② IO复用③调用接口配置函数 通过上述的顾鹏程我们就已经完成了对编码器的配置。
编码器对 电机输出的编码器信号使用硬件解码,编码器的解码过程配置这里不做详细的介绍了,具体请参考 stm32F4xx 中文参考手册。我们这里最终实现了 电机转动产生正交编码的信号,定时器对编码信号进行解码,电机 转动时 TIMx->CNT ++++ 或者---- 具体的加或者减取决于电机的转动方向。

以上是编码器参数处理的部分函数, 这里我没有采用记录上一次值的方法,这是因为在项目的需求中我只需要控制速度,而不需要去管位移, 如果有需要对位移进行控制的函数,那么我们就需要保存上一次的值 使用一个差值去进行速度的控制。
第三部分是 产生一个时间基准:
我们要对电机进行速度控制,但是我们目前获取到的信息是 转角的信息(类比直线运动的位移)我们需要对转速(速度)控制只需要对位移进行微分,所获得的就是速度信息。所以我们需要将时间切片,看每一个时间片内 电机转过的角度,这个值近似等于这一段时间内的电机的平均速度, 也几乎可以反映出电机的瞬时速度。 综上 我们需要一个时间的基准
时间基准我们是通过 定时器中断来产生的,我们通过定时器的定时中断,在中断函数内对 编码器信息处理,以此获得速度信息。 定时器中断部分的配置如下, 这是正点原子的探索者的代码,就不做解释了。

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

这个是增量式速度PI 的核心部分。
第五部分就是将以上的部分全部融合起来 构成一个可以跑起来的程序 这也是程序的最主要的部分

至此 就差不多完成了电机的速度控制。整个电机的速度控制时比较困难的,我也是花了一个多周的时间才搞明白的。
除了我上述提到的这些以外,我们还需要去大概的了解 电机驱动 正交编码器 等等的概念。
才疏学浅 难免有疏漏之处,望不吝赐教。
史海拾趣
|
听说现在三恒星科技推出一个中国最便宜的ARM7开发板,才198元,我晕,谁了解行情啊?ARM有这么便宜的吗?高手指点一下! 小弟QQ:727887572… 查看全部问答> |
|
诚聘射频研发工程师从事红外、射频智能遥控系列,控制系统等产品 诚聘射频研发工程师我司招聘射频研发工程师一名.主要从事红外、射频智能遥控系列,控制系统等产品. 岗位要求:精通无线射频产品的设计、研发工作,一年以上射频电路(315,433HMZ)的独立设计经验.能够熟练使用射频电路仿真工具、测试仪器等相关器件 ...… 查看全部问答> |
|
本帖最后由 paulhyde 于 2014-9-15 09:11 编辑 如果让你来设计未来的电梯,你会从什么角度入手?酷炫的外观、创意的结构、非凡的体验还是绿色环保的特性? 我一直在关注“60年后的电梯”网络创意设计大赛,是快速电梯和视觉同盟合办的。最近发现 ...… 查看全部问答> |
|
当本人把以下代码嵌入到C文件中 __asm { MRC p15,0,r10,c0,c0,0; } 编译出错的信息为: War ...… 查看全部问答> |
|
请问gprs模块+zigbee模块,用手机发短信控制zigbee模块上的led点亮这个功能怎么实现 我知道是用串口控制的,很多人都说很简单,可是我还是实现不了,大家都说简单 我的代码也打好了,在串口调试助手上也测试过zigbee模块能输出AT指令,并且在串口调 ...… 查看全部问答> |




