今回は、「電子工作業界」では泣く子も黙る?定番、ULN2003高電圧、高電流ダーリントン・トランジスタ・アレイと28BJ-48ステッパモータ(日本語ではステッピングモータというのは何故?)を取り上げさせていただきます。例によってお楽しみの中華部品キットKuman社K4キットに含まれていたので。
※「部品屋根性」投稿順Indexはこちら
まずはULN2003ですが、これまた定番の型式らしいモータドライバボードに搭載されています。調べるとAmazonあたりでもあちこちで売られている(価格もバラバラに見える)ので、人気者です。複数ソースあるものと思われます。今回使うモータは5Vでも動きますが、電圧が高めの方が尚可。電流も流すし、だいたいモータのようなインダクタンスをバチっとスイッチングすると高電圧が発生する筈。そのための高電圧、高電流、その上クランプダイオード付きのULN2003であります。オリジナルはTIなんでしょうか。でも、大手半導体各社も皆さんセカンドソースをしてらっしゃるみたい。定番中の定番かも。今回K4キットに含まれていたブツをみると、東芝製に見えました。型番といい、ロゴといい東芝。珍しく「ブランド品」使っているじゃん、と思ったのですが、よく見るとちょっと不安になってきました(2024年2月18日追記、東芝製はすでにデスコンです。)上のアイキャッチ画像を御覧ください。別にCHINAの文字に引っかかった分けではありませぬ。東芝さんは中国の組み立て工場を売却してしまったみたいですが、まだ仕事を委託しているのか、この手のICでCHINAが入るパッケージのものがあるようです。東芝のプレスリリース資料にちゃんと写真が出ているのだからアリでしょう。しかしね、パッケージに印刷されている東芝のロゴ、微妙に真ん中の隙間が狭くて、下の棒が曲がってないかい。気のせいか?でもこの間もちょっと見TI、でもそうじゃ無さそうなデバイスあったよな。
ともかくダーリントントランジスタとして動作しているみたい
なので気にしないことにします。一方、ステッパモータ28BYJ-48の方は、K4キット付属のDVD内のデータシートをみるとニュージランドのメーカのものでした。28BYJ-48の名のもとに、各社中国メーカも活躍されているみたいなので、これまた本当にニュージランド製品なのかい(モータにはメーカ名なし)と思ったですが、
まわるからいいか
手元の28BYJ-48を回転軸側からみたところです。一番肝心な、「コードの色」は各種資料にあるものとちゃんと一致したので問題ないでしょう。
とりあえず、Arduinoのサンプルソースコードがキットに付属していたので、それをそのまま、コピペして動かしてみることにいたしました。
しかし、何か変です。#define文で定義されている STEPS の値、1回転するのに必要なステップ数を書き入れる筈ですが、
100
などと書いてあります。でも資料にはモータの1回転は32ステップまたは64ステップ(駆動波形による。今回は32ステップの方)、モータの回転を内部のギアで64分の1に落としているので、
32×64=2048
の筈。また、setSpeed()関数で回転速度(rpm)を指定する筈なのですが、
90
などと書いてあります。資料ではこのモータは5Vでは最大15rpmくらい、電圧あげればも少し早く動くけどね、という感じなのに。また、お手本の結線もArduinoのピンの順番通りかと思いきや中2本の順番を入れ替えてました。
いろいろ疑念はあるものの、K4キットの資料の通りでまず動かしてみました。ちゃんと回ります。結局、stepperインスタンスに渡すSTEPSの値と、setSpeed()で指定する値で決めているのは1ステップのパルスの幅のようです。適当なようでいて、この値の組み合わせは「いい感じ」のパルス幅になっていることがわかりました。試みにこの5倍くらいの周波数になるようにしたら、モータ動きませぬ。設定自体はちゃんと動く値を入れてくれている、と。ただ、現物の仕様と制御コードが違うのも何なので
-
- STEPS は 2048
- Speedは6rpm (つまり1回転=10秒)
としてみました。その状態で、1回転の時間をストップウオッチで測ったら約10秒だったので、とりあえずOK。そして、正の方向に回転しているときに赤のLED、反対方向に回転しているときに緑のLEDが点灯するように細工。そのときのArduinoのコードはこんな感じ。
#include <Stepper.h> #define STEPS (2048) Stepper stepper(STEPS, 8, 9, 10, 11); void setup() { pinMode(7, OUTPUT); pinMode(6, OUTPUT); digitalWrite(7, 0); digitalWrite(6, 0); stepper.setSpeed(6); } void loop() { digitalWrite(7, 1); stepper.step(2048); digitalWrite(7, 0); delay(1000); digitalWrite(6, 1); stepper.step(-2048); digitalWrite(6, 0); delay(1000); }
赤点灯、1周回って消灯、1秒まって、緑点灯、1周反転して消灯、という具合です。ただ、実際にどんな波形が出力されているのか確認したかったので、最近お世話になることが多い
Digilent社Analog Discovery2のロジアナ機能
でArduinoからの出力を観察してみます。そのときの回路の様子がこちら。汚い。。。Arduinoは例によって純正品は大事にしまっておいて、K4キット内の「互換品」を使用。
まずは赤点灯状態のときの波形。真ん中2ピンがボードへ行くときに「交差」しているのですが、ロジアナは公差させずに接続したので見ずらくなりました。順番的には、
DIO0->DIO3ー>DIO1->DIO2
のつもりで見ると、ステッパモータの駆動波形に「見えてきます」。なお、ULN2003は、マイコンからHighをもらったときに、Low出力でモータのコイルから電流を引くのだと思います。
DIO0ー>DIO2ー>DIO1ー>DIO3
ですかね。
とりあえず、回ることは回ったけれど、も少し弄ってみないと。それにちゃんと、モータとULN2003入れて回路図も書いてみよう。また次回?