と言っても、茉莉花の歩行の話ではなく……作業進捗
※11/6〜11/10の作業状況
---
送信データのMSBの扱いのバグを直したuart2ppmのファームをPICkit3で書き込んで、モーション制御システムから全サーボを動かしてもKRS-2552側が暴れなくなって「一件落着」と思ったら…
右手側のサーボが数秒間隔でピクピクしてる。ピクつく間隔はランダムで、右腕の姿勢に依存するようなしないような……。
ピクつくサーボをuart2ppm基板の別ポートに挿したり、左手側のuart2ppm基板につないだりして、uart2ppm基板側が悪いことが判明。
試しに右手側のuart2ppm基板だけをモーション制御システムから動かしてみると再現せず。
次に2枚の基板との通信順序を入れ替えてみたら、左手側サーボがピクつくようになったので、「動作順序」に問題がありそう。
もしかして、2枚目のuart2ppm基板との通信データが1枚目の基板の処理を邪魔しているのかも…と推測して、1枚目基板との通信終了後に8msec(サーボ3つ分のPPM信号生成時間)ずらしたところ、ピクつき解消。
おそらく、「受信データチェック処理がPPM生成の最小ループ(1μsec)を越える場合があってPPM出力が安定しない」が原因。
uart2ppm基板の処理は
- データ受信
- 受信結果のOK/NGを返信
- サーボへのPPM信号を順番に生成(2.5msec間隔で3サーボ分ループ)
- 次のデータ受信待ち
という流れになっていて、2.のPPM信号生成中も受信データを見ていて、MSBが1のデータがくると、自分のIDと比較するようになってる。
uart2ppm基板との通信プロトコルは先頭バイトと最終バイトのMSBを1にしているので、2枚目のuart2ppm基板との通信が始まると、1枚目のuart2ppm基板のPPM信号生成ループの途中にMSBが1になったデータを受信して、最小ループ(1μsec)を踏み越えて出力がぶれる……なんじゃないかな…多分。
ICS3.0に合わせるために、UARTライブラリの受信処理にパリティチェックを追加したことで処理時間が増えたのがそもそもの原因なんだろうな……と思うけど。
実は、現状ではPPM信号生成中は自分宛のデータが届いても無視しているので、ID比較処理の存在意義ないし、uart2ppmのプロトコルにはチェックサムを入れているから受信データのパリティチェックも不要だったりする。
でも、修正するの面倒なので8msecずらして不具合を解消する方向で……
……と思いつつ、サーボのコネクタを継ぎ直していたら……uart2ppm基板のZHコネクタが接触不良になった…… orz
ということで、今から、肩に貼り付いているuart2ppm基板を剥がして修理。
先日購入した「はんだシュッ太郎(リンク先 サンハヤト)」の出番でしょうか。
---
PICkit2はきまぐれに動いたり動かなかったりするので、やはりどこか壊れているみたい。
[
☆コメント]
[
△先頭へ]