文章目录

  • 软件抗干扰技术
  • 数字信号的抗干扰措施
    • 数字输入信号软件抗干扰措施
    • 数字输出信号软件抗干扰措施
    • 数字滤波
      • 算术平均值滤波
      • 中值滤波
      • 滑动平均滤波
      • 归一化
      • 差比和
    • 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;}}}
}

总结

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

智能车系列文章汇总

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

智能车浅谈——抗干扰技术软件篇相关推荐

  1. 智能车浅谈——抗干扰技术硬件篇

    文章目录 前言 干扰 什么是干扰 干扰窜入的主要途径 干扰的分类 硬件抗干扰技术 控制系统的电源保护技术 输入/输出传输线的抗干扰措施 I/O接口的抗干扰措施 接地技术 总结 智能车系列文章汇总 前言 ...

  2. 智能车浅谈——手把手让车跑起来(电磁篇)

    文章目录 前言 材料准备 备赛组 车模 硬件 练习组 车模 硬件方案 整车原理 赛道信息获取及转向原理 工字电感 运放模块 转向原理 元素判断 电机及舵机控制原理 代码实现 效果欣赏 总结 17届完赛 ...

  3. 智能车浅谈——硬件篇

    目录 初识小车 硬件系统 1.电源系统 线性电源 开关电源 2.人机交互系统 3.MCU最小系统 4.传感器系统 摄像头 电感 编码器 5.驱动系统 机械结构 17届完赛代码 智能车系列文章汇总 前言 ...

  4. 智能车浅谈——过程通道篇

    文章目录 前言 过程通道 模拟量输入通道 模拟量输出通道 开关量输入/输出通道 小结 模拟信号的调理 信号放大电路 滤波限幅电路 开关量信号调理 信号转换电路 滤波电路 保护电路 触点消抖 光耦隔离 ...

  5. 智能车浅谈——方向控制篇

    文章目录 前言 自动控制理论 人工控制系统 自动控制 方向控制 典型环节对应 典型环节分析 给定环节与给定量 比较环节与偏差量 控制环节与控制量 执行机构 舵机 PWM技术 舵机中值及限幅 转向控制 ...

  6. 智能车浅谈——控制规律篇

    文章目录 前言 计算机控制系统 常用控制规律 PID控制 比例(P)控制器 比例积分(PI)控制器 比例积分微分(PID)控制 位置式PID 增量式PID 数字PID控制算法的改进 PID参数整定 小 ...

  7. 智能车浅谈——电机控制篇

    文章目录 前言 运动控制系统 被控对象 执行机构 控制器 反馈环节 M法测速: T法测速 小结 直流调速系统 桥式可逆PWM变换器 (1)正向运行 (2)反向运行 总结 智能车系列文章汇总 前言 之前 ...

  8. 智能车浅谈——图像篇

    文章目录 前言 认识图像 基本含义 图像类型 数字图像 彩色图像 灰度图像 黑白图像 小结 图像处理 图像压缩 二值化 固定阈值法 大津法 图像降噪(腐蚀) 寻边线 总结 17届完赛代码 17届完赛代 ...

  9. 智能车浅谈 电磁组——环岛处理

    前言 本文为第十七届全国大学生智能车电磁四轮部分经验分享,转载于智能车电磁组--环岛处理,文中如有不妥之处欢迎批评指正. 智能车电磁组--环岛处理 智能车电磁组--环岛处理 一.电感排布 二.圆环思路 ...

最新文章

  1. AI 如何推进全球可持续发展?
  2. USTC English Club Note20211208
  3. 光流 | 基于光流法检测跟踪视频中的汽车
  4. python初始化方法对应的变量是全局变量嘛_在Python中初始化全局变量的正确方法...
  5. Apache Lucene 7.0即将发布!
  6. bzoj1116: [POI2008]CLO
  7. jvm 参数_6个提高性能的JVM参数
  8. linux时间函数详解
  9. 很喜欢VS.NET 2003对条件编译的代码提示
  10. 使用Genymotion Android模拟器无法连接电脑本机的服务器
  11. bzoj 4034: [HAOI2015]树上操作(树链剖分+线段树区间更新)
  12. 经典的出入库算法(C#实现)
  13. ie11安装程序无法继续 因为你的计算机,win7安装不了ie11怎么回事 win7安装不了ie11的解决方案...
  14. cmpp协议对服务器资源消耗大吗,cmpp协议采用什么安全算法 CMPP协议有啥用?
  15. OpenCV-细化算法(thinning algorithm)算法详解——提取二值图的骨架
  16. 安卓手机开机动画修改
  17. MySQL数据库基础操作
  18. 洛谷月赛T2 P6858[深海少女与胖头鱼]题解
  19. android vitamio封装,Android视频框架Vitamio构建自己的通用播放器
  20. PM、RD、FE、UE...等等这些互联网相关的缩写

热门文章

  1. 王者荣耀服务器维护多久结束,王者荣耀健康系统重置时间 时间限制规则详解...
  2. 周边pd是什么意思_偶像练习生张艺兴张pd是什么意思
  3. 最全的网站推广方案(SEO)
  4. 怎么在线给pdf加盖电子公章
  5. 邮箱投递简历,如何正确书写正文和主题?
  6. 「我是为“数据”去的京东」对话京东供应链首席科学家申作军
  7. Angular属性绑定,class绑定,事件绑定,属性样式绑定
  8. 超实用的 IPTV 管理工具,xTeVe 助你定制专属电视频道。
  9. 郑州大学计算机系好请假吗,郑州大学生最让人心碎的请假条:请假期限永远,无法按时返校!...
  10. 微信电脑端【多开问题】+附赠,解决桌面图标变小白块问题