智能车浅谈——抗干扰技术软件篇

文章目录

  • 软件抗干扰技术
  • 数字信号的抗干扰措施
    • 数字输入信号软件抗干扰措施
    • 数字输出信号软件抗干扰措施
    • 数字滤波
      • 算术平均值滤波
      • 中值滤波
      • 滑动平均滤波
      • 归一化
      • 差比和
    • CPU及程序的抗干扰措施
      • 复位
      • 掉电保护
      • Watchdog技术
  • 总结
  • 智能车系列文章汇总

软件抗干扰技术

前面介绍了一些硬件抗干扰技术,不难发现,要做好一个完美的硬件系统是需要花大心思的,而且很多硬件抗扰方案都需要借助一些元器件来实现,这在一定程度上增加了费用,而且也增加了硬件设计时的难度,这对于学生党而言有些许的不友好,实际上,在抗扰技术方面除了之前提到的硬件抗扰技术外,我们常用的还有软件抗扰技术。今天博主就来扒一扒我们智能车中常用的部分软件抗扰技术。
开始介绍抗干扰技术之前,先给大家分享一个知识点吧,我们都知道对于一个控制系统,输入信号越平滑越好,可大多数情况下输入的数据往往需要我们处理后才能变得平滑,甚至有些波形十分凌乱我们还会采用一些数学方案让他变得近似一条直线或者曲线,那么为什么一定要使用信号处理手段让输入信号变得平滑或者是近似线性呢?难道输入原始信号就不能实现控制效果了吗?(这里是笔者根据自动控制原理推测,并没有明确的理论推断,如有不妥,欢迎大家指出)
相信大家最容易想到的解释就是,输入信号决定了输出信号,如果不处理这些杂乱的输入信号,那么输出的信号就会一片混乱,系统也就无法达到稳态,进而控制效果也就不理想。
对于这个疑问笔者有这样一个想法,在自动控制原理以及计算机控制原理里面有介绍,我们平时研究的经典控制系统都是线性定常系统,学过自动控制原理的同学肯定都还记得有个叫稳态误差的东西,在求稳态误差的方法中,有一个方法是根据系统型别进行计算,想必下面这个表大家还有印象,当然没学过自控的同学肯定没印象,我们抛开那些理论知识,可以从表中看见两个规律:
1.系统输入r(t)不变时,随着型别的提高,表中的数据越来越小,这个数据就是稳态误差;
2.当系统型别不变时,随之输入信号的不断升级(从位置信号1(t)—>速度信号t----->加速度信号1/2t^2)系统的稳态误差不断增加。
在这里插入图片描述
上面是理论部分的描述,接下来我们看个例子,考虑到有些同学没学自控啊,这里不摆传函这些东西;注意下面三幅图,蓝色代表输入,红色代表系统的输出,
首先第一幅图很明显输入是一个阶跃信号可以理解为数字从0变为了1,该系统的输出经过两拍后可以实现无差跟随,稳态误差为零
然后是第二幅图,输入信号是一个一次函数也就是速度信号,该系统也是经历了两拍后就可以无差跟踪,稳态误差为零
最后是第三幅图,可以发现输入信号变成了一条曲线一个二次函数也就是加速度信号,此时可以发现系统输出与输入之间恒存在偏差,无法做到无差跟踪,稳态误差不再为零了。以此类推一下,如果输入信号变成了一个三次函数,此时根据上面提到的理论,稳态误差会进一步加大,系统输出无法跟随输入信号,此时系统就没法正常工作了。
在这里插入图片描述
根据上面这个例子,我们再扩充一下,智能车实际上也是一个线性定常系统,它肯定也要遵循上面的控制规律,假设我们小车是个二型系统,要想让系统稳定工作,输入信号是不是最多最多只能是加速度信号,输入信号超过二次时系统就没法无差跟随输入了。
有人可能会说,根据上面的理论知识,想让系统可以跟随更高阶的信号不是还可以提高系统型别来实现吗,显然,提高系统型别也是一个可行方案,但是自控中所有的东西都是双刃剑,有利它必然会带来弊端,提高系统型别后,系统的稳定裕度就会减小,也就意味着控制器的参数更难调节,大家自己想想,现在一个PID的参数都要很长时间才能调的合适,如果再提高系统型别,是不是真的可以一年做车时间都用来调参了呢,除此之外,整个系统其他部分的环节已经固定了,要想改变系统型别只能改变控制器的算法,这也会加大单片机内部的运算量,同时还会影响到系统的响应速度。

