加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

20.4-使用两个通道进行PID电磁循迹 电磁循迹算法 零基础入门智能车竞赛 STM32电磁小车

08/23 08:56
1436
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
实物图
相关方案
  • 方案介绍
    • 20.4-使用两个通道进行PID电磁循迹
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

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

功能介绍放开头, 使用便捷无需愁。
这是全网最详细、性价比最高的STM32实战项目入门教程,通过合理的硬件设计和详细的视频笔记介绍,硬件使用STM32F103主控资料多方便学习,通过3万字笔记、12多个小时视频、20多章节代码手把手教会你如何开发和调试。让你更快掌握嵌入式系统开发

V3.3.0-STM32智能小车
视频: https://www.bilibili.com/video/BV16x4y1M7EN/?spm_id_from=333.337.search-card.all.click
V3:HAL库开发、功能:PID速度控制、PID循迹、PID跟随、遥控、避障、PID角度控制、视觉控制、电磁循迹、RTOS等功能。

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电压采集值 不同赛道要获得更好循迹效果 需要重新采集这个值

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
530FC125M000DGR 1 Silicon Laboratories Inc LVDS Output Clock Oscillator, 10MHz Min, 945MHz Max, 125MHz Nom, ROHS COMPLIANT, SMD, 6 PIN
暂无数据 查看
S25FL256SAGMFI000 1 Spansion Flash, 64MX4, PDSO16, SOIC-16
$9.11 查看
CY62167EV30LL-45ZXI 1 Cypress Semiconductor Standard SRAM, 1MX16, 45ns, CMOS, PDSO48, TSOP1-48
$69.33 查看

相关推荐

电子产业图谱