以前作った、Arduino制御の赤道儀で、タイミング
を正確に、かつマイクロステップ制御をするのに
色々苦労したので、その辺りをちょっともやもや
考える。
ステッピングモータを、PWMでマイクロステップを
単純なDDSファンクションジェネレータ的な処理で
行うと、波形計算で正確なタイミングの処理が
難しくて、色々苦労。
結局DDSファンクションジェネレータを少し変形したり、
浮動小数点の計算桁数を無理やり拡張するような
ロジック組んで、なんとかかんとかしてみたんだけど…
なら、32ビットのmbedだったら?と妄想中。
Arduinoだと、浮動小数点はfloat型しかない(double
もあるけど、内部処理はfloat)ので、計算結果の
精度が足らず、ある程度時間がたつと、マイクロ
ステップの波形の細かさ(滑らかさ)が失われていく
というロジックになっちゃう。
で、mbedなら、最近は互換基板がかなり安くなってるし、
速いし、メモリ大きいし、double型もあるよな、と。
Seeeduino Arch(LPC11U24コア)程度で、double型の
計算って、どのくらいの速度なのかな?と思って、
ちょっとテストプログラム書いてみた。
100000回ループで、1ループ辺り割り算2回行ってみて、
実測すると4秒ほど。1回あたり、0.02ミリ秒(20マイクロ秒)
といったところかな。1000クロックくらいで1回の計算
出来てるのかな?8バイト(64ビット長)のdouble型で。
多分、最適化で端折られてないと思うんだけど。
ちょっと気になるのは、double型からfloat型に書き換えて
実行すると、処理時間は同じくらい、表示されるデータの
桁数同じくらい。どっちも12桁ほどで表示される。約4秒。
(floatは約7桁、doubleは約15桁らしい)
とすると、mbedのfloat型って、内部処理はdouble型なの?
float型じゃぁ、12桁は出力できないよなぁ。
なんにしても、結構処理は速そうなので、double型でも
そんなに処理速度気にする必要なさそう。
そうそう。sprintf使えるの、やっぱ便利だな。
ただ、これだけでも、内部処理がずいぶんメモリ食って
いるみたい。たいしたプログラムじゃないのに、13kBも
プログラムメモリを消費してる。
何と何がこんなにメモリ食うんだろう?sprintf
だけじゃぁないよなあ?Lチカは2kBなんだよな。
http://japanese.engadget.com/2016/09/30/660cc-3-421km-h-fia-200/
HONDAの軽自動車。
こういうの作るのもいいんだけど、こんな直線番長
じゃなく、普通に一般道とかミニサーキット走って
楽しくて、かつ実用性も捨ててないクルマ、作ってよ。
https://twitter.com/BBBcarbot/status/781843483610927104
ドムかな?
http://www.marutsu.co.jp/pc/i/237586/
この、マルツで売ってるコンピュータって、なんだ
ろう?汎用に使えるもの?
https://www.youtube.com/watch?v=AlBPFC41FsM
このArduino制御のプリンタ。形から想像して、
てっきりX-Yプロッタとばかり思ってよく観察して
いると、ドットマトリックスプリンタだったりする。
歯車ぐるぐるしながら仕上がっていくの、なかなか
イイカンジだな。
|
|
|
|
|
|