PSMC機能でステッピングモータを動かしてみます

〔PICの動かせ方入門に戻る〕


以前こちらでPICを使いユニ ポーラタイプのステッピングモータを動作させました、
この時は、2相励磁方式の制御はパルスを作るのに"__delay_us"関数を使ったソフトウェアでした、
今回は、PSMCモジュールを使って2相励磁方式のパルスを生成 させモータを回転させて見たいと思います
又、以前使ったモータ(SPG27-1702)は販売終了なので、
今回はこちら(ST-42BYG020) を使います、1回転(360度)は200ステップ(1step 1.8度)です。

PSMC機能を使った2相励磁方式波形の説明と作り方は、まずこちらを読みましょう。

《 配線図1 》

PICピン構成図左図が、使用するPICピンの構成図です。
電源はPIC側が5V、モータ側が9Vです。

PSMCモジュールは、
PSMC2PSMC3を使います。

RA1にスイッチ(SW)を配線、
プルアップ抵抗はPIC内蔵を利用します。


RB0に外部ピン割込み(IOC)を配線、これはRC5から出力される波形を入力しています。
何ステップ分出力したかを知る為に、波形の立上がり/立下がりエッジをカウントします。
なのでぇ、2ステップ単位のカウントとなります。
RC5/RC6の2ピンを合成し入力すれば、1ステップ単位に出来そうだがぁ、未実験。

1回路分の図これが1回路分です、
全部で4回路配線します。
RC6 - モータの赤線
RC7 - モータの緑線
RC5 - モータの黄線
RC2 - モータの青線
モータの白線/黒線は9Vに配線

今回のモータは、
1相辺り600mA程流れるらしい。



実態配線図1(FET)
上のブレッドボードが5.0V回路で
下のブレッドボードが9.0Vとなります。

《 配線図2 》 *1)

上の配線図1では、"FET"を使った回路でしたが、
配線図2では"NPNパワーダーリントントランジスタアレイ(FT5754M)"を使い回路を構成して見ました。

実態配線図2(FT5754M)
FT5754Mのピン構成は左右対称なのでぇ、どちら方向に挿しても良いです。
抵抗は 1KΩ〜3.3KΩ の範囲内でチョイスすれば良いでしょう。

《 ダウンロードプログラムについて 》

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

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

ダウンロードファイルを解凍すると下記の様なファイル構成です。
 Stepper.c・・・・・・・・・・・ 本体のサンプルプログラムソースファイル
            ("配線図1"も"配線図2"もこのプログラムで動作します) *1)

 尚、CPUのクロックは8MHzを想定しています。
 これでPSMCの生成出来る最低周波数は16Hz程ですが、まだ回転速度を落としたい場合は
 システムクロックを落とす必要が有ります。例えば、4MHzとした場合は8HzまでOKでしょう。

Stepper.c

このプログラムの動作は、スイッチを押すと正回転(右回り)で180度回転し止まります。
回転速度は50Hzの周波数に設定しています。
逆回転(左回り)にしたい場合は、
StepperStart(FORWARD,100) ;

StepperStart(REVERSE,100) ;
と書き換えましょう。

モータを動作させる関数の使い方を説明します。

ans = StepperFrequencySet(frq)
 モータへの出力周波数(速度)を設定する処理
 周波数が高くなると速度は速くなりますが、早すぎると脱調して回りません。
  long  frq : 設定する周波数(Hz)を指定(16Hz-10KHz)
  int   ans : -1 = 設定不可能な周波数ですよ 0 = 設定は成功した

 ※ 今回のモータとこの回路で、最高周波数は120/150Hz程までなら早くなりますが、
   これを超えるとぉ速度が落ちて来て終いには回らなくなります。
 ※ #define ONE_COUNT  1L     // 1カウント時間 (1/8MHz)*8Prescale=1us
   をシステムクロックに応じて書き換えます。

StepperStop(mode) *1)
 モータの回転を停止させる処理
 ステップ動作回転途中でも、一定速度で連続回転でも停止出来ます。
  char  mode : 停止モードを指定します
         0 = 保持トルク無しで停止する(フリーラン) 1 = 保持トルク有りで停止する

 ※ ステップ動作で停止モードを指定する場合は、"#define TORQUE_AT_STEP_STOP 1"の記述を
   変更しましょう。(ステップ動作停止時の保持トルク 0=無し 1=有り)
 ※ 保持トルク有りで停止した時のA/B相出力波形は、停止させた時の最後の2相励磁方式波形パターン
   をそのまま継続出力します、保持トルク無し時はもちろん出力はOFFです。

StepperStart(dir,step)
 モータの回転を開始する処理
  char    dir : 回転させる方向を指示(0=逆転 1=正転)
  long  step : 回転させるステップ数を指定(2Step単位とする:偶数)
                     0を指定した場合は、一定速度で連続回転します。

《 その他 》

"__delay_us()"のソフトで制御するよりも、PSMC制御の方が振動も少なく、スムーズに動作する様な
気がしますです。
ステッピングモータの制御には高い周波数の生成は必要無いのでシステムクロック4MHzでも良いかも、
でも他の器機を制御するのを考えるとぉ8MHzは欲しい、PSMCのプレスケールを1:16も作って欲しいぞぉ



"配線図2"の追記と"StepperStop()"関数の変更(*1) 2018/07/22


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