先日液晶表示のタコメーターを作りましたが、液晶ディスプレイが小さいのと昼間はコントラストが低くて見づらかったのでステッピングモーターに置き換えて針を振らせてみました。
まず前回のタコメーターは下の状態。
反射光でもバックライトでも見えるというディスプレイですが、はやりちょっと見づらいのです。
今回のステッピングモーターについて
ステッピングモーターはAmazonで2個¥1940円で購入。
X27-168という型番で、CNCや3Dプリンタで使う様なヤツではなく、下の写真の様にメーター用の軽量のものです。
このモーターはこちらのブログで紹介されていました。
またデーターシートはここで発見しました。
元々付いていた(壊れた)タコメーターと比べるとこんな感じ。電子回路が別に必要だとしてもかなり小さくて済みそうです。
ところでこのステッピングモーター、2相のバイポーラ動作ですがコイルの駆動が5V/20mAで済むのですね。
という事はAtmega328PのArduinoで直接駆動できます。改めてAtmega328Pの絶対最大定格を見たらI/Oピン電流は40mAと書かれています(20mAだと思ってたのでギリのつもりでしたが、実は結構余裕だったのね)。
また通常動作(マイクロステップ等にしない場合)では、1ステップで1/3度回るのでタコメーターの分解能としては十分です。
回路
回路的には先日作った液晶方式からディスプレイを取り外し、ステッピングモーターの配線4本をつないだだけ。
あ、あとパルスを割込みでカウントするため、入力ピンをD5→D2に変更しています(Atmega328PのArduinoで割込みを使うにはD2かD3に入れる必要があるので)。
取り付け
パネルへは新たな穴を開けて直接モーターを取り付けました。
不要になった穴は夜間に光が漏れそうなので裏からプラパテで埋めたのち、表から黒塗りしています。
取り付けにちょうど良いサイズのタッピングビスが手持ちになかったので、モーターの取り付け穴(元々Φ1.85)にタップを立ててM2ネジで取り付けました。
指針は元々付いていたものを使うのですが、軸の太さが元のメーターだと0.8mmに対し、今回のモーターは1mmと太くなります。
そこで指針の軸穴を0.95mmのドリルで拡大したら丁度良くなりました。
因みに0.95mmのドリルは写真のセットに含まれています(Tinyドローンの軸拡大にも時々0.95mmを使うので単品で買っておきたいのですが売っているのを見かけません。通販で買っとけばよいのですが)。
そして一通り接続したところ。。。
プログラム
前回はゲートタイム200mSでパルスをカウントしていましたが、低回転での分解能を改善するため1パルス毎に割込みをかけてArduinoのmicros()時刻からパルス間隔を測定しています。
モーターコイル2本のそれぞれ両端に加える電圧は以下の配列を用意しておき順次切替えています。
// 各ステップの端子状態 int coil1a[]={1,1,0,0,0,0}; int coil1b[]={0,0,0,1,1,0}; int coil2a[]={1,0,0,0,0,1}; int coil2b[]={0,0,1,1,0,0};
動作させてみる・・・
アイドリング時の振れが大きいです。
またキーをOFFした時に0rpmに戻らずその場で止まってしまうのがカッコ悪いですね。
対策
まず振れが大きい問題についてはソフト的にローパスフィルターの処理を強目にしました。
次にキーOFF時の動作ですが、OFFの瞬間に電源が切れてしまうと0に戻せないので、戻すまでの時間分の電力を貯めておく必要があります。なら電解コンデンサでしょうね。
ざっくり計算で10000μF程度をつけたいところですが手持ちにないし大きすぎるので試しに4700μFを、ArduinoNANOのレギュレータに供給している12VとGND間に付けてみました。
・・が、キーOFF時に0rpmには戻りませんね。
でもこれは想定内。単に12VとGND間にコンデンサを繋いだだけではコンデンサに貯めた電荷は車体側にも流れてしまうのであっという間に放電し、タコメーター側に供給する電力は僅かになってしまいます。
これを防ぐため、バイクから供給する12Vとタコメーターの間をダイオードで分離してみます。また電源ON時にガバッと流れるのがイヤなので抵抗とダイオードをパラにつないで下図の様に接続しました。
これでコンデンサの容量を替えて試したところ2200μFでOKですが1000μFだとダメ。よって少し余裕を持たせて3300μFを取り付けました(4700μFの方が安心ですが50V品で大きくてケースに入らないのです)。
実際の配線は下の様なのを作ってギボシ端子接続に割り込ませています。
コンデンサはテープで貼り付けました。この位置ならケース内に納まります。
もう一度動作確認・・・
指針の揺れがかなり納まり、キーOFF時に0rpmに戻る様になりました。
しかし実際に走ってみると、アクセルを開けている間だけまだ揺れがすこし大きいですね。
もう少しローパスフィルターを強めに効かせようと思いますが、またメーターを外すのが面倒なので次回バラす機会があればやろうと思います。
Arduinoのスケッチ
参考に今回のプログラムを載せておきます。