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和本地时钟。怎么让它们同时开始采集?
我的做法是这样的:
- 每个板卡都接一个GPS/北斗接收机,获取PPS信号
- 所有板卡的PPS信号,都接到同一个中断线上(或者通过差分信号广播)
- 在PPS中断里,启动ADC采样
- 或者,在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采样中去。到时候,我会给出一个完整的同步采集框架。