无线检测计时模块
01 无线检测计时器
一、前言
为了适应明年智能车竞赛室外比赛的要求, 需要设计一个独立计时的电路模块, 放置在车模上。 车模通过外部无线线圈时, 能够得到一个脉冲。 这样便可以对车模运行时间进行计时。 根据前面的实验, 下面利用 音叉晶体制作选频放大电路, 应用 单片机对信号进行采集检测, 并进行计时。 这样便可以得到比赛所需要的车模计时模块。 下面应用电路测试这个计时模块。
二、电路设计
设计实验电路。 核心为单片机STM32F103, 利用LM358对来自 10mH 电感的感应信号进行选频放大。 音叉晶体的谐振频率为 32.768kHz, 信号放大电路在之前已经测试过了。 下面使用单片机通过 ADC 对接收到的震荡信号进行解调。 设计单面电路板。 适合一分钟制板。 一分钟之后得到测试电路板。 焊接之后进行清洗。 这就为接下来的软件开发提供了硬件平台。 下面, 开始对电路板进行初步调试。 确认信号放大解调的功能正常。
**AD\Test\2024\August\SigDetF103.PcbDoc ***
▲ 图1.2.1 电路原理图
▲ 图1.2.2 PCB电路图
三、电路调试
通过弹簧夹子, 将ST-LINK 接入电路板。 下载了由 STM32 CubeMX 生成的程序框架。 现在的程序功能为 LED 闪烁, 验证了单片机可以进行初步调试了。
设置 TIME1 产生 32.768kHz 的中断, 在中断服务函数中, 切换 LED 的状态, 所以, LED信号的频率为 16.3kHz 左右。 中断出现抖动, 这是因为内部 ADC DMA中断引起的程序抖动。 下面利用ADC 检测外部信号的中的 32.768kHz 的震荡信号。
▲ 图1.3.1 LED上的信号波形
四、震荡检测
设置ADC参数, 两个通道的ADC结果通过DMA传输到内存。 关闭 DMA 半传输中断, 这样只有在DMA传输完之后产生中断。 编写DMA 传输中断服务程序, 在中断程序中切换LED状态。 通过测量 LED 频率, 可以知道 DMA采集时间长度。 通过调整 DMA 内存长度, 使得中断频率为 1024。 这样每次 DMA中断时, 内存缓存中保持了 32 个周期信号的ADC采集数据。
测量 LM358 输出的放大后的信号波形。 这是其中一帧ADC Buffer的采集数据。
▲ 图1.4.1 LM358放大后的信号
▲ 图1.4.2 ADC Buffer 中的数据波形
▲ 图1.4.3 在没有外部信号时,采集到的数据
在没有施加外部32kHz 的交变磁场时, 采集到的数据是一些小幅度的脉冲信号。 经过计算, 所得到信号的平均面积为 3左右。 在有信号的时候, 所得到的信号交变分量的平均面积为 250左右, 可以看到, 通过计算采集信号的平均面积, 可以有效的检测到信号是否存在。
使用单片机存储检测到的信号幅度, 这是外部震荡信号的起始时间, 对应幅度上升到 最大, 其中, 对应的时间延迟为 50ms左右。
▲ 图1.4.4 外部脉冲对应的数据
from headm import *
from tsmodule.tsstm32 import *
stm32cmd("CLEAR")
stm32cmd("signal")
time.sleep(2)
stm32cmd("COPY")
strall = clipboard.paste().split("\r\n")
data = strall[1].split(" ")
ddim = [int(s) for s in data if len(s) > 0]
printf(ddim)
dim1 = ddim
plt.plot(dim1, lw=3, label='CH1')
plt.xlabel("N")
plt.ylabel("Data")
plt.grid(True)
plt.tight_layout()
plt.show()
在没有外部交变磁场信号下, 所得到的信号面积非常小。 前面这部分是上电后电路的波动引起的数据变化幅度, 电路平稳之后, 可以看到噪声对应的检测数值非常小。 由此验证了这个检测电路具有非常好信噪比和检测灵敏度。
▲ 图1.4.5 没有信号时对应的测量数据
※ 总 结 ※
本文测试了一款无线检测电路。 使用音叉晶体作为选频器件, 对于10mH 电感接收到的 交变磁场信号进行放大。 使用单片机ADC采集信号, 计算信号的交变幅度。 进而可以获得车模通过交变信号的时刻。 将这个电路进行小型化设计, 通过小型锂电池供电。 便可以用于明年室外组别车模计时应用。
● 相关图表链接: