项目场景:
电机型号:MD36N行星减速电机_AB两相光电编码器霍尔编码器
电机参数:
//光电编码器线数500,减速比27,减速器长度32.5mm,以1:27输出轴:27*500=13500线,
四倍频 MD36NP27_24V,减速后转速325(30)rpm,额定转速230(20)rpm
//霍尔编码器线数13,减速比71
单片机型号:STM32F429IG,keil
程序最终功能:串级位置式PID反复调节电机,使得电机可以在一定范围内精准任意停靠在某个位置,比如电机控制目标在圆形轨道转动,就可以实现在固定角度的位置停靠,四等分,八等分等
实现步骤
1、PID调节相关的定时器设置
PID计算定时器
编码器
电机PWM输出定时器
2、
@Override
public void run() {
bytes = mmInStream.read(buffer);
mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget();
}
问题分析及解决方案:
1、当使用串级位置式PID时,在其他子程序中加入已调试好的程序,PID控制电机突然不动,
关闭所有打开的c、h文件,再打开main.c重新编译下载
2、while循环与if语句对于电机PID调速的影响
电机位置环调速时,target_location在形式上必须是电机转一圈的倍数值,且不为零,其他值也不行,不能直接赋值。
else if也不能用,只能用if
if语句的判断条件不能是数组元素,必须是一个变量。
if语句在keil嵌入式中使用的必须条件就是,if语句必须列举全部的可能性,
3、FreeRTOS的软件定时器会影响软件定时器的定时时间,甚至导致失效
4、直流有刷减速电机位置环速度环位置式调速
a、位置环位置式的初始位置与每转一圈的位置都会被PID记录,因此对电机位置的管理尤为重要,且只能每次转固定脉冲的倍数,不能出现乘法,只能以+=形式赋值。
b、复位多次PID位置环的调试结果符合正弦曲线或PID超调经典曲线,即一次过位,一次正好,一次欠位,或者多次过位...
5、PID位置环速度环串级调速
6、速度环调速时,电机以最大速度启动且无法调速
7、PID环境配置
上溢下溢计数方向
IN1与IN2双PWM调速时的电机使能方式FWD\REV
电机旋转方向
电机设置速度方向
计算PID的定时器周期太大,无法调速
速度上限还是下限处理,当PWM值越大,速度越小时,设置下限,且界值不对,无法调速
编码器频率
PWM上限
电机速度太高,每圈脉冲数太多导致PID调节失效
电机将FWD,REV同时使能,电机不转
文章来源地址https://www.toymoban.com/news/detail-403454.html
文章来源:https://www.toymoban.com/news/detail-403454.html
到了这里,关于位置环速度环串级位置式PID实现全过程解析(详细)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!