20.4-使用两个通道进行PID电磁循迹 电磁循迹小车 电磁循迹算法 智能车环岛 智能车比赛规则 零基础入门智能车竞赛 智能车竞赛 电磁杆原理图 电磁循迹小车 智能车电磁组 STM32电磁小车

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电压采集值 不同赛道要获得更好循迹效果 需要重新采集这个值
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值