发作品签到
专业版

2023电赛B题-基于立创天空星开发板

工程标签

5.0k
0
0
7

简介

2023年电赛B题《同轴线缆长度与终端负载检测装置》,基于立创开发板天空星STM32F407VET6的方案

简介:2023年电赛B题《同轴线缆长度与终端负载检测装置》,基于立创开发板天空星STM32F407VET6的方案
星火计划2024

开源协议

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 快速复现本项目

  1. 材料准备
    1. 嘉立创PCB下单:本项目PCB可以直接下单,无需修改
    2. 元器件下单
      • 器件已经标准化,可以直接点元件下单,但也要稍微检查下
      • 本项目在长度测量方案有两种,程序默认使用方案二,可以不下单方案一的相关元件
    3. 待测线缆、负载
      • 同轴线缆建议买RG316,程序标定默认标定参数使用的是这个线缆
      • 负载可以买标准的校准用负载,也可以买SMA座+直插电阻、电容,自己焊上去
  2. PCB焊接
    1. 本项目在长度测量方案有两种,程序默认使用方案二,可以不焊接方案一的相关元件
  3. 程序烧录
    1. 附件提供 .bin / .hex 文件,可以用 STM32CubeProgrammer 烧录,快速复刻。如果开发本项目,请参考附件《CLion开发STM32环境搭建》搭建开发环境。
  4. 测试
    1. 测试负载时,建议在同轴线缆焊接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

暂无BOM

附件

序号文件名称下载次数
1
演示视频.mp4
32
2
测量1米线缆.mp4
11
3
测量20米线缆.mp4
10
4
2023电赛B题_基于立创天空星开发板.zip
346
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航