第4章:探头接口与高压开关调试
探头接口这块,说实在的,是彩超系统里最容易出幺蛾子的地方。我调试过不下几十块板子,有一半的故障都跟探头识别或者高压开关有关。今天咱们就把这块掰开揉碎了讲清楚。
4.1 探头识别电路(EEPROM读取)
每个探头里都藏着一颗EEPROM芯片。它存着什么?探头型号、频率、阵元数、出厂校准数据。主机上电后,第一件事就是通过I2C总线去读这颗芯片。
我遇到过最坑的一次,是某款新探头插上去,机器死活不认。查了半天,发现是I2C上拉电阻焊错了,4.7kΩ焊成了47kΩ。信号上升沿慢得像蜗牛,时序直接超限。
4.1.1 硬件连接要点
- I2C总线:SCL和SDA,需要上拉电阻(典型值4.7kΩ)
- 地址线:通常A0/A1/A2接地,7位地址为0x50或0x51
- 写保护:WP引脚接地才能写入,接VCC则只读
4.1.2 读取时序验证
用示波器抓I2C波形,重点看这几个点:
- 起始条件:SCL高电平时,SDA从高变低
- 设备地址+写位:0xA0(7位地址0x50左移1位,最低位为0)
- 字地址:要读取的EEPROM内部地址(如0x00)
- 重复起始条件:SCL高电平时,SDA再次从高变低
- 设备地址+读位:0xA1(最低位为1)
- 数据读取:主机每接收一个字节后发送ACK
- 停止条件:SCL高电平时,SDA从低变高
// 伪代码示例:读取探头EEPROM
uint8_t probe_eeprom_read(uint8_t dev_addr, uint8_t mem_addr) {
uint8_t data;
// 发送起始条件
i2c_start();
// 发送设备地址 + 写位
i2c_send_byte(dev_addr << 1 | 0);
i2c_wait_ack();
// 发送存储器地址
i2c_send_byte(mem_addr);
i2c_wait_ack();
// 发送重复起始条件
i2c_repeated_start();
// 发送设备地址 + 读位
i2c_send_byte(dev_addr << 1 | 1);
i2c_wait_ack();
// 读取一个字节,发送NACK表示结束
data = i2c_read_byte();
i2c_send_nack();
// 发送停止条件
i2c_stop();
return data;
}
4.2 高压开关(HV MUX)驱动波形测试
高压开关负责把发射高压脉冲切换到指定的阵元通道。说白了,就是个高压模拟多路复用器。常用的芯片有HV507、HV256之类的。
嗯,这里要注意:高压开关的驱动信号是低压逻辑电平(3.3V或5V),但输出端要承受±100V的高压。所以驱动波形测试,既要看输入逻辑,也要看输出高压波形。
4.2.1 驱动时序要求
| 参数 | 最小值 | 典型值 | 最大值 | 单位 |
|---|---|---|---|---|
| 数据建立时间 | 50 | 100 | - | ns |
| 数据保持时间 | 50 | 100 | - | ns |
| 时钟高电平宽度 | 100 | 200 | - | ns |
| 时钟低电平宽度 | 100 | 200 | - | ns |
| 输出建立时间 | 1 | 5 | 10 | μs |
我建议用差分探头去测高压输出端。普通探头耐压不够,一测就冒烟。别问我怎么知道的...
4.2.2 波形检查清单
- 时钟信号:频率是否正确?占空比是否50%?有没有过冲?
- 数据信号:建立时间和保持时间是否满足要求?
- 锁存信号:上升沿是否干净?有没有毛刺?
- 输出使能:高电平是否达到VPP?低电平是否接近VNN?
- 通道切换:切换瞬间有没有串扰?相邻通道会不会误触发?
实战经验:有一次我调试128通道的HV MUX,发现第64通道切换时,第63通道会跟着跳一下。查了半天,是PCB布局时数据线走得太近,串扰了。解决办法是在关键信号之间加地线隔离。
4.3 发射/接收保护电路(T/R Switch)验证
T/R开关,说白了就是个高速开关。发射时把高压脉冲送到探头,接收时把微弱的回波信号送到接收前端。这两个状态不能搞混,否则接收前端会被高压打坏。
我见过最惨的一次,是T/R开关的驱动时序反了。发射还没结束,接收通道就打开了。结果接收放大器直接烧穿,板子上一个焦黑的洞。那叫一个心疼。
4.3.1 典型T/R开关结构
常用的T/R开关有两种:
- 二极管桥式:利用二极管的导通/截止特性切换
- FET开关式:用高压MOSFET做开关
二极管桥式结构简单,但插损大。FET开关式插损小,但驱动电路复杂。我个人偏好FET开关式,虽然调试麻烦点,但性能好。
4.3.2 测试方法
测试T/R开关,我一般分三步走:
第一步:静态测试
- 发射模式:探头端对地阻抗应该很低(导通状态)
- 接收模式:探头端对地阻抗应该很高(截止状态)
- 隔离度:发射端到接收端的泄漏信号应小于-60dB
第二步:动态测试
- 用信号源给探头端加一个模拟回波信号(比如5MHz,100mVpp)
- 切换T/R开关,看接收端能否正常输出
- 检查开关切换时间,一般要求小于100ns
第三步:高压测试
- 发射时,在探头端加±80V高压脉冲
- 用示波器看接收端有没有高压泄漏
- 接收端电压应小于±0.5V
// T/R开关控制时序示例
void tr_switch_control(uint8_t mode) {
if (mode == TX_MODE) {
// 发射模式:关闭接收通道,打开发射通道
GPIO_WriteLow(TR_RX_EN); // 接收使能拉低
delay_ns(50); // 等待关断完成
GPIO_WriteHigh(TR_TX_EN); // 发射使能拉高
} else {
// 接收模式:关闭发射通道,打开接收通道
GPIO_WriteLow(TR_TX_EN); // 发射使能拉低
delay_ns(50); // 等待关断完成
GPIO_WriteHigh(TR_RX_EN); // 接收使能拉高
}
}
4.4 整机联调要点
三个模块都调通后,就该联调了。我习惯按这个顺序来:
- 先读EEPROM,确认探头识别正常
- 再测HV MUX,看通道切换是否准确
- 最后测T/R开关,验证发射接收切换
- 全部通过后,上高压做整机测试
记住一个原则:低压先调,高压后上。低压都调不通,上高压就是找烧。
- 双通道示波器(带宽至少200MHz)
- 差分探头(耐压1000V)
- 逻辑分析仪(16通道以上)
- 信号源(双通道,可输出任意波形)
- 万用表(4位半精度)
这些工具缺一不可。别问我为什么知道,都是烧钱烧出来的经验。
好了,探头接口和高压开关这块就讲这么多。下一章咱们聊波束合成器的调试,那才是真正考验耐心的地方。