2023.07.05本記事はプロモーションが含まれています。こんにちは、ENGかぴです。ArduinoのDOを使用することでステッピングモーターを操作することができます。ステップごとにDOを切り替えて励磁パターンを生成することでステッピングモーターを時計/反時回りに回転させることができます。本記事ではDO操作でステッピングモーターを回転させる方法とStepperライブラリを使用して回転させる方法で動作確認しています。Arduinoスターターキットに付属していたステッピングモーター(28BYJ-48-W01)及びドライバー基板を接続して動作確認を行います。UNO(以下Arduinoとします。Arduinoのライブラリを使用して動作確認したことをまとめています。関連リンクステッピングモーターを操作するステッピングモーターは回転数を制御するドライバーとセットで使用します。産業用でベルトコンベヤーや水量を調整する弁の開閉に使用されており用途は様々です。ステッピングモーターの励磁方法は電流を増幅して励磁する電流型とドライバーに電圧値を与えてモーターの速度を調整する電圧型があります。28BYJ-48-W01はユニポーラ方式で巻線に対して一方向の電流を流して起動する電流型です。モーターの巻線の電流により励磁しますが、電流をパターンを切り替えて回転磁界を発生させることで軸(ローター)を回転させる仕組みです。テックジムPython入門講座の申込モーターの起動方法ユニポーラ方式での起動方法は、1相励磁、2相励磁、1-2相励磁による励磁によって起動します。これらの励磁方式の特徴について以下にまとめています。1相ずつ順に励磁していくため消費電流は少なくなります。各相に切り替わる際に振動が発生しやすくなります。2相ずつ切り替えるため出力トルクが大きくなりますが消費電流が増えます。1相励磁よりも振動が抑えられるため滑らかな動きとなる。1励磁と2相励磁を交互に繰り返す方式。モーターのステップ角の分解能が基本ステップの1/2になりますが、2相励磁よりもさらに滑らかな動きとなる。本記事ではデータシートに記載されている励磁方式である1-2相励磁の方法でステッピングモーターを駆動します。ステッピングモーターの特性ステッピングモーターの1ステップの操作は1パルスの入力で行います。そのため周波数の単位でHzまたはppsで記載されています。ステッピングモーターを起動する場合は特性曲線に従って起動することが推奨されます。モーターが停止している状態から急速な入力周波数で起動するとスルーイング特性から外れて軸が回転しない同期外れの問題が発生することがあります。モーターを起動は効率よくトルクを取りながら高速回転に遷移させることが推奨されるためスルー領域内(赤線と青線内の領域)に特性が収まるようにステップ周波数を制御します。スターティング特性はステップ数が入力パルスと1対1に対応して起動でき、最大のトルクが発生できる関係を示しています。スルーイング特性はスターティング特性範囲以内で起動して同期回転しているモーターの入力パルスの周波数を徐々に増加した場合、スターティング特性以上の入力周波数に1対1に対応できる最大トルクと入力パルスの関係を示しています。スルー領域は自起動領域から入力パルスの周波数を増加させるもしくは負荷トルクを増加させるとき、モーターが入力パルスと同期を保って応答できる領域です。自起動領域は無負荷状態で、入力パルスに同期して自起動が可能な領域です。この領域から入力パルスの周波数をあげて起動することでトルクを高く得ながら高速回転に移ることができます。frequencyが1000ppsと記載されています。無負荷状態で500pps(2ms)で起動して周波数を上げる場合1000pps(1ms)程度までは安定に動作させることができます。負荷がある場合は高トルクで起動するために500pps以下の入力周波数で起動して徐々に入力周波数をあげて制御します。PR:技術系の通信教育講座ならJTEX励磁のパターンを生成する引用:28BYJ48-W01のデータシート28BYJ-48-W01のデータシートに記載されているステップ数による制御は1-2励磁方式です。ArduinoのDOを増幅した信号で励磁パターンを作ることで回転させることができます。データシートを引用して制御に必要な事項を中心に説明します。5.4極の励磁で1相励磁と2相励磁を切り替えて励磁パターンを作ります。-記号はDOをLOW、記号がない場所についてはHIGHにします。1から8ステップのパターンをDOで制御することで回転磁界を生成しモーターを回転させます。ステップ数1~8をDOのパターンを切り替えて励磁する例は以下の通りとなります。ret;}以下の説明ではユーザーがステッピングモーターの軸側を見た時を基準にして回転方向を決めています。反時計回りの場合はステップ数1~8、時計回りの場合はステップ数8~1を1セットとします。励磁パターンを切り替えるStepMove()関数を実装します。第1引数はステップの番号を指定します。反時計周りの場合は0から7の順で指定します。時計回りの場合は7から0の順で指定します。第2引数は回転方向を指定します。true(1)を指定すると時計回りの励磁パターンでの最終ステップの判断します。frequencyに相当します。frequency(最大応答周波数)の間にスルー領域(モーターが入力信号に応答できる領域)があるためこの区間の範囲内でのパルス(周波数)を調整します。}初期値を10000us(100Hz)から励磁パターンを切り替えます。micros()関数で取得したus経過時間と前回の処理時間との差によって判定して処理を行います。差が比較値以上になった場合な励磁のパターンの切り替えを行います。差が10000の場合は10000us経過したことになるため100Hz毎の処理のタイミングになります。メイン処理1周分の遅れが生じるため厳密に励磁のパターンを切り替える場合はdelayMicroseconds()関数でウェイトを置く方が良いこともあります。セットが終了するごとに比較値を低くすることで、周波数を高くしていきます。例では2セット毎に比較値を変更しています。モーター駆動時は自起動領域でトルクを多く得るため100ppsでスタートし最大で1000ppsまで周波数を高くしながら回転させています。ステップ間隔を調整する比較値を低く設定(周波数が高い)すると脱調(同期外れ)を起こし軸が回転しなくなるため注意が必要です。スポンサーリンクライブラリを使用するArduino環境では標準ライブラリでステッピングモーターを操作するStepperライブラリが実装されています。Stepperライブラリを使用するにあたって必要な事項について説明します。押さえておく必要がある項目は以下の3点です。回転に必要なステップ数(任意の値)1.と2.は使用するモーターの仕様に合わせて指定します。angle)になっています。これは1-2励磁方式の8ステップ(1セット)を8回(64÷8)繰り返すと5.625度回転します。無負荷状態では最大で1ms(1000pps)でステップを切り替えることを考慮すると5.625度回転させるまでの経過時間は約64msになります。ギア比の1/64を考慮すると1周に必要な秒数は64ms×64=4096ms(約4秒)となり、1分当たりでは15回転となります。1回転に必要なステップ数は、5.625度で64ステップ必要であることギア比が1/64であることから64×64=4096ステップになります。Stepperライブラリは2相励磁対応なので4ステップが8回分で5.625/32となり、ギア比の1/64から32×64=2048ステップになります。myStepper.setSpeed(15);}Stepperライブラリを使用するためにStepper.hをインクルードします。Stepperクラスの変数をmyStepper()でインスタンス化します。引数に使用するステッピングモーターの回転情報や励磁パターンを作るDOピンを指定します。第1引数にステッピングモーターの1回転当たりのステップ数を指定します。28BYJ48-W01の1回転当たりのステップ数は2048になります。第2引数から第5引数までは励磁に使用するDOピンを指定します。StepperライブラリではIN1からIN4の順でなく、IN1、IN3、IN2、IN4になるので注意が必要です。StepperクラスのsetSpeed()関数で1分当たりの回転速度を指定します。28BYJ48-W01の1分当たりの回転数は無負荷状態で15回なので引数に15を指定しています。回転速度を遅くする場合は15以下の値を指定します。ステッピングモーターのスルー領域を超えるような速度を指定した場合、同期外れ(脱調)のため回転しなくなります。//反時計回りの場合Stepperクラスのstep()関数でステッピングモーターを操作するステップ数を指定します。引数にステップ数を指定します。28BYJ48-W01の場合2048を指定すると1回転します。正の値を指定すると時計回りに回転し、負の値を指定すると反時計回りに回転します。例では90度回転させるため最大値の2048を4で割った512を指定しています。Stepperライブラリでステッピングモーターを操作する場合、step()関数が処理を占有するためメイン処理1周の時間が長くなります。他の処理が遅延するので注意が必要です。以下は、Stepperライブラリの使用例です。コンパイルして動作していますが、ライブラリの更新により動作しなくなることがあります。}}動作確認で使用している回路図と同様のもので動作します。SW1を押すと時計回りに90度回転し、SW2を押すと反時計回りに90度に回転します。ステッピングモーターを操作している間は処理を占有するためメイン処理が遅延するデメリットはありますが、手早く実装できることやステップ角を正確に制御できるメリットがあります。「書けるが先で、理解が後」を体験しよう!動作確認ステッピングモーターの動作確認回路Arduinoでステッピングモーターを起動する場合、増幅基板を使用してDOの出力電流を増幅してステッピングモーターを励磁します。増幅基板はステッピングモーターとセットになっていることが多く、トランジスタアレイ(ULN2003APGなど)が実装されておりArduinoのDOをトランジスタアレイの入力して増幅します。マイコンのDOをステッピングモーターに直接接続すると出力電流による負荷が大きくなりすぎて発熱しマイコン故障の原因になるので注意が必要です。Arduinoの電源のみではステッピングモーター用の消費電流が供給できないため外部からDC5Vを接続しています。Arduinoの電源とステッピングモーターのGND(ー)を共通に接続を行います。当記事では電源アダプター(AD-D50P100:秋月電子)を使用しています。電源をONし、SW1を長押しするとステッピングモーターは時計回り回転を始め、LED1が点灯/消灯します。SW2を長押しすると反時計回りに回転を始め、LED2が点灯/消灯します。ステッピングモーターの起動時は緩やかに回転し、長押しするにつれて回転速度が速くなり一定速度になることが確認できました。モーターが1周するまでの時間を測定すると約4秒となっていることも確認できました。以下のソースコードはコンパイルして動作確認をしております。コメントなど細かな部分で間違っていたりやライブラリの更新などにより動作しなくなったりする可能性があります。参考としてお使いいただければと思います。IDEのプラグインであるMCCを使用して動作確認したことについてまとめています。マイベスト3年連続1位を獲得した実績を持つWebエンジニア養成プログラミングスクール最後まで、読んでいただきありがとうございました。組み込みエンジニアPICマイコン(PIC12F675)で実現できる機能と解説リンクまとめマイコンのWDT・タイマー・AD変換などの考え方はマイコンの種類を問わず共通です。PIC12F675は小さくて頼りなさそうですが、レジスタの設定方法や各種機能について基礎を学ぶことができます。応用すると製品化にも使えるなど用途は様々です。電気電子部門の試験においてに電動機に関する計算問題が出題されています。同期速度と周波数と極数の関係が分かっていれば簡単に計算することができます。電動機の滑りに関する考え方についてもまとめています。組み込みエンジニア電子回路の設計におすすめなシミュレーションソフトLTspice電子回路の計算は難しいイメージがあるとおもいます。慣れないうちは回路に流れる電流を計算したり消費電力を計算したりすることに苦労をすると思います。電子回路の初心者に向けて回路のシミュレーションができるLTspiceについて紹介します。組み込みエンジニアPICマイコン(PIC16F1827)で外部割込みを使用するPIC16F1827は外部割込み機能(INT)を持っているため外部機器からのパルス信号に応答して処理を行うことができます。IDEのプラグインであるMCCでEXT_INTを実装して動作確認を行いました。XIAO31ESP32-WROOM-32E37TWELITE(トワイライト)26PIC16F182731PIC12F67522ノウハウ(体験談)36趣味と生活29その他6タグオペアンププロフィールENGかぴ当ブログの運営者のENGカピです。組み込みエンジニアとして10年以上の経験を活かしてセンサーモジュール等の動作確認したことをまとめています。広告、アフィリエイト収益で当ブログを運営させていただいております。defined.")}))})()タイトルとURLをコピーしました。