本文重点讨论自动驾驶中使用比较多的gps+pps+gpsd+chrony+ptpd+gptpd的时间同步方案,本文仅为自己在调试过程中的记录,如有不对地方欢迎讨论:853906167@qq.com
详细方案如下:Tbox端(IMX8系列)的ubxclient接收来自gps(如ublox系列)的GPS时间和PPS信号,Tbox端将接收到gps的NEMA/UBX消息通过udp转发给gpsd,然后chrony在结合gpsd的时间信息还有linux下的pps信息做时间同步和修正,后续Tbox作为server端通过ptpd给自动驾驶算力芯片(如nvida orin/xavier)做时间同步,然后自动驾驶算力芯片在通过gptpd给mcu/lidar等做时间同步,详细的框图如下:

1.PPS信号处理
配置ublox芯片PPS信号输出频率1HZ,实测tbox端pps_in输入信号:

从测试结果来看17次的脉冲信号周期为7.441s+9.564=17.005s,周期精度小于0.001s,精度比较高
linux 打开pps配置:
CONFIG_PPS=y
CONFIG_PPS_DEBUG=n
CONFIG_PPS_CLIENT_KTIMER=n
CONFIG_PPS_CLIENT_LDISC=n
CONFIG_PPS_CLIENT_GPIO=y
note:如果ktimer/ldisc打开注意设备节点可能不一样,kernel log中可以看到具体对应的设备节点,我们这边ktimer/ldisc都没打开,pps_gpio节点是/dev/pps2,后续消除误差需要配置这个节点
dts配置:
pps_ubx{
compatible = "pps-gpio";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pps>;
gpios = <&gpio4 2 GPIO_ACTIVE_HIGH>;
status = "okay";
};
kernel中pps处理相关代码:drivers/pps/clients/pps-gpio.c
linu


2885

被折叠的 条评论
为什么被折叠?



