DreamerDreamのブログ

夢想家の夢です。〜揚げたてのモヤっとしたものをラフレシアと共に〜

RapberryPiでステッピングモーターを制御する ④制御

今回は実際にラズパイから制御してみます。

前回はGPIOとドライバーとの接続でした。

dreamerdream.hateblo.jp

 

f:id:DreamerDream:20181205154059p:plain

 

適当なpythonコードを書いて制御してみます。

#!/usr/bin/python
#coding:utf-8

import RPi.GPIO as GPIO
import atexit
import time

Dir = 27 #DIRピン設定
Step = 17 #STEPピン設定

def end():  #終了時に呼ぶ
  GPIO.cleanup()  #GPIOの開放

def init():  #GPIO初期化
  GPIO.setmode( GPIO.BCM )  #BCMモード
  GPIO.setup( Dir , GPIO.OUT )  #Dirピンを出力モードへ
  GPIO.setup( Step , GPIO.OUT )  #Stepピンを出力モードへ
  atexit.register( end )  #強制終了時にもGPIO開放するよう設定


def act( dir = 0 , step = 1 , sec = 1): #dir:回転方向、step:ステップ数、sec:秒

  GPIO.output( Dir , dir )  #正逆転セット

  step = step *2  #STEP信号はHiごとに1stepなので2倍にしておく
  sleep = float( sec ) / float( step ) #step間の待ち時間を算出
  for i in range( step ):  #step数繰り返し
    GPIO.output( Step, 1 - GPIO.input( Step ) )  #反転出力
    print GPIO.input( Step ), GPIO.input( Dir )  #動作確認用
    time.sleep( sleep )  #step間の待ち時間


def fwd( step , sec ):  #正転
  act( 0 , step, sec ) #dirだけ決めてact()に投げる

 

def rvs( step , sec ):  #逆転
  act( 1 , step, sec )  #dirだけ決めてact()に投げる

 

def test():  #動作テスト
  for i in range( 3 ):

    for j in range( 10 ):
      fwd( 10 * ( j+1 ) , 1 )
      print j
    for j in range( 10 )[::-1]:
      fwd( 10 * ( j+1 ) , 1 )
      print j

    for j in range( 10 ):
      rvs( 10 * ( j+1 ) , 1 )
      print j
    for j in range( 10 )[::-1]:
      rvs( 10 * ( j+1 ) , 1 )
      print j

 

if __name__=='__main__':
  init()  #初期化
  test()  #動作テスト

 

これを実行すると、画面にSTEPに出力されている信号が01でズラーっと出て来ます。

そして、モーター側はこうなります。


ステッピングモーター動作テスト

当然回ります。はい、モーターですのでね。

このギアードモーターの最短パルスは400/s程度でした。それを超えると脱調という現象が起きて正確な制御が出来なくなります。


ステッピングモーターテスト3(脱調)

 

HDDから取り外したモーターも回してみました。

これは4線全てが内部で繋がっているステッピングモーターで機構が違うのでとりあえず2線だけで繋いでいます。

実際どうやって正常に動かすのかよくわかりませんが、とりあえず動くように繋いでみました。

ばりばり脱調していますが、周波数がピッタリ合うと水を得た魚のように元気に回転します。


HDDモーターテスト1

 

実験の結果、だいたい200/s程度のパルスで安定して回るようです。


HDDモーターテスト2

このように、ステッピングモーターによって特性が全く違うので動かしたいモーターの特性はデータシートが無ければ実験して把握するしかありません。

 

回るだけじゃ面白く無い!

ということで、古いエプソンのスキャナから取り外したステッピングモータ制御の直動機構も動かしてみました。

f:id:DreamerDream:20181205164511p:plain

減速ギアの組まれたこんな立派なモーターです。

 


ステッピングモーターテスト2

固定は面倒なのでテープ固定(笑)すっごい雑だけどちゃんと動いています。これも安定して動くパルス調があります。

この機構をXY軸で組めば単純なプロッタマシンですね。

 

いろいろなモーターの実験をしましたが、実際にモーターを高回転で安定して制御する場合に脱調を起こさないためにはArduinoなどのバックでOSやら何やら動かない単純なマイコン制御の方がコスパが良いでしょう。

ラズパイでPyhtonからだとどうしても正確なタイミングでのGPIO制御には限界があります。

 

このように、モータードライバーを使えば結構単純な回路でステッピングモーターの制御が可能になります。

工作の幅が広がりますのでLチカに飽きたら是非試してみてください。

 

 

作例として ↓この自作3Dスキャナでもステッピングモーターとドライバーを使っています。

dreamerdream.hateblo.jp

dreamerdream.hateblo.jp

 

kampa.me