1PPS만 사용하고 외부 "시간" 입력(GPS 없음) 없이 격리된 NTP 서버를 만듭니다.

1PPS만 사용하고 외부 "시간" 입력(GPS 없음) 없이 격리된 NTP 서버를 만듭니다.

나는 이더넷 케이블을 통해 연결된 동일한 학생 AUV의 다른 컴퓨터에 시간을 제공하는 작은 NTP 서버(Chrony)를 갖고 싶습니다. 우리의 주요 관심사는 차량의 여러 부분을 며칠 동안 10ms 미만으로 서로 동기화하는 것입니다.

일부 전자 장치는 1PPS 소스를 통해 직접 동기화하므로 NTP 서버와 1PPS 소스의 동기화를 유지하는 것이 매우 중요합니다.

현실 세계와 동기화되는 '시스템 시간'은 필수는 아니지만, 무료라면 좋을 것 같습니다.

현재 우리는:

  • 1PPS 주파수 소스
  • 시작 시 RTC 읽기 기능이 있는 임베디드 컴퓨터
  • GPS 수신기. 그러나 이상적으로는 GPS가 수중에서 제대로 작동하지 않기 때문에 이 수신기를 신뢰할 수 없습니다.

현재 우리는 1PPS 신호와 GPS 직렬 문자열을 USB-직렬 변환기(FTDI)에 공급합니다. 그런 다음 Chrony의 1PPS 및 GPS 문자열을 올바르게 선택하는 gpsd가 이를 준비합니다. 이것은 효과가 있었고 1PPS 및 GPS와 약 2us의 동기화를 제공했습니다.

기존 설정에는 애플리케이션에 대한 제한 사항이 있습니다.

  1. gpsd는 시간을 초기화하기 위해 유효한 GPS 시간 문자열이 필요하지만 물 속에서는 GPS 수신이 좋지 않고 수중에서는 수신이 불가능하기 때문에 항상 사용할 수 있는 것은 아닙니다.

  2. GPSD는 또한 1pps 인터럽트를 처리하기 위해 연속적인 유효한 문자열이 필요합니다. 배터리를 절약하기 위해 수중에서 GPS 수신기를 비활성화하고 싶지만 여전히 1PPS와 동기화를 유지하려는 경우 이는 주로 문제입니다.

  3. GPS가 손실되거나 GPS 장치가 꺼지면 시스템 시간이 1PPS 소스에서 벗어나기 시작합니다.

나는 "gpsd"가 GPS에 크게 의존한다는 것을 깨달았고, 그래서 잘못된 도구를 사용하고 있었습니다.

질문:

  1. 1PPS를 chrony에 직접 제공할 수 있나요?

    1.1 chrony RTC 이외의 실제 시간 소스를 얻지 않고도 이 1PPS와 시스템 시간을 단독으로 사용할 수 있습니까?

  2. FTDI USB-직렬 변환기 RI 또는 ​​DCD 핀을 사용하여 /dev/pps 소스를 추가하는 방법의 예입니까? 예를 들어, gpsd는 배후에서 작업을 수행하지만 사용하지는 않습니다.

답변1

내 질문은 시행착오를 통해 부분적으로 답변되었습니다.

질문 1.1PPS를 chrony에 직접 제공할 수 있나요?

답: 1Chrony 구성은 PPS를 얻기 위해 두 가지 방법을 사용합니다.

  • gpsd가 저장하는 SHM1(공유 메모리)에서 가져옵니다.
  • /dev/pps 장치에서 직접 가져옵니다.

구성 줄 예시:

refclock SHM 1 refid PPS precision 1e-9
refclock PPS /dev/pps1 refid PPS2 precision 1e-9

대기 시간과 관련된 몇 가지 잠재적인 함정도 다음에서 다루고 있습니다.자주하는 질문

질문: 1.1RTC 이외의 실제 시간 소스를 얻지 않고도 chrony가 이 1PPS와 시스템 시간을 단독으로 사용할 수 있습니까?

답: 1.1예, 다음 줄을 추가하면:

local stratum 10

chrony가 모든 소스를 잃으면 로컬 시계로 돌아갑니다. 이는 또한 /dev/pps 소스만 있고 GPS 데이터가 없는 경우 시간 서버가 계속 만족하는 데 필요한 라인인 것 같습니다.

질문: 2.FTDI USB-직렬 변환기 RI 또는 ​​DCD 핀을 사용하여 /dev/pps 소스를 추가하는 방법의 예입니까? 예를 들어, gpsd는 배후에서 작업을 수행하지만 사용하지는 않습니다.

부분 답변(해결 방법) 2:gpsd는 RI 또는 ​​DCD에서 pps를 받아들이고 타이밍 데이터를 SHM1에 전파합니다. gpsd는 또한 자동으로 가상 /dev/pps1 장치를 생성하고 이를 com 포트에 연결합니다. 이는 gpsd가 내부적으로 사용하는 1pps와 다릅니다!

/dev/pps1에서 ppstest를 사용하면 DCD에 대한 PPS 변환을 볼 수 있지만 RI에 대한 변환은 볼 수 없습니다. RI 또는 ​​DCD를 사용할 때 pps 변환을 표시하려면 com 포트에서 ppscheck를 사용하십시오.

우리는 gpsd가 자체적인 새로운 1PPS 감지 체계를 출시하고 있다고 생각하지만 가상 dev/pps1 포트는 DCD에 하드코딩된 이전 ldattach(라인 규칙)를 사용하고 있습니다.이 게시물을 봤어.

관련 정보