STM32
直播中

石玉兰

7年用户 1425经验值
私信 关注
[问答]

怎样去驱动基于stm32f104zet6芯片的直流电机呢

如何使用L298N去驱动直流电机呢?

如何使用8050去驱动直流电机呢?
如何使用A4988去驱动直流电机呢?

回帖(1)

曹玥

2021-12-23 09:41:14
前言

我目前是一名大二在校生,对32有了基本的理解和编程能力,这次是我们队准备电赛做的第一个题目,没有预先查找可行方案。我们共做了三个方案,用时三周,经验非常欠缺。
方案综述

方案一:使用L298N驱动的直流电机,开环系统,直流电机就是你能想到的最垃圾的那种。
方案二:使用8050驱动的直流电机,闭环系统,直流电机为飞思卡尔电机。
方案三:使用A4988驱动的步进电机,开环。
以上三种均为stm32f104zet6芯片,使用6050陀螺仪,12864OLED显示。
陀螺仪仅使用了一个欧拉角,通过相对值进行判断倾斜角度,具体欧拉角选择与硬件安装有关。
方案一

遇到的问题:
如上述,最垃圾的直流电机,大到吓人的回差,当PWM占空比低于三分之一时迅速停转,并不存在低速状态。
解决方法:
回差没解决,要不也不会换方案。
控速方面,在PWM控速的基础上叠加了一个PWM,通过停转和相对低速转换的比例将速度降到需求速度,未使用PID。
程序底层不是我写的,我仅对算法及控诉部分进行更改,变量不知道干啥的没敢动,屏蔽部分代码可能与未屏蔽的存在逻辑冲突,且有部分相关逻辑已被删除,直接忽略即可,没时间整理。
方案二

遇到的问题:
电机太屌,高速状态呈线性,通过PID调节后可稳定在一个速度,但空转的时候达不到需求的低速,加负载后可通过调节达到。这电机在跷跷板反向的时候,若不给一个高占空比的反向PWM波,会刹不住车,于是我在这给PID打了个补丁,反向瞬间给高占空比PWM波进行刹车。PID还打了一堆补丁我忘了是啥了,反正最后调参数阶段我是快崩溃了,于是本程序卒。本来想重新写一个自调节比例系数的PID,原谅我太菜了,PID只学了一周,发呆了好久没有思路,这时候,第三个方案的车模给我搭出来了,于是我抛弃了这个程序,
解决方法:
没解决,留下了一堆没测试的半成品,没时间给我浪费弄这个了。
方案总结: 我觉得这个方案应给能完成,PID参数的更改是必须要有的,要不斜坡起步能慢到让人崩溃,或是中间低速时速度波动过大,当然,完不成也别来找我,就当我没说。
程序乱七八糟的没整理加一。
方案三

遇到的问题:
好像没啥问题,我们在做方案三的同时把跷跷板改了,把平衡点确定在轴与跷跷板接触的地方,而不是随着轴改变平衡点同时改变,并且增大了轴与跷跷板之间的摩擦力。
应用部分
A4988驱动是使用脉冲对步进电机进行控速,我用了32定时器的门控模式产生我想要的脉冲,脉冲产生的程序框架及数据来自网络资源,我进行了微调,把源程序的bug改正,然后就用的很舒服。门控模式我也是第一次接触,通过数据手册和看例程结合搞懂了。两个步进电机的脉冲我是通过同一个定时器产生,用两个通道输出,反正就是一模一样的。我使用的两个步进电机是同一型号同一批次,所以相同模式的步进角度也一样。
我的算法部分应用了硬件搭建的一个问题(应该是硬件的问题),车模陀螺仪返回值会有波动,同一角度的值会出现部分波动,以及初始化后数据会从一个正值缓慢恢复到校准值。稳压模块出了问题,供电貌似一直是6V超压,反正也没烧就没改,也有懒的原因。然后我就发现我原来的算法清除这个误差非常难,陀螺仪数据本身的波动已经超过了跷跷板移动时的波动,这时我发现,这平衡车只要速度够慢,一点点移到平衡点就好了,于是我找了找陀螺仪数据BUG的规律,重写了算法,利用了这个误差,成功达到目标。
本来想加上定时器来读秒计数的,鬼知道是硬件还是软件的问题,效果非常鬼畜,我也懒得排除了。
方案总结
第一次组队配合完成题目,配合的很渣,完全没有默契。


第一车模:MPU6050陀螺仪程序,对速度下限依然很高的直流电机降速方案
第二车模:陀螺仪加一,四线旋转编码器正交解码程序,PID调速程序(在主函数中,还带着一堆补丁)
第三车模:陀螺仪加二,用定时器的门控模式产生步进电机需求的脉冲程序及配置,步进电机控制的封装
均由12864OLED显示,可能还有别的,我想不起来了。程序都没有进行优化和整理!
注意:跷跷板的平衡点越稳定越容易平衡,平衡范围越大对算法要求越低。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分