【智能车学习】电磁循迹中的基本控制算法

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

前言

今天心血来潮,突然想总结一下电磁车的一些基本算法,也希望可以给新手同学们一点帮助和参考。
电磁车的控制相对比较简单,大致可以分为信号采集,舵机控制和电机控制三部分,所谓电磁车控制算法,其实就是对这三个模块功能的研究和精确,从而使赛车达到我们想要的效果。
本篇讲述的是基础算法部分,优化部分可以参考: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(<
评论 41
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Carry_qing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值