20.4-使用两个通道进行PID电磁循迹 电磁循迹小车 电磁循迹算法 智能车环岛

电子说

1.3w人已加入

描述

20.4-使用两个通道进行PID电磁循迹

面我们没有使用PID完成了循迹

循迹部分代码如下、我们是利用计算的差比和值 根据差比和大小和正负数控制电机,那么我们用PID循迹也是利用这个值,非PID循迹中我们目标是让g_fVoltageOuter 值等于零 ,所以我们每当 g_fVoltageOuter 大于0.5或者小于-0.5时候电机就会发生反应,想做或者右边运动,

PID中也是我们的

目标: 让g_fVoltageOuter变量等于零

输入: 当前g_fVoltageOuter 值

输出: 两个轮子的要控制速度 这里输出一个差速值,两个电机一个加 另一个电机减 这个差速值 就可以控制电机趋向 正确方向运动。

先按照笔记讲解说明,然后按照讲解已经改好的代码,然后教一下如何改代码。比较难理解,大家结合之前篇章多理解学习。

智能车
复制一下20.3 的代码 然后再这基础修改。

定义保存PID计算结果的变量

float g_fVoltagePidOut;//电磁循迹PID计算输出

智能车
定义一个用于电磁循迹PID参数的结构体

tPid pidVoltage;//电磁循迹PID代码

智能车
然后初始化一下PID的参数,给PID参数赋值。这里说一下如何计算PID参数

首先我们先看P I D 的计算函数,这个是我们在电机控制时候写的
智能车
我们做电磁循迹 ,循迹不需要关历史累计误差结果,所以我们只用 P D 参数 I=0可以

然后我们做一个假设,假设两次程序第一次g_fVoltageOuter 值是0 、第二次g_fVoltageOuter 是0.5 并且我们知道我们的目标值是零。

然后分析先定P -3 、D 比P 小很多定 -1 。后面我们在调整。
智能车
所以我们的PID初始化先这么写

pidVoltage.actual_val=0.0;
pidVoltage.target_val=0.00;//电磁循迹PID 的目标值为0
pidVoltage.err=0.0;
pidVoltage.err_last=0.0;
pidVoltage.err_sum=0.0;
pidVoltage.Kp=-3.00;
pidVoltage.Ki=0;
pidVoltage.Kd=-1.00;

智能车
声明一下变量

extern tPid pidVoltage;//电磁循迹PID代码

智能车
编写PID控制部分代码
智能车
PID输出控制部分代码

g_fVoltagePidOut = PID_realize(&pidVoltage,g_fVoltageOuter);//PID计算输出偏差目标速度 这个速度,会和基础速度加减
​
g_fHW_PID_Out1 = 1 + g_fVoltagePidOut;//电机1速度=基础速度+电磁PID输出速度
g_fHW_PID_Out2 = 1 - g_fVoltagePidOut;//电机1速度=基础速度-电磁PID输出速度
if(g_fHW_PID_Out1 >5) g_fHW_PID_Out1 =5;//进行限幅 限幅速度在0-5之间
if(g_fHW_PID_Out1 < 0) g_fHW_PID_Out1 =0;
if(g_fHW_PID_Out2 >5) g_fHW_PID_Out2 =5;//进行限幅 限幅速度在0-5之间
if(g_fHW_PID_Out2 < 0) g_fHW_PID_Out2 =0;

motorPidSetSpeed(g_fHW_PID_Out1,g_fHW_PID_Out2);//通过计算的速度控制电机

智能车
摇摆十分严重 我们把PD 缩小一些,然后提高基础速度到1.5

PID参数调整如下

pidVoltage.actual_val=0.0;
pidVoltage.target_val=0.00;//电磁循迹PID 的目标值为0
pidVoltage.err=0.0;
pidVoltage.err_last=0.0;
pidVoltage.err_sum=0.0;
pidVoltage.Kp=-1.0;  //电磁循迹P参数
pidVoltage.Ki=0;
pidVoltage.Kd=-0.2;//电磁D参数

如果更改了电感,电感的最大电压值可能会变化,需要修改

这个变量

float g_fVoltageMax[4]={2.89,2.89,2.89,2.89};//用于归一化的最大ADC电压采集值 不同赛道要获得更好循迹效果 需要重新采集这个值

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分