2019年12月19日木曜日

パルス周期

 また!!風邪か!!!!
 もしかして…ドルインフル!?
 最近ボリビアに常駐してるのでNYやDCは行ってないんだよなぁ。
 ジャック・ライアンやジャック・リーチャー、GR FSやGR WL、Division等、トム・クランシーのゲームはかなり好き。HAWXはやったことないな。レインボーはセールで買ったけど好みじゃない。。小説の方はもしかしたら読んだことないかも。

 閑話休題

 今回の風邪は前回とは症状が異なります。前回は鼻水メインでしたが、今回は節々の痛みというか、そういう感じの症状です。鼻水は鼻炎とか普段から症状があるので日常の延長線上という感じですが、DC成分メインの痛みは普段無い症状なので精神的にゴリゴリ削られますね。普段でも稀にインパルス的な強烈な痛みが来ますが、そういうときは諦めて安静にしてれば引いていくけど、継続時間が長い痛みは弱くても辛いです。力積ってやつですね。尖頭電力がデカい単パルスと、省電力な連続波でも、同じようなSNRが得られるという…… 違うか。


 あと、SSD買ってノートPCのOS入れ直しました。最近は全然使ってなかったPCなので遊び半分で。なんかすっげー使いやすくなりました。SSDがすごいのかクリーンインストールがすごいのか。
 ドライバの配布がかなり特殊で、マウスパッドとかオーディオとかが使えなかったんですが、昔から使ってるUSBメモリを漁ったら前回OSを入れたときにクッソ面倒な公式ツールで入手したドライバが出てきました。フォーマットしなくてよかったUSBメモリ!!
 古いノートなので画面解像度が低くて、外部出力も4K非対応なので、開発環境としては使いづらいですが、持ち出して使うような電子工作のデバッグとかには、やはり持ち出せるPCがあると何かと便利です。

***

 さて、スラスタの話。
 今の所、噴射のパルス周期は20Hzに設定しています。1回の噴射コマンドに対して必要な噴射量を行列から計算し、指定されたパルス周期とデューティ比から噴射回数を計算する、という流れ。
 このパルス周期が低いと姿勢の擾乱が大きくなり、周期が高いとバルブ制御の非線形領域に近づいたりバルブ寿命をゴリゴリ削ったりします。
 姿勢の擾乱に関しては、各バルブの噴射時間で角加速度ベクトルを制御しますが、周期が低い場合はいずれかのバルブが開く時間が長くなり、狙った以外の方向への噴射が行われてしまいます。周期を高くすると機体の慣性モーメントによってローパスフィルタのような特性になるため、姿勢の擾乱が小さくなります。
 本物の衛星の場合はパルス周期1Hz程度で吹いているようです(IAの開発時の資料なので、開発用に調整した周期かもしれませんが)。衛星は慣性モーメントが大きくスラスタの推力が比較的小さいので、パルス周期が長くても擾乱は大きくないようです。ホイールでもある程度吸収できますし。昔の放送衛星(GEO)の場合は16秒周期(0.0625Hz)で制御していたりするようです。
 制御周期が2^n Hzの場合(8Hzや0.0625Hz)の場合、他の機器とタイミングを合わせやすくて良いようです。例えばIRUが64Hzで出していて、STTが4Hzで出していて、スラスタが0.25Hzで、といった場合でも、どの組み合わせでも整数比の周期なので間引きや補完に有利です。
 今回の制御はRTOSの1msecを使ってタイミングを作っているので、2^n Hzに設定しようとすると8Hzが上限です。が、ちょっと周期が長いので、今回は2^n Hzではない周期に設定しています。そもそもまだセンサ等と結合してないので間引・補完も関係ないですし。

 マイコンの周波数が168MHzの場合、RTOSのtickを512Hzに設定することが可能です。144MHzの場合、1024Hzに設定することが可能ですが、どうやらFreeRTOSはmax1000Hzっぽので、1024Hzは設定できないかも。
 tickが2^n Hzだとタスク間の同期に便利そうですが、RTOSのtickでタイミングクリティカルな処理をしている可能性もあるので、不用意に触るのはちょっとマズそうですね。特にCMSISのRTOSラッパーはミリ秒で扱うために整数除算を多用してるのでかなりヤバいことになりそうです。1000msec / 512Hz = 1、10msec / 1 = 10ticks、1sec / 512Hz * 10ticks = 19.53125msec、と、10ミリ秒待ってほしいのに20ミリ秒弱のディレイになる、とかありそう。

 RTOSのtickとは別の周期でタスクを動かす、みたいなことって、どうやるのがいいんですかね。タスク間で整数比の周期で位相を同期して優先順位を管理しながら処理してくれると、それはとっても嬉しいなって。
 512Hzでタイマの割り込みをかけてタイミング管理用のタスクを起動して、そいつの中で各タスクのセマフォをtakeする、とか? セマフォを使うより、queueに時間情報ごと渡したほうが便利かも。
 まぁ、そのあたりも追々考えていく必要があります。


 まずは風邪の症状を抜いてから……
 布団にこもってiPad miniでDIGAの録画を消化したりしてます。primeみたいな配信はネットワーク環境の要求がクリティカルですが、DIGAは最初のリストの更新だけできればLAN内で完結できるのでスムーズにストリーミングできるので。流石に数期分溜まったアニメの消化とをやる気力はないですが。。。

0 件のコメント:

コメントを投稿