数字信号的抗干扰措施

数字输入信号软件抗干扰措施

干扰信号多呈毛刺状,而且作用时间短,而数字信号作用时间相对要长得多。
改进:在采样某一数字信号时,可多次重复采样,直到连续两次或两次以上采样结果完全一致方为有效。如果多次采样后,信号始终变化不定,则说明干扰严重,就应停止采样,并且发出报警信号,类似输入如下图时。
在这里插入图片描述

数字输出信号软件抗干扰措施

为了防止受数字输出信号控制的输出设备受干扰产生误动作,最有效的方法是不断重复输出数字输出信号,并且在可能条件下,输出的重复周期越短越好。外设接收一个错误的信息后,还来不及做出有效的反应,下一个正确的输出信息又到来了,就可以及时防止错误动作的发生,克服干扰的影响。

数字滤波

数字滤波是一种软件算法,它实现从采样信号中提取出有效信号数值,滤除干扰信号的功能。
数字滤波与模拟滤波相比,具有很多优点。
首先,由于采用了程序实现滤波,无需硬件器件,不受外界的影响,也无参数变化等问题,所以可靠性高,稳定性好;
数字滤波可以实现对频率很低(如0.01Hz)信号的滤波,克服了模拟滤波器的不足;
数字滤波还可以根据信号和干扰的不同,采用不同的滤波方法和滤波参数,具有灵活、方便、功能强等优点。
缺点:数字滤波不足之处在于滤波速度比硬件滤波要慢,会造成信号的延迟,影响系统响应速度;但鉴于数字滤波器具有的上述优点,在计算机控制系统中得到了广泛的应用。下面介绍几种常用的数字滤波方式。

算术平均值滤波

思路:
连续取 N 个采样值进行算术平均运算
N 值较大时: 信号平滑度较高, 但灵敏度较低
N 值较小时: 信号平滑度较低, 但灵敏度较高
N 值的选取: 一般流量, N=12; 压力: N=4
优点:
适用于对一般具有随机干扰的信号进行滤波
这样信号的特点是有一个平均值, 信号在某一数值范围附近上下波动
缺点:
对于测量速度较慢或要求数据计算速度较快的实时控制不适用
比较浪费RAM
在这里插入图片描述
算术平均值滤波程序流程图如下:
在这里插入图片描述
C语言代码片

// An highlighted block
/*
*/
#define N 12
char filter()
{int sum = 0;for ( count=0;count<N;count++){sum + = get_ad();delay();}
return (char)(sum/N);
}

智能车中最常用于对ADC采集值进行处理,进行一个平滑处理消除个别毛刺信号。 代码如下:

// An highlighted blockLnowADC[0] = ADC1_Read_Average(ADC1ch0_A0,10);   // 左前侧第1个电感,与赛道平行,采集各个电感的AD值LnowADC[1] = ADC1_Read_Average(ADC1ch1_A1,10);   // 左前侧第2个电感,与垂直赛道,LnowADC[2] = ADC1_Read_Average(ADC1ch8_B0,10); // 右前侧第2个电感,与垂直赛道,LnowADC[3] = ADC1_Read_Average(ADC1ch9_B1,10);  // 右前侧第1个电感,与赛道平行,
/*LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
【函数名】u16 ADC1_Read_Average(ADC_CHx_e ADC_Channel_x,uint8_t times)
【功  能】获取几次ADC1采样值的平均值
【参数值】ADC_Channel_x , x为0~16
【返回值】ADC读到的值
【作  者】L Q
【最后更新】2021年1月22日 
【软件版本】V1.0
【调用样例】 ad_v=ADC1_Read_Average(ADC1ch12_C2);
QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ*/
u16 ADC1_Read_Average(ADC_CHx_e ADC_Channel_x,uint8_t times)
{u32 temp_val=0;u8 t,delay;for(t=0;t<times;t++){temp_val+=ADC1_Read(ADC_Channel_x);for(delay=0;delay<50;delay++);}return temp_val/times;
}

