2017年11月8日水曜日

F4RTCメモ

 微妙に痒いところに手が届かない。
 例えばRTCの動作中は位相をモニタしたい。ということで1Hz出力を有効にする。すると、外部イベントによるタイムスタンプの記録ができなくなる。

 とりあえず、32.768kHzの水晶がそれなりに誤差が大きいらしい。といっても21ppmくらいなので、時計としては十分に高精度。だけどオシロで見るとどんどん位相が動いていく(GPS基準)。

 周期はCALR(キャリブレーションレジスタ)で調整する。CALIBRという似たようなレジスタが有るけど、こっちは互換性のために残している?らしい。約1ppm単位で調整ができる。調整幅が約488ppmを超えると、調整幅が倍になって分解能が4分の1になる。それでも調整しきれない場合は、さらに調整幅が倍になって分解能が4分の1になる。最大2000ppmくらいの範囲で8ppm単位、くらいかな。

 一方、位相の調整は、SHIFTR(シフトレジスタ)で調整する。デフォルトでは1/256秒(約4msec)の分解能で移動できる。
 リファレンスマニュアルによると、最大約30usecの分解能が得られるらしい。ただし「消費電力が増加する場合がある」と書いてある。ま、モーター制御に使ったりするなら誤差のレベルであろう。

 とりあえず、大まかな位相差はシフトで取り除き、それより細かい分解能ではキャリブレーションで移動すると良いかもしれない。
 ただし、キャリブレーション値を変化させたままでコアが停止した場合、そのままずーっと移動し続けてしまう。電源供給断で割り込みがかかるようにして、その後数十msec分の電力をキャパシタに入れておき、ISRの中でキャリブレーション値を戻す、みたいな工夫が必用そう。
 あるいは、シフトレジスタの分解能を限界まで上げてしまうか。これで30usecの精度で位相を合せられる。ただ、原因がわからないが、ジッターが100usecくらいある。なので30usecで合せてもあんまり意味がない。


 ま、とりあえず、今の用途なら50msec程度で十分なので、まずは1PPSから自動で位相を合せられるような処理を作らなければ。

 でも、これでもEXTIとISRを使う方法とか、タイムスタンプトリガを使う方法とか、いろいろやり方がある。
 精度を求めるならタイムスタンプだけど、EXTIだとデバッグが楽。そのあたりは追々。


 デスクトップ機のVS Codeが不調で、ドキュメントのフォーマットができない。症状としては、右クリックメニューが変更・切り取りコピー・貼り付け・コマンドの4個以外表示されない。PCを再起動したり、VS Codeを入れ直したりしてもダメだった。ショートカットキーも反応しないので、右クリックメニュー周りのバグではなく、コンポーネントの読み込みがされてないらしい。しかしショートカットキーリストにはフォーマットとかのキーコンフィグが出てる。

 とりあえずしょうがないので、ノートにリモートデスクトップ接続して、ノートからデスクトップ機のコードを置いてあるフォルダをVS Codeで開いて、ビルドと書き込みはデスクトップ機で、みたいなわけのわからないことになってる(ノートは解像度が低いので開発には向かない/ノートから4k液晶は30pしか出力できない/机の上にそもそも置くスペースがない/etc)。

0 件のコメント:

コメントを投稿