
专业版
2023电赛B题-基于立创天空星开发板
5.0k
0
0
7
简介
2023年电赛B题《同轴线缆长度与终端负载检测装置》,基于立创开发板天空星STM32F407VET6的方案
简介:2023年电赛B题《同轴线缆长度与终端负载检测装置》,基于立创开发板天空星STM32F407VET6的方案开源协议
:GPL 3.0
创建时间:2024-07-19 22:52:17更新时间:2024-08-14 15:56:12
描述
B站视频:https://www.bilibili.com/video/BV1BjY1evEhP/
一、题目
题目原PDF文件见附件

二、Quick Start 快速复现本项目
-
材料准备
- 嘉立创PCB下单:本项目PCB可以直接下单,无需修改
-
元器件下单
- 器件已经标准化,可以直接点元件下单,但也要稍微检查下
- 本项目在长度测量方案有两种,程序默认使用方案二,可以不下单方案一的相关元件
-
待测线缆、负载
- 同轴线缆建议买RG316,程序标定默认标定参数使用的是这个线缆
- 负载可以买标准的校准用负载,也可以买SMA座+直插电阻、电容,自己焊上去
-
PCB焊接
- 本项目在长度测量方案有两种,程序默认使用方案二,可以不焊接方案一的相关元件
-
程序烧录
- 附件提供 .bin / .hex 文件,可以用 STM32CubeProgrammer 烧录,快速复刻。如果开发本项目,请参考附件《CLion开发STM32环境搭建》搭建开发环境。
-
测试
- 测试负载时,建议在同轴线缆焊接SMA母头,然后把负载焊接在SMA公头上,方便更换负载
三、软硬件设计介绍
本题要求测量同轴线缆长度和终端负载(电阻、电容两种),且先测量长度、再测量负载。下面分别介绍长度、电容、电阻测量方案。
长度测量方案:两种
两种测量方式在 User/user.c 中通过宏定义切换,程序默认使用方案二。
长度测量方案一:TDR时域反射法
硬件方案
题目要求在终端开路的情况下测试长度,此时如果从测量端输入一个短脉冲,脉冲会在终端反射,如下图

本方案使用单片机翻转GPIO的方式产生短脉冲,脉冲宽度如下图所示

单片机的GPIO驱动能力不够强,具体原因是GPIO的内阻较大,而线缆有寄生电容和寄生电阻。寄生电容会构成RC低通系统,会导致脉冲上升时间变长;寄生电阻会导致幅度衰减。
这里使用74AHC1G14作为驱动器,这是个非门芯片。根据数据手册,在3.3V供电时的上升时间大约10ns。

产生的脉冲进入到线缆后,会在线缆终端反射,但幅度会减半甚至更小。例如,如果把3.3V的脉冲输入到线缆,得到的反射脉冲会不足1.65V。这里我们使用TLV3501高速比较器进行脉冲整形,方便进行下一步处理。根据数据手册,TLV3501可达4.5ns传播延迟和1.5ns的上升时间。

下图是反射的原始波形和经过TLV3501整形后的波形。


接下来我们需要测量反射脉冲和激励脉冲的时间差,这里需要非常准确地测量时间差,大概10ns的时间差对应1米。这里使用了TDC-GP22这款芯片测量时间差。TDC-GP22内部通过门电路的延迟来测量微小时间差,可以达到45ps的分辨率,从而达到优于1cm的长度分辨率。
TDC-GP22芯片使用SPI协议来配置芯片,启动测量后会从START和STOP引脚接收脉冲,并根据用户的配置来计算时间差,测量完成后可以通过INTN中断引脚告知单片机,然后通过SPI读出测量结果。
芯片外围电路如下图所示,需要4MHz和32.768kHz两种晶振。4MHz的晶振用于校准逻辑门的延迟(因为逻辑门的延迟容易受到温度影响),32.768kHz晶振用于校准4MHz的晶振(32.768kHz晶振比4MHz晶振更准确)。

程序实现
脉冲发生程序
脉冲通过翻转GPIO电平实现,为了缩短脉冲宽度,程序通过写寄存器实现,代码如下
PULSE_GPIO_Port->BSRR = (uint32_t)PULSE_Pin << 16U; // Reset, 0
PULSE_GPIO_Port->BSRR = PULSE_Pin; // Set, 1
TDC-GP22驱动程序
对TDC-GP22的配置通过SPI协议写寄存器实现的,这个芯片的寄存器较为复杂,具体的功能要查看数据手册来配置,这里简单罗列下本项目的寄存器的配置以及作用。具体配置也可以参考附件内有个Excel表格。
寄存器地址
|
值
|
作用
|
0x80
|
0x009620
|
测量范围1,4M晶振二分频,4M晶振上电后一直起振,自动校准,校准时间为8个32K周期,START、STOP上升沿敏感
|
0x81
|
0x014100
|
时间差的计算方式:STOP1的第一个脉冲 减去 START的第一个脉冲
|
0x82
|
0xE00000
|
开启所有中断源,START、STOP单边沿敏感
|
0x83
|
0x180000
|
几乎全为默认值
|
0x84
|
0x200000
|
全为默认值
|
0x85
|
0x080000
|
关闭噪声单元
|
0x86
|
0x010000
|
测量分辨率从90ps加倍到45ps
|
TDC-GP22与单片机连接引脚如下
单片机引脚
|
TDC-GP22引脚
|
作用
|
PB15
|
MOSI
|
SPI主机发送从机接收
|
PB14
|
MISO
|
SPI主机接收从机发送
|
PB13
|
SCK
|
SPI时钟
|
PB12
|
SSN
|
SPI从机选择,低电平有效
|
PB11
|
INTN
|
TDC中断信号发出,低电平有效
|
PB10
|
RSTN
|
TDC复位,低电平有效
|