中值滤波

思路:
连续采样 N 次(N 取奇数)
把 N 次采样值按大小排列
取中间值为本次有效值
B、 优点:
能有效克服因偶然因素引起的波动干扰
对温度、 液位的变化缓慢的被测参数有良好的滤波效果
C、 缺点:
对流量、 速度等快速变化的参数不宜
C语言代码片

// An highlighted block
#define N 11
char filter()
{char value_buf[N];char count,i,j,temp;for ( count=0;count < N;count++){value_buf[count] = get_ad();delay();}for (j=0;j<N-1;j++) //冒泡法{for (i=0;i<N-1-j;i++){if ( value_buf[i]>value_buf[i+1] ){temp = value_buf[i];value_buf [i]= value_buf[i+1];value_buf[i+1] = temp;}}}return value_buf[(N-1)/2];
}

滑动平均滤波

递推平均滤波法(又称滑动平均滤波法)
思路:
把连续取 N 个采样值看成一个队列
队列的长度固定为 N
每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则)
把队列中的 N 个数据进行算术平均运算,就可获得新的滤波结果
N 值的选取: 流量, N=12; 压力: N=4; 液面, N=4~12; 温度, N=1~4
优点:
对周期性干扰有良好的抑制作用, 平滑度高
适用于高频振荡的系统
缺点:
灵敏度低
对偶然出现的脉冲性干扰的抑制作用较差
不易消除由于脉冲干扰所引起的采样值偏差
不适用于脉冲干扰比较严重的场合
比较浪费 RAM
内联代码片

// An highlighted block
/*
*/
#define N 12
char value_buf[N];
char i=0;
char filter()
{
char count;
int sum=0;
value_buf[i++] = get_ad();
if ( i == N ) i = 0;
for ( count=0;count<N;count++) sum = value_buf[count];
return (char)(sum/N);
}

在这里插入图片描述
有关数字滤波器还有很多,大家可以根据自己的需求去尝试,我也上传了一个滤波器的文档到资源,需要的同学自行下载。

归一化

归一化,见名知意,就是把所有采集到的参数转换为同一个范围的数据,归一化的思路:获取变量最大值,并记录,后面所有的采集值都与此最大值进行对比,根据比值再×对应的数据范围即可。
主要作用是消除更换场地后电磁信号出现的偏差。 代码片

// An highlighted block
/*************************************************************************
*  函数名称:void InductorNormal(void)
*  功能说明:采集电感电压并归一化;
*  参数说明:无
*  函数返回:无
*  修改时间:2020年11月18日
*  备    注:   注意要先标定运放的放大倍数,尽量四个一致或者接近
*************************************************************************/
void InductorNormal (void)
{LnowADC[0] = ADC1_Read_Average(ADC1ch0_A0,10);   // 左前侧第1个电感,与赛道平行,采集各个电感的AD值LnowADC[1] = ADC1_Read_Average(ADC1ch1_A1,10);   // 左前侧第2个电感,与垂直赛道,LnowADC[2] = ADC1_Read_Average(ADC1ch8_B0,10); // 右前侧第2个电感,与垂直赛道,LnowADC[3] = ADC1_Read_Average(ADC1ch9_B1,10);  // 右前侧第1个电感,与赛道平行,if (LnowADC[0] < ad_min[0])LnowADC[0] = ad_min[0];     // 刷新最小值else if (LnowADC[0] > ad_max[0])LnowADC[0] = ad_max[0];     // 刷新最大值if (LnowADC[1] < ad_min[1])LnowADC[1] = ad_min[1];else if (LnowADC[1] > ad_max[1])LnowADC[1] = ad_max[1];if (LnowADC[2] < ad_min[2])LnowADC[2] = ad_min[2];else if (LnowADC[2] > ad_max[2])LnowADC[2] = ad_max[2];if (LnowADC[3] < ad_min[3])LnowADC[3] = ad_min[3];else if (LnowADC[3] > ad_max[3])LnowADC[3] = ad_max[3];// 40 70 70 40LleftV = (LnowADC[0] - ad_min[0]) * 100 / (ad_max[0] - ad_min[0]);     // 各偏移量归一化到0--100以内LleftP = (LnowADC[1] - ad_min[1]) * 100 / (ad_max[1] - ad_min[1]);LrightP = (LnowADC[2] - ad_min[2]) * 100 / (ad_max[2] - ad_min[2]);     // 各偏移量归一化到0--100以内LrightV = (LnowADC[3] - ad_min[3]) * 100 / (ad_max[3] - ad_min[3]);MagneticField = LleftV+LleftP+LrightP+LrightV;
}

