Darkside(https対応しました) |
2018年12月5日(水) 21:30
走行用モーター制御用のPWMも、期待通りに発振できるようになった。
だが、SPI受信はできない。原因は、どんどん絞られる。遂に、STRB信号が来ていないことに気付いた。
オシロが2チャンネルなので、重要な CLOCK と DATA だけチェックしていた。それは両方とも、正常に来ていた。まさか STRB だけ来ていなかったとは!
MCCの別名定義で、SPI_STRB SPI_CLOCK SPI_DATA と命名してある。
SPI_CLOCK_LAT = 1 とやればクロックがHになる。SPI_DATA_LAT=1 なら、データーがHになる。ところが、SPI_STRB_LAT=1 と記述しても、なぜかSTRBはHにならないのだ。訳が分からない。例えばMCLRのような例外的ピンにSTRBが割り当ててあるなら、そういうこともあるかもしれない。しかし、そうではない。
MCC_Generated Files の記述を見てみると、pin_manager.h が意味不明である。
#define SPI_CLOCK_LAT LATAbits.LATA1
#define SPI_CLOCK_SetHigh() do { LATAbits.LATA1 = 1; } while(0)
SPI_CLOCK_LAT=1 と、SPI_CLOCK_SetHigh() は違うのか?効果を持たない無駄なコーディングが行われているようにしか思えない。
だが結論として、SPI_STRB_LAT に代入していた部分を SPI_STRB_SetHigh() および SPI_STRB_SetLow() に置換すると、STRB信号が出力されるようになった。MCCは正しかったが、LAT に代入しても動かなかったのは、これが初めてである。これまですべて、LAT 代入だけで動いていた。しかし今後は、LAT 代入をやめるのが無難なようだ。
無効コードに見えるがXC8が何か重要なことをやっているのかもしれない。て言うかコンパイラーの最適化が働いたらアウトじゃないのか?
まあいい。MCC_Generated Files 内に記述はしばしば参考にさせて貰っているが、基本的にブラックボックスとして扱う方針だ。内部のコードには絶対に手を加えない。参考にしたコードも、可能である限りは外部で利用しない。MCC任せの部分の独立性を確保し、PICの機種使い分けを容易にする。
こうして遂に、自作プロポでラジコン戦車を走行させられるようになった。まだ砲塔旋回や主砲発射はできないが、走行ラジコンとしては大きな山を越えた。
送信機のスティックを送信機内でAD変換したあと、通信をデジタルデーターで行い、受信側でもモーター制御PICにデジタル転送。PWMのDUTYまでデジタル値のまま処理する。フルデジタル処理。
しかも最後のPWMは分解能16ビット。超低速から最高速までスムーズに操作できるよう、PWMのDUTY比は対数曲線で変化するようになっている。
対数なのは昔からだが、これまではソフトでPWM波形を生成したいたせいで分解能が7ビット以下だった。だから、速度変化の滑らかさはイマイチだった。しかし16ビットPWMになると、対数曲線が俄然威力を発揮する。ハードPWMなのでDUTY100まで、モーターの性能をフルに発揮できるようにもなった。
実際に、ゲームパッドという必ずしも微妙な操作には向かない入力装置で、実にスムーズに速度を制御できると感動的だ。秒速数ミリから秒速数十センチまで、自由自在に操れる。
バッテリーもモーターも以前のままなのに、性能は圧倒的に向上。そして、テレメトリーによるバッテリー電圧や電波強度の確認がもたらす、これまた圧倒的な安心感。
現実世界の兵器においては、「近代化改修」という用語が良く登場する。古い兵器を買い換えるのではなく、改良したりIT化したりして性能を上げることだが、なるほどこういうのが近代化改修か。
調整の結果、PWMのDUTUは1%以下からスタート。また、周波数は30ヘルツで確定。60ヘルツを試したところ、超低速での滑らかさは若干良くなったもののPWMノイズがかなり気になった。戦車という属性を考えたとき、ノイズの基本周波数が30ヘルツと60ヘルツでは、全く違う。30ヘルツが超低速でややぎこちないことも、許容範囲内だ。
ぎこちないと言っても、30センチ四方ぐらいしかない極端に狭い場所で、ミリ単位の位置変更を行うこと・・・ぐらいは楽々と可能。
written by higashino [バトルタンク改造Tiger1] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]
Generated by MySketch GE 1.4.1
Remodelling origin is MySketch 2.7.4