TA7291P とは
TA7291P は、東芝が作っていたモータードライバICです。Arduinoのようなマイコンが出す弱い信号を受け取って、別に用意したモーター用の電源からモーターへ流す電圧を切り替える、いわば「力の中継役」。マイコンのピンはモーターを直接回せるほど電流を流せないので、こういうICを間に挟むんだそうです。
Arduino用とモーター用、電源は分ける
元記事でくり返し念を押されていたのが、電源を2系統に分けること。「ArduinoにVs(モーター電源)の20Vをつなぐと壊れる」、しかも「逆にVsがVrefより低くてもICが壊れる」そうで、読んでいて素直に「こわ…」となりました。いまどきのドライバモジュールは保護回路が入っていることが多いですけど、2015年は配線ミス=即お亡くなり、だったんですね。元記事の慎重さにも納得です。
今回の登場部品は、マイコンの Arduino UNO、モータードライバの TA7291P、速度を決める 可変抵抗器、それに DCモーター。※TA7291P は2026年現在ほぼ生産終了で、流通しているのは在庫品や互換品が中心です。
速度を決めるコードで、つまずく
元記事のスケッチを写していたら、こんな自作関数が出てきました。
int Map(int iIn, int iIn1, int iIn2, int iOut1, int iOut2, ...) {
// 0〜1023 の読み値を -255〜255 の範囲に変換する
}
可変抵抗を回すと 0〜1023 の値が読めるので、それを -255〜255 に変換して、プラスなら正転・マイナスなら逆転、ゼロ付近なら停止、という仕組みです。よく考えられてるなぁ…と感心しつつ、ひとつ引っかかりました。これ、Arduinoに最初から入っている map() 関数では…?
2026年の私なら、ここをこうします
スマホでClaudeに「TA7291Pのこの自作Map関数、いまならどう書く?」と聞いてみたら、5秒でこう返ってきました。
int iMotor = map(analogRead(A0), 0, 1023, -255, 255); iMotor = constrain(iMotor, -255, 255);
標準の map() と constrain() で2行。元記事の自作Map関数、まるごと要らなくなりました。2015年当時のArduinoにも map() はあったはずなので、たぶん「自分で書いたほうが挙動が読めて安心」だったんでしょうね。その気持ちはちょっとわかります。
ドライバICのほうも、今あえて TA7291P を選ぶ理由はそんなになくて、TB6612FNG や DRV8833 のような新しいモジュールなら、1枚でモーター2個ぶん・保護回路つき・配線もぐっと楽になります。キャタピラのラジコンは左右モーター2個構成なので、これ1枚で足りてしまいます。
それでも、おっさんは正しかった
…とさんざん時代差をツッコみましたが、「電源は分ける」「ICを壊さないよう電圧に気をつける」という大原則は、2026年の TB6612FNG でもまったく同じです。部品が新しくなっても、電気の理屈は11年前から1ミリも変わっていないんですよね。次回はいよいよキャタピラ部分。モーターが1個回っただけで、私もちょっとワクワクしてきました。
今回の用語メモ
- モータードライバ:マイコンの弱い信号を合図に、別電源の大きな電流をモーターへ流すための中継IC。
- PWM:電圧をものすごく速くON/OFFして、平均の強さを変える仕組み。モーターの速度調整に使われる。
- map() / constrain():Arduino標準の関数。ある範囲の数値を別の範囲に変換/指定した範囲内に収める。
関連アイテム
- Arduino UNO R4 Minima(Amazonで確認)
- Nature Remo 3(Amazonで確認)
0 件のコメント:
コメントを投稿