使用归一化后所有的采集数据都被归到1-100内,可以根据比例调节各特征参数,这样可以解决更换场地后带来的影响。
在这里插入图片描述

差比和

差比和可以很好地使输入变得平滑且能保证数据波动不那么剧烈,能够是系统输入尽可能的平滑。如下图所示系列1为归一化后的左右电感差值,系列二为差比和后的效果,对比可以发现差比和后的波形明显比原始波形波动范围小。
差比和的思路就是两个输入变量的差值比上两个输入变量的和而后再乘以合适的比例即可。
ServoDuty=(LleftV-LrightV)*600/(LleftV+LrightV);
在这里插入图片描述

CPU及程序的抗干扰措施

CPU是计算机的核心。当CPU受到干扰不能按正常状态执行程序时,就会引起计算机控制的混乱,这就是通常所说的程序“跑飞”或“死机”,所以需要采取措施,使CPU在受到干扰的情况下,尽可能无扰地恢复系统正常工作。
注意:尤其是在单片机系统中,应当充分考虑系统的抗干扰性能。
下面是几种常见的针对CPU的抗干扰措施:

复位

对于失控的CPU,最简单的方法是使其复位,程序自动从头开始执行。为完成复位功能,在硬件电路上应设置复位电路。
复位方式有上电复位、人工复位和自动复位三种。

掉电保护

在软件中,应设置掉电保护中断服务程序,该中断为最高优先级的非屏蔽中断,使系统能对掉电作出及时的反应。
首先进行现场保护,把当时的重要状态参数、中间结果,甚至某些片内寄存器的内容一一存入具有后备电池的RAM中。
其次是对有关外设作出妥善处理,如关闭各输入输出口,使外设处于某一非工作状态等。
最后必须在片内RAM的某一个或两个单元存入特定标记的数字,作为掉电标记,然后,进入掉电保护工作状态。

Watchdog技术

当程序“跑飞”到一个临时构成的死循环中时,冗余指令和软件陷阱将不起作用,造成系统完全瘫痪。看门狗技术,可以有效解决这一问题。
当系统运行时,看门狗与CPU同时工作。程序正常运行时,会在规定的时间内由程序向看门狗发复位信号,使定时系统重新开始定时计数,没有输出信号发出;当程序“跑飞”并且其他的措施没有发挥作用时,看门狗便不能在规定的时间内得到复位信号,其输出端会发出信号使CPU系统复位。
代码片

