▌01
1.背景介绍
在 ESP32检测调制激光信号程序优化 以及 测试ESP32S基本模块的功能,并验证是否可以应用在AI智能车竞赛检测激光信号中 中测试了 ESP32串口转WiFi双天线ESP32-S模组 用于 全国大学生智能车竞赛 中的 室内AI视觉组裁判功能。
在 ESP32检测调制激光信号程序优化 中测试了ESP32对于调制激光信号检测方案的性能。现在还生下了使用 传统比赛系统的线圈感应方式 来检测车模在AI视觉组动物标靶前的停留时间(需要停留3秒钟)。
▲ 赛道上目标靶位的检测方式
2.检测方案
(1)参考方案
根据 信标组裁判系统原理与实现 给出的电磁线圈放大方案,它是对于检测线圈给出的感应电动势进行放大之后送入单片机进行检测。
▲ 传统电磁线圈检测放大器方案
(2)方案修改
【Ⅰ.改变偏置电压】
为了 适应ESP32的AD输入通道(衰减6DB,检测范围 0 ~ 2V)电压范围的需要。将上面的电路中的进行修改,分别修改为:
的电阻值:
这样输出信号的直流电压为1V,是ESP32的AD的检测范围的中间值。
【Ⅱ.增加放大通道】
由于需要检测车模进入以及离开的两个时间,因此将原本双线圈串联模式修改成单独检测模式,这样便可以比较精确进行判断时间间隔了。
将前面的线圈放大LMV321修改成LMV358,整个的线圈放大通道修改成两路。
▌02
1.电路设计1
如下为实验电路SCH:
▲ 实验电路SCH
下面是 一分钟制版法 所使用的测试电路板PCB图。
▲ 快速制版设计的单面PCB
2.电路板的焊接与调试
下面是焊接后的电路板。
▲ 焊接后的电路板
(1)初步调试
工作电压为3.3V,输入线圈撤离。
通道1:静态电压:
分压电压:1.0964V
输出电压:0.652V
通道2:静态电压:
分压电压:1.0937V
输出电压:0.674V
上述静态输出电压与PIN+的分压之间相差较大,这主要是因为对应的反馈电阻(10M)太大的原因。将106电阻修改成105(1M),输出电压提升到1.04V左右。
但是,对于1M,放大倍数太小了,折中一下,将电阻修改成5.1M。输出的静态电压变为0.8~0.9V 之间。
(2)增加线圈
线圈基本参数:
串联电阻:18.85Ω
电感:1.778mH
▲ 磁铁通过感应线圈后引起的输出信号的变化
▌03
1.采集到的信号波形
(1)实验电路板
使用ESP32模块采集有放大信号输出的两路感应信号。
▲ ESP32 测试版测试感应信号
(2)采集波形
使用相同的采样率,对于输入到GPIO34,GPIO35两个通道的信号进行AD转换,形成采样后的数据波形。可以看到其中存在着明显的50Hz的干扰(0.5秒内,有25个周期)信号。
▲ 采集到的两路信号波形
(3)实验代码
#------------------------------------------------------------
adc1 = ADC(Pin(36))
adc2 = ADC(Pin(39))
adc3 = ADC(Pin(34))
adc4 = ADC(Pin(35))
adc1.atten(ADC.ATTN_6DB)
adc2.atten(ADC.ATTN_6DB)
adc3.atten(ADC.ATTN_6DB)
adc4.atten(ADC.ATTN_6DB)
SAMPLE_NUM = const(500)
AVERAGE_NUM = 16
ad1dim = [0] * SAMPLE_NUM
ad2dim = [0] * SAMPLE_NUM
ad3dim = [0] * SAMPLE_NUM
ad4dim = [0] * SAMPLE_NUM
sample_point = 0
stop_flag = 0
def ADC4Sample(_):
global ad1dim,ad2dim,ad3dim,ad4dim
global sample_point
global adc1,adc2,adc3
global stop_flag
ad1dim[sample_point] = adc1.read()
ad2dim[sample_point] = adc2.read()
ad3dim[sample_point] = adc3.read()
ad4dim[sample_point] = adc4.read()
sample_point += 1
if sample_point >= SAMPLE_NUM:
sample_point = 0
#------------------------------------------------------------
SAMPLE_PERIOD = 1
time0 = Timer(0)
time0.init(period=SAMPLE_PERIOD, mode=Timer.PERIODIC, callback=ADC4Sample)
2.数据滤波
由于存在的干扰为周期(50Hz及其高阶谐波)对于采集到的数据进行平滑滤波。选择平滑数据的窗口为20ms,也就是20个数据取其平均值,这样就可以将50Hz对应的周期滤除。
▲ 使用20ms窗口平滑后的数据
filter1 = array([1/20]*20)
fdata1 = convolve(data1,filter1, 'validate')
fdata2 = convolve(data2,filter1, 'validate')
平滑滤波效果:
平滑前两个通道数据方差分别为: 8614, 6085
平滑后两个通道数据方差分别为:14.4, 11.26
▲ 使用40ms时间窗口平滑滤波后的数据
使用40ms时间窗口平滑滤波:
通道一的数据方差:7.94
通道二的数据方差:4.999
▲ 使用100ms时间窗口平滑滤波后的数据
使用100ms时间窗口平滑滤波:
通道一的数据方差:3.12
通道二的数据方差:1.36
下图是使用50ms对应的时间窗口进行平滑滤波。
▲ 使用50ms时间窗口平滑滤波后的数据
使用50ms时间窗口平滑滤波:
通道一的数据方差:143.9
通道二的数据方差:99.6
由此可以表面,对于周期造成去除的最好的方法就是采用周期噪声的周数倍数时间平滑。
3.有磁铁经过时采集到的信号波形
(1)原始信号波形
▲ 带有磁铁经过采集数据波形
(2)采用40ms平滑窗口滤波后的波形