程序使用软件SPI配置TDC-GP22,相关程序详见:User/Drivers/tdc.h User/Drivers/tdc.c
其中 TDC_Config() 函数负责配置寄存器,如果你想实现其他测量功能,修改这个函数即可。
如果你修改了引脚配置,或者迁移了单片机平台,请修改 User/Drivers/tdc.c 文件开头的宏定义和函数。
业务代码
长度测量的相关业务代码在 User/getL.h User/getL.c,包含标定参数、单位换算、多次测量取平均等业务逻辑。
建议重新标定以下参数
- 同轴线速度因子:线缆中的光速慢于真空中光速,此项是与真空中光速的比值,一般在70%左右
- 长度补偿:待测线缆长度为0时的补偿,单位厘米
#define SPEED_FACTOR 0.6997f // 同轴线缆速度因子
#define BIAS_LENGTH 23.178f // 长度补偿
长度测量方案二:NE555测电容法
硬件方案
同轴线缆的的寄生电容随长度分布比较稳定,根据数据手册,RG316同轴线缆的寄生电容是 96.45pF/m。

因此可以通过测量电容间接测量同轴线的长度,NE555震荡电路是一种很好的测电容方案。
下图的一种典型的NE555方波发生电路:

其产生的方波频率与电阻、电容大小有关,公式如下:

如果我们固定 电阻 R1 和 R2,把 电容C 换成待测电容,即可通过频率间接测得电容大小,此方案可以达到优于 1pF 的测量精度。
本项目中选择 R1 = 10kΩ,R2 = 1MΩ。
程序实现
单片机使用定时器输入捕获测量外部方波信号,这里选择TIM2,因为TIM2的计数器为32bit,便于处理。
开启中断,GPIO打开下拉电阻。




每次外部信号上升沿到来,会进入中断回调函数,在回调函数内读取定时器的计数值CNT,即可求得外部信号的频率。相关代码在 User/getC.h User/getC.c,相关的标定参数也在其中。
建议重新标定以下参数,可以测量多组数据,通过Excel等工具线性拟合
#define C_K 0.977f // 电容比例补偿,误差来源:NE555谐振电路的电阻值不准确
#define C_BIAS_PF (-13.9f) // 电容补偿,误差来源:装置内寄生电容
电容负载测量方案:NE555谐振法
详见上文:长度测量方案二:NE555测电容法
根据题目要求,是先测长度,后测负载。这里测得的电容实际上是负载和线缆寄生电容的总电容(并联电容),需要减去线缆寄生电容。
如果前面测量长度选择的TDR方案,需要悄悄测量一下线缆的寄生电容。
电阻负载测量方案:简单分压法
测量电容使用简单的分压法,使用一个 51Ω 的电阻进行分压,使用单片机的ADC读取分压值。
这里测得的电容实际上是负载电阻与线缆寄生电阻的总电阻(串联电阻),需要减去线缆寄生电阻,线缆寄生电阻大概是 0.14Ω/m。
相关业务代码在 User/getR.h User/getR.c,标定参数也在其中。
建议重新标定以下参数
#define R_K 0.988f // 电阻比例补偿,误差来源:分压电阻阻值不准确
#define R_BIAS (-0.25f) // 电阻补偿,误差来源:装置内寄生电阻
#define CABLE_R_PER_M 0.14f // 导线寄生电阻,单位:Ω/m
杂项
测量项目切换
使用信号继电器切换:长度测量、电容测量、电阻测量

负载类型判断
1. 先测量电阻,满足范围则输出显示(<1000Ω)
2. 再测量电容,满足范围则输出显示(>10pF)
3. 都不满足则认为开路
OLED显示
使用波特律动OLED库和取模助手:https://led.baud-dance.com/
相关代码在 User/Drivers/oled.h User/Drivers/oled.c User/Drivers/font.h User/Drivers/font.c
本项目的OLED库没有包含全部中文字库,如果你加入了新的汉字,请使用波特律动取模助手,填入font.c
本项目使用12x12点阵字
四、测试效果指标
测量范围、准确度
项目
|
范围
|
准确度
|
长度
|
0cm ~ 100m
|
分辨率0.1cm,误差小于1cm
|
电阻
|
10pF ~ 100nF
|
分辨率0.1pF,误差小于1pF
|
电容
|
0Ω ~ 1000Ω
|
分辨率0.1Ω,误差小于1Ω
|
实际测量数据
长度
实际值
|
装置测量值
|
相对误差
|
1949cm
|
1948.99cm
|
0.00%
|
1550cm
|
1549.73cm
|
0.02%
|
1050cm
|
1049.98cm
|
0.00%
|
190cm
|
189.81cm
|
0.10%
|
90cm
|
90.04cm
|
0.04%
|
50cm
|
49.96cm
|
0.08%
|
30cm
|
30.02cm
|
0.07%
|
20cm
|
19.94cm
|
0.30%
|
10cm
|
10.01cm
|
0.10%
|
电阻
实际值
|
装置测量值
|
相对误差
|
19.9986Ω
|
19.961Ω
|
0.19%
|
9.9751Ω
|
9.964Ω
|
0.11%
|
电容
实际值
|
装置测量值
|
相对误差
|
203.672pF
|
203.15pF
|
0.26%
|
101.381pF
|
101.54pF
|
0.16%
|
设计图

BOM


添加到专辑
0
0
分享
侵权投诉
评论