2. 同步时钟源:GPS/北斗授时原理、PPS秒脉冲信号

各位做过多通道电力采集的同行,应该都遇到过这个问题:明明两个通道测的是同一时刻的电流,结果一对比,相位差了好几度。这锅,多半得让时钟背。

今天咱们就聊聊同步时钟源。说白了,就是怎么让所有采集通道都「看同一个表」。我个人最常用的方案,就是GPS或北斗的授时功能,外加一个PPS秒脉冲信号。

2.1 GPS/北斗授时:天上掉下来的精准时间

GPS和北斗卫星上,都带着原子钟。这些原子钟的精度,能达到纳秒级别。卫星会不停地往下广播时间信息,格式是标准的UTC时间(协调世界时)。

接收机收到信号后,会解算出当前的年、月、日、时、分、秒。这个精度,对于电力采集来说,绰绰有余。

授时原理其实不复杂:

  • 卫星发送时间戳和自身位置
  • 接收机测量信号传播延迟
  • 修正电离层、对流层误差
  • 输出标准时间

我在项目中遇到过一件事:有个现场,GPS天线装在铁皮柜子里,结果死活搜不到星。后来把天线挪到窗外,立马就好了。嗯,天线一定要看得到天,这是常识,但很多人会忽略。

关键点:GPS/北斗授时,提供的是「绝对时间」。也就是几点几分几秒。这个时间,是所有通道对齐的基准。

2.2 PPS秒脉冲:真正的同步利器

光有绝对时间还不够。为什么?因为串口输出时间信息,有延迟。而且延迟还不固定。你想想看,如果两个设备都通过串口读时间,一个延迟了10ms,一个延迟了20ms,那它们的时间基准就差了10ms。

这时候,PPS(Pulse Per Second)就派上用场了。

PPS是什么?

PPS是GPS/北斗接收机输出的一个脉冲信号。每秒输出一个,脉宽通常为100ms或200ms。这个脉冲的上升沿,精确对应着UTC时间的整秒时刻。精度在几十纳秒级别。

说白了,PPS就是一个「秒针跳动」的物理信号。所有设备只要检测到这个上升沿,就知道「现在到了整秒」。然后,设备内部的时钟,就可以被这个脉冲「校准」一下。

我的习惯:在嵌入式系统中,我会把PPS信号接到MCU的外部中断引脚上。每次PPS上升沿触发中断,在中断服务函数里,把本地RTC(实时时钟)的秒数清零或对齐。这样,本地时钟就和卫星时钟同步了。

2.3 如何用PPS实现多通道同步?

假设你有4个采集通道,分布在不同的板卡上。每个板卡都有自己的ADC和本地时钟。怎么让它们同时开始采集?

我的做法是这样的:

  1. 每个板卡都接一个GPS/北斗接收机,获取PPS信号
  2. 所有板卡的PPS信号,都接到同一个中断线上(或者通过差分信号广播)
  3. 在PPS中断里,启动ADC采样
  4. 或者,在PPS中断里,标记一个「采样开始」的全局标志

这样,所有通道的采样起点,误差就在PPS的抖动范围内。一般能做到几十纳秒以内。对于50Hz的工频信号来说,这个误差可以忽略不计。

注意:PPS信号是TTL电平,传输距离有限。如果板卡之间距离较远,建议用RS-485或光纤传输PPS。我曾经因为用了一根10米的普通杜邦线传PPS,结果信号反射得一塌糊涂,中断触发了好几次。后来换成差分信号,问题解决。

2.4 代码示例:STM32上PPS中断处理

这里给一个简单的示例,基于STM32的HAL库。假设PPS接到了PA0引脚,配置为外部中断。

// PPS中断服务函数
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    if(GPIO_Pin == GPIO_PIN_0)
    {
        // 1. 清除RTC秒中断标志(如果有)
        // 2. 将本地RTC的秒数置零
        // 3. 设置一个全局标志,通知主循环开始新一轮采集
        pps_flag = 1;
        
        // 4. 记录PPS到达的精确时间戳(使用定时器捕获)
        //    这个时间戳用于后续的采样点插值对齐
    }
}

// 主循环中
while(1)
{
    if(pps_flag)
    {
        pps_flag = 0;
        // 启动ADC同步采样
        HAL_ADC_Start_DMA(&hadc1, adc_buf, ADC_BUF_LEN);
        // 其他通道同理
    }
}

注意,这里只是最简单的用法。实际项目中,我还会用定时器的输入捕获功能,记录PPS上升沿的精确时刻。这样即使PPS偶尔丢失,也能通过本地时钟推算。

2.5 授时精度对比

授时方式 典型精度 适用场景 成本
GPS授时 ±100ns 室外、开阔环境
北斗授时 ±100ns 亚太地区、抗干扰
GPS+北斗双模 ±50ns 高可靠性要求 中等
IEEE 1588 (PTP) ±1μs 局域网内同步 中等
IRIG-B ±1ms 变电站传统设备

从表中可以看出,GPS/北斗的PPS精度是最高的。对于多通道电力采集来说,这是最可靠的同步方案。

2.6 避坑指南

最后,分享几个我踩过的坑:

  • 天线位置:GPS天线一定要放在室外,正对天空。别放在金属盒子里,也别放在屋檐下。
  • PPS信号抖动:有些便宜的GPS模块,PPS抖动能达到几微秒。选模块时,要看数据手册里的PPS抖动指标。
  • 首次定位时间:冷启动时,GPS可能需要几分钟才能输出有效PPS。系统上电后,要等PPS稳定了再开始采集。
  • 信号隔离:PPS信号进入MCU前,最好加一个光耦或磁耦隔离。防止地环路干扰。

好了,关于GPS/北斗授时和PPS秒脉冲,就聊这么多。下一节,咱们会讲如何把这些同步信号,真正用到ADC采样中去。到时候,我会给出一个完整的同步采集框架。