• Skip to main content
  • Skip to primary sidebar
  • Skip to footer
  • HOME
  • Arduino
    • Arduino初心者編
    • Arduino基礎編
    • Arduino応用編
    • Arduino実践編
  • Raspberry Pi
  • microbit
  • XBee
  • Scratch
  • Contact Us
  • Privacy Policy

STEMSHIP

ものづくりを通して、科学を学ぼう!

現在の場所:ホーム / Raspberry Pi / Raspberry Pi はじめてのラズパイ:ステッピングモータをA4988ドライバで制御する

Raspberry Pi はじめてのラズパイ:ステッピングモータをA4988ドライバで制御する

2020年11月11日 by STEMSHIP コメントを書く

ステッピングモーターの原理

前回の記事で紹介したモーターは、電気エネルギーを回転運動に変換するように作られたものです。シャフトの回転速度は制御しやすいですが、角度にして何度回転させるかという制御や、正確に何回転させるといった制御は難しく、精度を求めるのも難しいという問題があります。

「正確に〇度回転させる」場合や「正確に何回転させる」場合には、ステッピングモーターを使用します。ステッピングモーターは正確な角度で回転させることができ、停止した位置でブレーキをかけておくこともできます。

  • 図1 NEMA17準拠のステッピングモーター
  • 図2 ステッピングモータの原理

こうした回転制御を行うために、ローターの永久磁石とステーターの電磁石が歯車のように細かく作られていて、ローターの磁石とステーターのコイルとは円周上の同じ位置にはなく、わずかにずらして配置されています。

ステーターのコイルのうち一つに電流が流れると、ローターの磁石を引き寄せます。このコイルの電流を切り、隣のコイルに電流を流すと、ローターはコイル1つ分回転します。この角度を「ステップ」と呼びます。

コイルに電流を流すタイミングは正確に制御しなくてはならないため、ステッピングモーターの制御にはステッピングモーター専用のモータードライバーを使用します。「どちらの方向に」「何ステップ」動かすかを指示すれば、自動でステッピングモーターを動かすための信号を生成してくれます。

ステッピングモーターに過負荷がかかると、コイルと永久磁石のブレーキ力ではシャフトの位置を保持することができず、位置がずれてしまうことがあります。ステーターのコイルは通常4つおきに電流を流して使用するため、次のコイルの位置で再び停止しますが、シャフトの現在の位置は正確には分からなくなってしまいます。

ステッピングモーターは比較的安価に製造でき、低コストで高精度な位置決め制御を行えます。近年普及している家庭用の3Dプリンターなどには安価なステッピングモーターがよく用いられます。小型のCNC加工機を製作する場合にも活用できます。

設計はシンプルなものですが、ステッピングモーターのトルクは強力で、ブレーキも強力にかけられるため、精度のよい位置決め制御が可能になります。また、高速回転させても位置決め精度が落ちないのも特徴の一つです。

制御モードとモーターそのものの構造によって回転角度の制度が自動的に決まるため、マイコンなどにシャフトの現在位置をフィードバックする機構がなくとも、高い位置決め精度を長期間にわたって実現することができます。

基準点さえ分かっていれば、どちらの方向に何ステップ動かしたかという情報からシャフトの位置を計算できるからです(基準点からどのくらい移動したかによって現在位置を求める方式を「インクリメンタル」といいます。)。基準点は、例えばモーターを動かしてある位置に到達したときに動作するようにスイッチを設置し、スイッチが押されたらその位置を基準点とする、などの方法で決定します。

ラズパイとA4988の接続方法

Raspberry Piで動作させるには、図3のように接続します。

  • 図3 NEMA17 ステッピングモーターの接続図

ステッピングモーターと、ステッピングモーター専用のモータードライバー(ここではA4988と呼ばれるICを使用したもの)、入力電圧の平滑化用に100μFの電解コンデンサを使用します。使用するステッピングモーターとモータードライバーの仕様に合わせて、電源電圧などは適宜調整してください。

今回使用したモーターはRaspberry Piから供給される電源では動作できないため、別に9Vの電源ユニットを用意します。この9VはRaspberry Piの動作電圧をはるかに超える電圧で、Raspberry Piに入力すると壊れてしまう可能性がありますので、どのピンにも接続してはなりません。

Raspberry Piとモータードライバーは、次の表のように接続します。

モーターの電線とモータードライバーの出力との対応はモーターやモータードライバーの仕様を確認して決めます。

電解コンデンサは極性が決まっているので注意してください。

