ステッピングモータードライバ(SLA7078M)を動かしてみます

〔マイコンのトップに戻る〕


前にモータードライバ(L6470)を使い2相バイポーラステッピングモーターを動作させて見ました。
今回、2相ステッピングモーターユニポーラ駆動用 IC SLA7078MPRTを動作させたので忘備録として
残して置きます。

SLA7078MPRTの購入先は、秋月電子通商のこちらで買いました。
・モーター電源は10-44V Logic電源は3.0-5.5V 出力電流は3A
・Clock(パルス)入力駆動に対応(シーケンサーを内蔵)
・μステップ対応品、Full ステップ〜4W1-2 相に対応
・モーター電流を検出する「検出抵抗」を内蔵 (外付け不要)「R品」
・2 相励磁状態モニター出力
・コイルオープン/ショート検知出力 (保護回路内蔵品)「P品」
因みに、こちら(SLA7083MPR)の制御は"Phase入力対応"でA/B相のパルス切り替えを入力するらしい。

SLA7078MPRT(SLA7070Mシリーズ)のデータシートは、こちらを参照して下さい。

ピン配列構成
外形図 左はデータシートの外形図に少し書き
加えました。
図の様にピンピッチ2.54mmが
2列並んでいますが、
互いが少しずれているので1.27mmピッチ基板ですがぁ、
前後のピンピッチが4.5mmなのでぇ..
挿すには少し曲げないとぉ......
蛇の目基板作り人の事も考えて欲しいぞぉ。


IC配置図 でぇ、私は左写真の如く"EIC-801"の
ブレッドボードを2個用意し、お互いの
片側の電源部分を取り外します。
でぇ、取り外したお互いの部分を
少しずらし"SLA7078MPRT"を刺して
実験を行っています。



ICピン
PICピン
記号
機能
1

Out A
A相出力
(モーターの赤色線)
2

3

Out A/
A/相出力
(モーターの緑色線)
4

5

SenseA
A相電流検出
「R」品の為、抵抗を内蔵しているので端子はオープン
6
22(RB1)
Mo
1-2相励磁状態モニター出力(2相励磁モードでは出力されず)
(Clockの1周期毎或いは1ステップ毎にHigh/Low反転出力)
7
14(RC3)
M1
励磁/Sleep2 設定入力
励磁モードを設定(データシート参照)する端子だが、
M1/M2/M3=HighでSleep2モード
8
13(RC2)
M2
9
12(RC1)
M3
10
21(RB0)
Clock
Step Clock 入力
(1周期で1ステップ)
11

VBB
主電源(モーター電源 12V)
12

Gnd 製品 Gnd
13

Ref/Sleep1 制御電流/Sleep1 設定入力
2.0V以上でSleep1モード、0 - 0.45Vでモーター電流の設定
14

VDD Logic 電源 (5.0V)
15

Reset 内部 Logic リセット入力
(Highでリセットなので通常はLow)
16
15(RC4)
CW/CCW シーケンス正転/逆転切替入力
(Highで逆転、Lowで正転)
17
17(RC6)
Sync PWM制御切替入力(2相励磁のタイミングで使用可能)
(Highで同期 PWM 制御、Lowで非同期 PWM 制御 )
18
16(RC5)
Flag コイルオープン/ショート検知出力
(保護回路動作でHigh)
19

SenseB B相電流検出
「R」品の為、抵抗を内蔵しているので端子はオープン
20

Out B/
B/相出力
(モーターの青色線)
21

22

Out B
B相出力
(モーターの黄色線)
23

※ Sleep1/2共に出力は停止なのでモーターはフリーラン状態です、
  Sleep1はClock信号の入力を待ちますが、Sleep2は待ちません Logic 回路は停止します。
※ モーターの線色は、ST-42BYG020用での色線です。

《 配線図 》

実態配線図
"SLA7078MPRT"のドライバは上記で記載している様に、
この配線図の如くブレッドボードに刺さらない事に注意しましょう。
"Ref/Sleep1"の回路はデータシートの様に回路を組んだ方が良さげな気がします。
(今回は、Logic電源4.9Vの10K/1KΩの電源分割なのでぇ電流設定は0.44Vとなります)
LEDは"Flag"保護回路動作確認用です、正常動作で点灯、保護回路動作で消灯です。

《 サンプルプログラムについて 》

↓ここからサンプルプログラムソースファイルをダウンロードして下さい。
7078M.zip

プログラムソースをダウンロードしたら、MPLAB X(v4.10)にてプロジェクトを作成します。
以下のファイルをプロジェクトディレクトリにコピーしてプロジェクトに取込んで下さい。
次にコンパイルPIC書き込みを実行して下さい。
MPLAB(R) XC8 C Compiler Version 1.40コンパイラを使用しています。

ダウンロードファイルを解凍すると下記の様なファイル構成です。
 StepRun.c・・・・・・・本体のサンプルソースプログラム(ステップ指示で動作する)
 ContinuRun.c・・・・本体のサンプルソースプログラム(連続回転指示で動作する)

 コンパイル時は、"StepRun.c"か"ContinuRun.c"の何れか一つを取り込んでコンパイルします。
 尚、CPUのクロックは8MHzを想定しています。

StepRun.c