// An highlighted block
int main(void)
{All_Init();while(1){IWDG_Feed();  				//每次运行完毕进行喂狗All_Module_ProDeal();           //所有的动作Usart1_Command_Handle();		//串口控制Display();						//显示函数Key_Action();					//按键操作函数 //保证每次while循环的时间固定,消除程序运行时的时序混乱 		while(1){if(delay_10ms_Arrive)		//定时10ms到达标志位{delay_10ms_Arrive = 0;	//定时10ms到达标志位break;}}}	
}

总结

整个智能车的系列到此也就结束了,欢迎大佬们来批评指正,笔者也已经开始搬砖了,关于八邻域、边沿检测、拟合、曲率这些后面看情况,工作不忙就更,前面有疑问的同学可以私信,但回复可能不会那么的及时,望谅解。也祝愿大家新年新气象,智能车都取得好成绩。

智能车系列文章汇总

智能车浅谈——硬件篇
智能车浅谈——方向控制篇
智能车浅谈——电机控制篇
智能车浅谈——图像篇
智能车浅谈——控制规律篇
智能车浅谈——过程通道篇
智能车浅谈——抗干扰技术硬件篇
智能车浅谈——抗干扰技术软件篇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/16773.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能中RPA、NLP、OCR介绍

1、NLP 自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向。主要研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机、于一体的。因此&#xff0c;这一领域的研究将涉及自然…

最新php在线扒站程序源码分享

介绍&#xff1a; 目前很火的在线扒站程序&#xff0c;免服务器&#xff0c;全站整体无shua新&#xff0c;很友好。 搭建说明&#xff1a; 上传到服务器/虚拟主机即可&#xff0c;无需数据库&#xff0c;仅占180k&#xff0c;ajax.php有能力的修改&#xff0c;index.html看到版…

凭什么国内造不出高端示波器?一起扒一扒示波器的发展史!

我是小麦&#xff0c;一名热爱电子技术的工程师 关注我&#xff0c;一起变得更加优秀&#xff01; 示波器作为电测行业最基本的综合性仪器&#xff0c;设计和制造他所涉及的领域也十分广泛,从半导体到特种材料&#xff0c;从机加工到电子设计无所不涉及。这就需要强大完善的工业…

掌握这些,你也可以轻松扒谱(下)

如果你只想要扒取歌曲的演唱旋律&#xff0c;那只需要看《掌握这些&#xff0c;你也可以轻松扒谱&#xff08;上&#xff09;》这篇文章就可以啦~ 但是如果你需要扒取音乐的伴奏&#xff0c;那就需要观看下方的内容继续学习啦~ 1.练习听分解和弦 如果我们想扒取歌曲的伴奏旋律…

【计算机视觉】pycharm自制一个吉他扒谱软件(附源码)

【计算机视觉】pycharm自制一个吉他扒谱软件&#xff08;附源码&#xff09; 构思起源结果展示吉他音频和图片附件可以从我的git上下载源码 构思起源 作为一个深度吉他爱好者&#xff0c;拥有一个自制的扒谱软件真是梦寐以求的事情&#xff0c;以前扒谱还要手画六线谱&#xf…

在线扒站源码

介绍&#xff1a; 上传就可以用 网盘下载地址&#xff1a; http://kekewl.org/zT7gE9VEwUT 图片&#xff1a;

如果你不会扒谱,来吧,这款软件给你超能力

我大学时期同寝室的一个同学&#xff0c;弹得一手好吉他。最让我们佩服的事&#xff0c;可以把任意一首歌的歌谱扒出来&#xff01;每年联欢会&#xff0c;我们选个歌&#xff0c;他就能很快把谱子扒出来&#xff0c;大家就可以拿着各种乐器开始准备表演节目。这个技能一直让我…

想要快速扒谱?快来掌握这些小技巧吧!

相信喜欢音乐的小伙伴们都遇见过这样的事情&#xff0c;有时候我们听到了一手非常好听的歌曲&#xff0c;自己也想要翻唱它&#xff0c;结果在网上找了半天&#xff0c;也没有找到这首歌曲的谱子&#xff0c;于是我们只能非常遗憾的错过了它。 这时候我们不妨来卷起袖子试试自己…

听音扒谱app_掌握这些,你也可以轻松扒谱(下)

如果你只想要扒取歌曲的演唱旋律&#xff0c;那只需要看《掌握这些&#xff0c;你也可以轻松扒谱(上)》这篇文章就可以啦~ 但是如果你需要扒取音乐的伴奏&#xff0c;那就需要观看下方的内容继续学习啦~ 图片来自EarMaster中文官网 1.练习听分解和弦 如果我们想扒取歌曲的伴奏旋…

AutoGPT 安装指南,使用避坑要点

最近&#xff0c; AIGC 中最火的可能就当属于 AutoGPT 了吧&#xff0c;首先简单介绍一下AutoGPT 背景 AutoGPT 是基于 ChatGPT API 接口开发&#xff0c;项目首推 GPT-4 模型&#xff0c;但 OpenAI 账号 API 只有 gpt-3.5-turo 权限同样也可以使用。 项目在 github 上获取的…

Langchain使用OpenAPI过程中报错openai.error.RateLimitError

Langchain使用OpenAPI过程中报错openai.error.RateLimitError 在使用agent跑demo时突然出现以下情况 最后抛出异常&#xff1a; openai.error.RateLimitError: You exceeded your current quota, please check your plan and billing details.通过查阅官方文档发现原因所在&…

【第二周】卷积神经网络

【第二周】卷积神经网络 学习专知课程《卷积神经网络》&#xff0c;主要内容包括&#xff1a; CNN的基本结构&#xff1a;卷积、池化、全连接典型的网络结构&#xff1a;AlexNet、VGG、GoogleNet、ResNet 1.代码练习 MNIST 数据集分类&#xff1a;构建简单的CNN对 mnist 数…

failed to load response

原因&#xff1a; 因为后端没有把跨域的相关信息写到Header&#xff0c;导致前端无法加载数据。 分析&#xff1a; 1、首先先查看项目中有没有配跨域相关的配置&#xff0c;然后发现有配。 2、这个应该是在执行controller的时候返回才会加上。 3、因为我们项目做了个拦截器…

前端请求failed to load response解决方案

情况是这样的&#xff0c;vue写的一个前端页面&#xff0c;写了一个上传图片的功能&#xff0c;在生产环境上是可以使用的&#xff0c;但在测试环境上不可用&#xff0c;所以开始找原因。 第一步 打开浏览器&#xff0c;查看网页代码&#xff0c;走到network页面开始抓包。 …

任务一 唐诗赏析软件

&#xff08;1&#xff09;TextView控件详解 在Android中&#xff0c;文本框使用TextView表示&#xff0c;作用是在界面上显示文本。TextView提供了大量的XML属性&#xff0c;通过这些属性值的设置可以控制其显示内容的外观。表2-1显示了TextView常见的XML属性说明。TextView的…

若依框架 项目运行报错问题

前端项目启动报错 Syntax Error: TypeError: eslint.CLIEngine is not a constructor stackoverflow上的解决方法 1&#xff09;升级webstorm 到2019版本 2&#xff09;降级eslint 到5 我选择 2) 代码如下 npm install --save-dev eslint5安装报错 1、npm audit fix 2、npm a…

大爆发还是大崩盘?亿万富翁Bankman-Fried解读NFT

iNFTnews.com消息&#xff0c;在接受CNBC采访时&#xff0c;加密衍生品交易所 FTX 的首席执行官 Sam Bankman-Fried 表示NFT几乎比他见过的任何东西都更快地成为主流。他还指出&#xff1a;“快速采用一种新趋势既让人兴奋&#xff0c;也存在风险。” “Visa刚刚宣布他们购买了…

AI工具究竟是帮手还是对手?

本文概要 近日育碧开发了人工智能工具 Ghostwriter&#xff0c;可以一键生成游戏NPC对话。不少游戏开发者担心AI写手工具的出现会让自己“饭碗”不保&#xff0c;但Swanson表示这个工具只是为了提供第一稿的 barks来减少对话生成工作的繁琐度。AI工具究竟是帮手还是对手&#x…

【自然语言处理】【大模型】DeepMind的大模型Gopher

DeepMind的大模型Gopher 《Scaling Language Models: Methods, Analysis & Insights from Training Gopher》 论文&#xff1a;https://arxiv.org/pdf/2112.11446.pdf 相关博客 【自然语言处理】【大模型】CodeGeeX&#xff1a;用于代码生成的多语言预训练模型 【自然语言处…

一文读懂“大语言模型”

1、背景 本文基于谷歌云的官方视频&#xff1a;《Introduction to Large Language Models》 &#xff0c;使用 ChatGPT4 整理而成&#xff0c;希望对大家入门大语言模型有帮助。 本课程主要包括以下 4 方面的内容&#xff1a; 大语言模型的定义描述大语言模型的用例解释提示…