文章目录
前言
今天心血来潮,突然想总结一下电磁车的一些基本算法,也希望可以给新手同学们一点帮助和参考。
电磁车的控制相对比较简单,大致可以分为信号采集,舵机控制和电机控制三部分,所谓电磁车控制算法,其实就是对这三个模块功能的研究和精确,从而使赛车达到我们想要的效果。
本篇讲述的是基础算法部分,优化部分可以参考:https://blog.youkuaiyun.com/Carry_qing/article/details/109906383
采样信号滤波
什么是滤波
滤波(Wave filtering)是将信号中特定波段频率滤除的操作,是抑制和防止干扰的一项重要措施。它可以从含有干扰的接收信号中提取有用信号,很大程度上保证了采集到的信号的真实性和稳定性。正因如此,滤波算法也成了在智能车控制中不可或缺的一种控制算法。
常见的软件滤波办法
软件滤波在嵌入式的数据采集和处理中有着很重要的作用。对于电磁车来说,我们需要对采集到的赛道电磁信号进行滤波处理,这里我们介绍几种常见的软件滤波处理办法。
限幅法
一般来说,每个电感在赛道上采集到的值都有一个固定的范围,由于电感排布方案的不同(水平电感、竖直电感或斜电感等)或不同赛道电磁信号的差别,这个范围也会随之变化。这时我们可以在程序的初始化中加入一个扫描赛道的程序,在初始化程序运行时令车左右扫描,将每个电感的最大值和最小值分别记录入两个一维数组中,让其作为每个电感采集信号值的上下限(这样也是为了提高赛车对于不同赛道的适应性)。在后续赛车行驶过程中,便可以过滤在这个范围之外的电感值,从而排除偶然误差,达到软件滤波的效果。
具体代码如下(此处只写一个其中电感的处理):
////////// 扫描赛道 //////////
void saomiao()
{
uint32 i;
uint16 max1=0,min1=4095;
for(i=0;i<1000;i++)
{
LeftADC[0]=ADC_Ave(ADC0,ADC1_SE8,ADC_12bit,10);
if(LeftADC[0]>max1)
max1=LeftADC[0];
if(LeftADC[0]<min1)
min1=LeftADC[0];
}
}
////////// 限幅法滤波 //////////
void AD_value(<

本文介绍了电磁车控制中的关键算法,包括采样信号滤波(限幅法和算术平均值滤波)、归一化处理以及PID控制(舵机与电机控制)的应用。通过实例代码演示了如何实现场景中的信号处理和精准控制。
最低0.47元/天 解锁文章
4万+

被折叠的 条评论
为什么被折叠?



