第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则只读
注意:探头接口的I2C线一定要加ESD保护。我曾经因为没加TVS管,一把静电打过去,整排探头的EEPROM全挂了。维修成本够买两台示波器。

4.1.2 读取时序验证

用示波器抓I2C波形,重点看这几个点:

  1. 起始条件:SCL高电平时,SDA从高变低
  2. 设备地址+写位:0xA0(7位地址0x50左移1位,最低位为0)
  3. 字地址:要读取的EEPROM内部地址(如0x00)
  4. 重复起始条件:SCL高电平时,SDA再次从高变低
  5. 设备地址+读位:0xA1(最低位为1)
  6. 数据读取:主机每接收一个字节后发送ACK
  7. 停止条件: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;
}
调试技巧:我习惯用逻辑分析仪抓I2C总线,比示波器方便得多。设置触发条件为设备地址0xA0,一抓一个准。如果看到SCK时钟有毛刺,八成是信号完整性出了问题,检查一下走线长度和终端匹配。

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开关有两种:

  1. 二极管桥式:利用二极管的导通/截止特性切换
  2. 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);   // 接收使能拉高
    }
}
致命陷阱:发射和接收使能信号之间一定要加死区时间。我曾经图省事,把死区时间设成0,结果发射还没关完就开接收,高压直接灌进接收通道。那一次烧了4块接收板,教训深刻。

4.4 整机联调要点

三个模块都调通后,就该联调了。我习惯按这个顺序来:

  1. 先读EEPROM,确认探头识别正常
  2. 再测HV MUX,看通道切换是否准确
  3. 最后测T/R开关,验证发射接收切换
  4. 全部通过后,上高压做整机测试

记住一个原则:低压先调,高压后上。低压都调不通,上高压就是找烧。

我的调试工具箱:
  • 双通道示波器(带宽至少200MHz)
  • 差分探头(耐压1000V)
  • 逻辑分析仪(16通道以上)
  • 信号源(双通道,可输出任意波形)
  • 万用表(4位半精度)

这些工具缺一不可。别问我为什么知道,都是烧钱烧出来的经验。

好了,探头接口和高压开关这块就讲这么多。下一章咱们聊波束合成器的调试,那才是真正考验耐心的地方。