このプログラムは起動させると1回転(正転方向)して止まります。
使ったモーターは、こちら(ST-42BYG020)で、1回転200Stepの1step1.8°です。
ドライバの励磁設定は、"1-2相励磁(2分割:Mode F固定)"なので、1stepを2分割にした分解能だから、
1回転は400stepとなります。
LEDは、起動させると起動確認で3回点滅します、その後は保護回路が正常なら点灯し、異常で消灯です。
(保護回路が動作するとドライバは出力を停止させます。)

下の図はClock周期は、200Hz時の波形です。
1-2相励磁波形図(1ms)
"Clock"の1周期が1ステップで、"Mo"出力は1周期単位に反転出力ですね。

下は拡大波形図、電流が制御されているのが解りますよね。
1-2相励磁波形図(500us)


ContinuRun.c

このプログラムは起動させると連続で回転(正転方向)し、約10秒後に停止します。

関数の使い方を説明します。

 Mdriver_Set(mode)
  モータードライバの設定を行う処理関数です。
  "Sync"は非同期PWM制御で設定を行っています。
   mode:励磁モードを指定します
       PHACE2_EXCITATION_M8      0   2相励磁(Mode 8固定)
       PHACE2_EXCITATION_MF      1   2相励磁(Mode F固定)
       PHACE12_EXCITATION_M8    2  1-2相励磁(2分割:Mode 8固定)
       PHACE12_EXCITATION_MF    3  1-2相励磁(2分割:Mode F固定)
       PHACE12W_EXCITATION_4    4  W1-2相励磁(4分割)
       PHACE12W_EXCITATION_8    5  2W1-2相励磁(8分割)
       PHACE12W_EXCITATION_16  6  4W1-2相励磁(16分割)
       SLEEP_MODE2                       7  スリープモード2

  例)Mdriver_Set(PHACE12_EXCITATION_M8) ;

 Mdriver_Start(dir,step,frq)
  モータードライバへの回転指示を行う処理関数です。
   dir : 回転方向を指定します
      FORWARD(0)=正転 REVERSE(1)=逆転
   step:回転させるステップ数を指定します
      CONTINUED_ROLL(0)=連続回転
      2相励磁モード(mode=0/1)では指定出来ません、連続回転となります。
   frq : 回転させる速度(周波数:Hz)を指定します(200Hz前後での調整となるでしょう)
      指定周波数が同じでも励磁モード(mode)により速度は変わります。

 Mdriver_Stop(sleep)
  モータードライバへの停止指示を行う処理関数です。
  スリープ解除は、"Mdriver_Set( )"で励磁モードを指定する事で行います。
   sleep : 0=停止後スリーブさせない 1=停止後スリープモードに入る(フリーラン状態)


 PWM_Set()
  PWM(CCP1)の設定を行う処理関数です。
  CCP機能はTimer2を使いCCP1のRB0端子から出力します。

 ans = PWM_Frequency(frequency)
  PWM(CCP1)の出力周波数を設定する処理関数です。
  この関数を呼び出したら、Timer2は停止します、"PWM_Start( )"で開始しましょう。
   frequency : 設定する周波数(Hz)を指定します。(125-8000Hz程)
   ans    : -1=設定不可能な周波数ですよ それ以外は"約100%"のデュティ比を返す

 PWM_Start(duty)
  PWM(CCP1)の出力を開始する処理関数です。
   duty : PWMのデュティ比を指定する(10bit)
      (出力周波数が高くなると10bitでなく6bitとか少なくなって行きます)

 PWM_Stop()
  PWM(CCP1)の出力を停止する処理関数です。

 例)
  int d ;

  PWM_Set() ;
  d = PWM_Frequency(200) ;
  PWM_Start(d/2) ;

《2相励磁の波形》

2相励磁(Mode F固定)モードでClock周波数は"220Hz"の正回転での波形を示します。

回転時の波形です。
電流設定値は0.44V(Logic電源4.9Vの10K/1KΩの電源分割)での波形。
2相励磁(Mode F固定),220Hz回転時

停止時の波形です。(スリープしていないので出力は出ているからトルクは有ります)
2相励磁(Mode F固定),220Hz停止時

停止時の波形(上図)を拡大して見ました。
全体的にA相とB相がLow状態で、A/相とB/相がHigh状態でしょうか、
完全にLow/Highでは無い様ですね。
2相励磁(Mode F固定),220Hz停止時拡大


上は電流設定が0.44Vですが、下は0.1V(Logic電源4.9Vの100K/2.2KΩの電源分割)での波形。
出力電流はこちらの方が少なさそうですね。
なのでぇ、モーターが回転しない場合は、電流設定を上げて見ましょう。
2相励磁(Mode F固定),220Hz,0.1電流設定,回転時

拡大して見た。
2相励磁(Mode F固定),220Hz,0.1電流設定,回転時拡大


《その他》

速度制御がぁ、もう少し低速から高速まで出来たら良いのになぁ。
それとぉ、ピンピッチがぁ....ザンネン...(´ω・`。)
後ぉ、"Clock"信号の周期を数KHzにして欲しい気もします、
低い周波数(Hz)だとCCP機能で作り出せない場合が有るのでぇ。




【きむ茶工房ガレージハウス】
Copyright (C) 2006-2018 Shigehiro Kimura All Rights Reserved.