名前モーター ドライバーRaspberry Pi GPIOブレッドボード
モーター電源VMOT–電源ユニット+極 電解コンデンサ+極
GNDGND–電源ユニット-極 電解コンデンサ-極
モーター12B––
モーター22A––
モーター31A––
モーター41B––
ロジック電源VDD3.3V–
GNDGNDGND–
リセットRST–RSTとSLPを 直接つなぐ
スリープSLP–RSTとSLPを 直接つなぐ
ステップSTEPGPIO 21ピン–
回転方向DIRGPIO20ピン–

サンプルプログラム

以下のpythonプログラムで、ステッピングモーターが動作します。

from time import sleep
import RPi.GPIO as GPIO

direction = 20
step = 21

GPIO.setmode(GPIO.BCM)
GPIO.setup(direction, GPIO.OUT)
GPIO.setup(step, GPIO.OUT)
GPIO.output(direction, 1)

step_count = 200
delay = .001

for x in range(step_count):
    GPIO.output(step, GPIO.HIGH)
    sleep(delay)
    GPIO.output(step, GPIO.LOW)
    sleep(delay)

sleep(.5)
GPIO.output(direction, 0)

for x in range(step_count):
    GPIO.output(step, GPIO.HIGH)
    sleep(delay)
    GPIO.output(step, GPIO.LOW)
    sleep(delay)

GPIO.cleanup()

このプログラムを実行すると、モーターは最初に左に回転し、次に右に回転して停止します。使用するモーターによってどのくらい回転するかは変わってきます。

このプログラムでは200ステップずつ動かしているので、1周200ステップのモーターを使用した場合にはそれぞれ1周ずつ回転します。モータードライバーの「STEP」端子に入力される電圧が「LowからHigh」に切り替わったときに、1ステップ進む動作をします。(信号がLowからHighに切り替わるタイミングを「立ち上がり」、逆にHighからLowに切り替わるタイミングを「立ち下がり」といいます。 こうした信号の切り替わりを総称して「エッジ」と呼びます。)

回転する方向は「DIR」端子の入力がHighかLowかによって決まります。このように、プログラムは非常にシンプルなものになっています。シャフトに粘着テープの「旗」を取り付けると、ステッピングモーターの回転の様子がより分かりやすくなります。

ステッピングモーターを接続したり切り離したりする際は、必ずプログラムの動作を止めてから行ってください。

Filed Under: Raspberry Pi 関連タグ:ステッピングモータ

Reader Interactions

コメントを残す コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。

最初のサイドバー

CONTACT US

  • Facebook
  • Twitter
  • Youtube

More to See

Arduinoベースのセンサノード:XBeeデータ収集ノードの製作

2021年9月27日 By STEMSHIP

Arduinoベースのセンサノード:Arduinoを使った温度センサの作製

2021年9月21日 By STEMSHIP

XBeeモジュールとBMP280センサを使用してデータ収集する

2021年5月31日 By STEMSHIP

XBeeモジュールでMicroPythonを使ってセンサを読み取る

2021年5月24日 By STEMSHIP

XBeeモジュールでセンサを読み取る:センサノードの設定と測定

2021年5月17日 By STEMSHIP

カテゴリー

  • Arduino (44)
    • Arduino初心者編 (15)
    • Arduino基礎編 (11)
    • Arduino実践編 (4)
    • Arduino応用編 (11)
    • Arduino番外編 (3)
  • MakeyMakey (1)
  • microbit (11)
  • Raspberry Pi (13)
  • Scratch (6)
  • STEM教育 (5)
  • XBee (15)
  • ものづくり教育 (2)
  • 子供の教育 (2)
  • 科学 (6)
  • 算数 (5)

Tags

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Footer

最近の投稿

  • Arduinoベースのセンサノード:スケッチ(プログラム)の作製
  • Arduinoベースのセンサノード:XBeeデータ収集ノードの製作
  • Arduinoベースのセンサノード:Arduinoを使った温度センサの作製
  • XBeeモジュールとBMP280センサを使用してデータ収集する
  • XBeeモジュールでMicroPythonを使ってセンサを読み取る

タグ

BLE DCモータ EEPROM ELEGOO ESP32 ESP8266 IoT LCD LED makeymakey MQTT Node-RED scratch STEM教育 WiFi XBee アニメーション オンラインゲーム カメラ クローン ゲーム コスチュームの変更 サーボモータ ステッピングモータ ステートマシン スピーカ タイマー ピンポン ブロック定義 ペン ライントレース ラジコン リスト 分数 割り込み 実験 工作 幼児 当たり判定 温度センサ 無線通信 物理 角度制御 重力 音楽

Search

2023年3月
月 火 水 木 金 土 日
 12345
6789101112
13141516171819
20212223242526
2728293031  
« 10月    

Copyright © 2023 · STEMSHIP.COM