# 同轴电缆长度与终端负载检测装置
本装置可测量:同轴线缆的长度、终端电阻负载、终端电容负载。
主控使用梁山派开发板,代码开发环境为STM32CubeMX+CLion+OpenOCD。
长度测量采用TDR时域反射法,误差小于0.5cm;电阻负载测量使用分压法,误差小于0.1Ω;电容负载测量使用NE555振荡电路,误差小于1pF。
## 一、题目要求
设计并制作一个同轴电缆长度与终端负载检测装置,如图1所示。待测电缆始端通过电缆连接头与装置连接,电缆终端可开路或接入电阻、电容负载。 设置“长度检测”和“负载检测”两个按键,用以选择和启动相应功能。负载电阻值范围 10Ω\~30Ω 电容值范围 100pF\~300pF。 装置由不大于6V的单电源供电。
![1.png](assets/1.png)
基本要求
1. 10m ≤ 线缆长度 ≤ 20m,终端开路,测量长度,误差不大于 5%
2. 保持长度不变,终端接入电阻或电容负载,正确判断负载类型
发挥部分
1. 10m ≤ 线缆长度 ≤ 20m,终端开路,测量长度,误差不大于 1%
2. 保持长度不变,终端接入电阻或电容负载,正确判断负载类型并测量值,误差不大于 10%
3. 线缆长度 ≤ 1m,测量长度,误差不大于 1%
## 二、技术方案
线缆长度测量使用TDR时域反射法,电阻测量使用分压法,电容测量使用NE555振荡电路。
```mermaid
graph LR;
A(梁山派)
A--->B(单脉冲发生电路)-->F(测量长度)
A--SPI-->C(GP22芯片)-->F
A--ADC-->D(电阻分压电路)-->G(测量电阻)
A--输入捕获-->E(NE555振荡电路)-->H(测量电容)
I(串口屏显示)
F-->I
G-->I
H-->I
```
长度、电阻、电容的测量通过三路信号继电器来切换
![2.png](assets/2.png)
### 1. 长度测量
#### 1.1 原理
长度测量使用TDR时域反射法,其原理是:信号在传输线中阻抗反射变化的位置会发生反射。在本题中,同轴线缆终端开路,开路阻抗为无穷大。信号会在此处发生反射。
因此,我们可以产生一个窄脉冲输入传输线,这个窄脉冲到达传输线末端后会发生反射。如果在起始段放置一个示波器,则会看到两个脉冲。根据两个脉冲的间隔时间,便可求得同轴线缆的长度。设两个脉冲的上升沿间隔为 $T$ , 则线缆长度
$$L = 速度因子 * T * c / 2$$
其中 $c$ 为光速。值得一提的是,同轴线缆中的光速小于真空中的光速,所以需要乘上一个“速度因子”。同轴线缆中这个值一般为69%。
#### 1.2 GP22芯片
接下来就是要解决如何准确测量脉冲时间差 $T$ ,这个值一般很小。对于10米的同轴线缆,这个值的数量级大约在 $100ns$。有一款叫做 TDC-GP22 的芯片可以实现微小时间差的测量。其核心原理是利用了信号通过逻辑门的延迟,并配合晶振进行更长时间的测量。其时间测量分辨率为 $90ps$,这个值对应约9mm的分辨率,但可以通过多次测量取平均来获取更高精度。
![3.png](assets/3.png)
单片机与 GP22 芯片之间使用SPI通信,相关引脚如下:
- SCK:SPI时钟,空闲时钟为低电平,数据在第二个时钟沿
- SO:从机发送、主机接收
- SI:从机接收、主机发送
- SSN:从选,低电平有效
- INT:中断引脚,低电平有效
- RTN:硬复位引脚,低电平有效
SPI读写时序如下:
![4.png](assets/4.png)
使用GP22测量的流程如下:
1. 芯片复位:硬复位为拉低RTN引脚,软复位为SPI发送0x50
2. 复位后配置寄存器决定运行模式,该芯片的寄存器功能较多,具体功能可阅读数据手册。我的配置如下,这个配置可实现:检测start和stop引脚上第一个的脉冲,计算stop-start的时间差。计算完成后会通过IO中断的方式通知单片机。
| 地址 | 寄存器值 |
| ---- | -------- |
| 0x80 | 0x009420 |
| 0x81 | 0x010100 |
| 0x82 | 0xE00000 |
| 0x83 | 0x080000 |
| 0x84 | 0x200000 |
| 0x85 | 0x080000 |
3. 发送 0x70 启动测量。
4. 等待RTN中断引脚变低,表示测量完成。
5. 发送 0xB0 读取测量结果,会收到一个32bit的数据,这是一个定点小数。高16bit为整数部分,低16bit为小数部分。
6. 将读取到的数值除以4MHz(晶振的频率),即可得到测量的结果,单位为秒。
相关代码可查看工程文件中的:`User/tdc.c` 文件,这个文件实现了GP22芯片的驱动(软件SPI)。
#### 1.3 数据处理与标定
GP22芯片测量时间的分辨率仅有 $90ps$,对应长度分辨率约为 $9 mm$ ,已经基本满足题目的要求。我们使用了测量100次取平均的方法,最终精度优于 $5mm$。
对装置的标定也是必不可少的,误差主要的来源是线缆的速度因子不准确。我们使用多种已知长度的线缆进行标定,并拟合曲线,最终测得:
同轴线缆中的光速约为: $2.01546 * 10^8 \ m/s$
速度因子约为: $67.2285 \%$
需要说明的是,不同厂家生产的同轴线缆速度因子所有差异。例如我买来两家10米的线缆,用其中一根标定后,另一根在10米的时候会累计2~3cm的误差。但同一家同一批买来的线缆,速度因子基本一致。
标定的代码位于工程文件的:`User/getL.c` 文件
### 电阻测量
#### 1. 原理
![5.png](assets/5.png)
电阻测量使用分压法,使用定值电阻和同轴线缆串联接入 $3.3V$,通过ADC测量分压计算阻值。
$$\frac{v}{R_x} = \frac{3.3V - v}{R}$$
其中 $R_x$ 为目标电阻。 $v$ 为ADC测量的分压, $R$ 为定值电阻,我们选取的值为 $58.5 Ω$ (LCR测试仪实测值)。
值得注意的是,这里测得的目标电阻为同轴线缆本身的电阻和终端负载的串联电阻。由于同轴线缆电阻分布均匀,可以根据之前求得的长度计算同轴线缆本身的电阻。
#### 2. ADC采集程序
我们使用单片机内部ADC电压,相关代码如下(程序使用HAL库编写):
```c
// 获得单次ADC测量的原始值
uint16_t getADC() {
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1, 50); // 等待转换完成,50为最大等待时间,单位为ms
if (HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC)) {
uint16_t ADC_Value = HAL_ADC_GetValue(&hadc1);
return ADC_Value;
} else {
return 0;
}
}
```
这个函数获取的是ADC测量的原始值,这是一个介于0~4096之间的值。如果使用默认的3.3V参考电压,换算成电压的公式为:
$$v = 3.3 * \frac{value}{4096}$$
其中 $v$ 为换算后的电压 $value$ 为 ADC 的原始值。
相关代码可查看工程文件中的:`User/getR.c` 文件
#### 1.3 数据处理与标定
为了避免偶然误差,我们最初使用了测量100次的平均结果。为了达到最好的效果,我们也进行了充分的标定。
需要标定的项目有三个:
- ADC的测量误差
- 电阻测量的误差
- 线缆的寄生电阻随长度的关系
我们通过大量的数据拟合发现,以上三种均具有很好的线性度,所以最终采用一次函数拟合。
- ADC测量纠正函数,这里发现误差不是很大
$$y = 1.0072 x - 0.0007$$
- 电阻测量纠正函数
$$y = 0.8615 x - 0.1298$$
这里误差较大的原因可能是:分压电阻在焊上之前测量值是 $58.5Ω$,焊上后再测量大概是 $51Ω$,这两个值的比值在 $0.87$ 左右,和上面的 $0.8615$ 很接近。我们猜测是第一次测量的时候接触不是很好,产生了误差。
- 线缆寄生电阻(Ω)随长度(m)的关系
$$y = 0.14x + 0.0328$$
这意味着平均每1米的同轴线缆,会有约 $0.14Ω$ 的寄生电阻。后面的常数项 $0.0328Ω$ 可能是由于接头处电阻导致的。
标定的代码位于工程文件的:`User/getR.c` 文件
### 电容测量
#### 1. 原理
电容测量使
没有合适的资源?快使用搜索试试~ 我知道了~
2023年电赛综合测评B题国一方案
共228个文件
h:72个
obj:38个
c:38个
需积分: 2 7 下载量 195 浏览量
2024-03-30
19:14:21
上传
评论 2
收藏 22.64MB ZIP 举报
温馨提示
本装置可测量:同轴线缆的长度、终端电阻负载、终端电容负载。 主控使用梁山派开发板,代码开发环境为STM32CubeMX+CLion+OpenOCD。 长度测量采用TDR时域反射法,误差小于0.5cm;电阻负载测量使用分压法,误差小于0.1Ω;电容负载测量使用NE555振荡电路,误差小于1pF。 一、题目要求 设计并制作一个同轴电缆长度与终端负载检测装置,如图1所示。待测电缆始端通过电缆连接头与装置连接,电缆终端可开路或接入电阻、电容负载。 设置“长度检测”和“负载检测”两个按键,用以选择和启动相应功能。负载电阻值范围 10Ω~30Ω 电容值范围 100pF~300pF。 装置由不大于6V的单电源供电。 基本要求 10m ≤ 线缆长度 ≤ 20m,终端开路,测量长度,误差不大于 5% 保持长度不变,终端接入电阻或电容负载,正确判断负载类型 发挥部分 10m ≤ 线缆长度 ≤ 20m,终端开路,测量长度,误差不大于 1% 保持长度不变,终端接入电阻或电容负载,正确判断负载类型并测量值,误差不大于 10% 线缆长度 ≤ 1m,测量长度,误差不大于 1%
资源推荐
资源详情
资源评论
收起资源包目录
2023年电赛综合测评B题国一方案 (228个子文件)
CableMeasure.bin 43KB
CMakeDetermineCompilerABI_CXX.bin 2KB
CMakeDetermineCompilerABI_C.bin 2KB
stm32f4xx_hal_tim.c 238KB
stm32f4xx_hal_rcc_ex.c 152KB
stm32f4xx_hal_uart.c 129KB
stm32f4xx_hal_tim_ex.c 80KB
stm32f4xx_hal_adc.c 76KB
stm32f4xx_hal_flash_ex.c 49KB
stm32f4xx_ll_adc.c 42KB
stm32f4xx_hal_rcc.c 41KB
stm32f4xx_hal_adc_ex.c 40KB
stm32f4xx_hal_dma.c 39KB
system_stm32f4xx.c 26KB
CMakeCCompilerId.c 26KB
stm32f4xx_hal_flash.c 23KB
stm32f4xx_hal_pwr_ex.c 22KB
stm32f4xx_hal_pwr.c 20KB
stm32f4xx_hal.c 19KB
stm32f4xx_hal_gpio.c 18KB
stm32f4xx_hal_cortex.c 18KB
stm32f4xx_hal_exti.c 15KB
stm32f4xx_hal_dma_ex.c 10KB
tdc.c 7KB
stm32f4xx_hal_flash_ramfunc.c 6KB
stm32f4xx_it.c 5KB
main.c 5KB
usart.c 5KB
gpio.c 4KB
user.c 4KB
adc.c 3KB
syscalls.c 3KB
sysmem.c 3KB
tim.c 3KB
stm32f4xx_hal_msp.c 2KB
getC.c 2KB
getR.c 2KB
getL.c 1KB
tick.c 957B
display.c 720B
printf.c 367B
cache-v2 0B
stm32f429disc1.cfg 301B
cmake.check_cache 85B
CMakeCXXCompiler.cmake 6KB
CMakeCCompiler.cmake 3KB
cmake_install.cmake 2KB
CMakeASMCompiler.cmake 800B
CMakeSystem.cmake 356B
cmakeFiles-v1 0B
codemodel-v2 0B
CMakeCXXCompilerId.cpp 26KB
.cproject 24KB
CableMeasure.elf 424KB
.gitignore 182B
stm32f429xx.h 1.4MB
stm32f4xx_hal_rcc_ex.h 423KB
stm32f4xx_ll_rcc.h 333KB
stm32f4xx_ll_adc.h 279KB
stm32_hal_legacy.h 215KB
stm32f4xx_ll_tim.h 170KB
core_cm33.h 169KB
core_armv8mml.h 162KB
core_cm7.h 142KB
stm32f4xx_hal_tim.h 119KB
core_cm4.h 119KB
core_cm3.h 107KB
core_sc300.h 106KB
stm32f4xx_ll_dma.h 105KB
core_cm23.h 100KB
stm32f4xx_ll_bus.h 97KB
stm32f4xx_ll_usart.h 95KB
core_armv8mbl.h 94KB
stm32f4xx_hal_gpio_ex.h 79KB
stm32f4xx_hal_rcc.h 72KB
stm32f4xx_ll_system.h 69KB
stm32f4xx_hal_flash_ex.h 63KB
cmsis_gcc.h 59KB
cmsis_armclang.h 53KB
core_cm0plus.h 48KB
core_sc000.h 45KB
stm32f4xx_hal_adc.h 45KB
stm32f4xx_hal_uart.h 43KB
core_cm1.h 41KB
core_cm0.h 40KB
stm32f4xx_hal_dma.h 37KB
stm32f4xx_ll_gpio.h 37KB
stm32f4xx_ll_exti.h 33KB
stm32f4xx_ll_pwr.h 31KB
cmsis_iccarm.h 27KB
cmsis_armcc.h 27KB
stm32f4xx_hal_adc_ex.h 25KB
stm32f4xx_ll_cortex.h 24KB
stm32f4xx_hal_conf.h 19KB
stm32f4xx_hal_cortex.h 17KB
stm32f4xx_hal_tim_ex.h 16KB
stm32f4xx_hal_pwr_ex.h 16KB
stm32f4xx_hal_exti.h 14KB
stm32f4xx_hal_flash.h 14KB
stm32f4xx_hal_pwr.h 14KB
共 228 条
- 1
- 2
- 3
资源评论
进击的代码家
- 粉丝: 2204
- 资源: 203
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功