PIC12F683(8ピン)を使ったステッピングモータドライブ用PCインターフェイス
●概要
PIC(ワンチップマイコン)を利用してパソコンを用いてステッピングモーターを制御できます。
PIC12F683を2個使った非常にシンプルな回路で2個のモータを制御できます(PIC1個で1個のモータを制御できます)。
PICの内部ではRS232Cの通信と,ステップ動作と2つの仕事をこなしています。
パソコンとはRS232C(COMポート)で接続します。
COMポートに対して,コマンドを送ると,それに従ってステップします。
また,コマンド,ステップ数を返信しますので,コマンドが受け付けられたかどうかの確認もできます。
●お送りする部品リスト
部品名 |
型式等 |
数量 |
PIC |
12F683(モータ番号0,1を書き込み済み) |
2個 |
トランジスタアレイ |
TD62083 |
1個 |
PICとトランジスタアレイを組み合わせてテストした後に出荷致します。
●仕様
・RS-232Cの通信速度は9600bpsです。
・回路をシンプルにするため、クリスタル、セラロックなどは使用せず、PIC内蔵クロックを使用しています。
そのため、使用温度などの条件によっては正常に通信出来なくなる可能性があります。出荷前に室温でテストを行った上出荷いたします。
(内蔵クロックでも19200bpsの通信が可能でした。様々な条件でも安定に動作するように、今回はスピードを落とした9600bpsとします。)
・励磁方式は1−2相励磁です。
・回転速度はおおむね1秒当たり100ステップです(私の使用したモータでは1回転400ステップです)。
・制御コマンドに関しては別途記載致します。
・先のコマンド実行(ステップ)中に次のコマンドがあった場合,先のコマンド(所定のステップ数)が終了してから次のコマンドを実行します。
ステップが追いつかずにコマンドが連続的に送られた場合,コマンドを30程度PIC内のバッファに蓄えます。バッファ数をオーバーしないようにして下さい。万一オーバーした場合はエラーを返しますので、適切なエラー処理してください。
・ハイパーターミナルなどの通信ソフトでも動作確認できますが,コマンド文字列は一度にまとめて送る必要があります。キー打ち込みではなく貼り付けを利用して下さい。
・制御プログラムは添付しません。Visual Basic で作製したソースファイルは下記に公開致します。
●制御コマンドについて
コマンドの種類は下記の通りです。x,yの所には数字が入ります。
・'CxLyyy' : モータ番号xのモータをyyyステップします。yyyは000〜127の範囲です。(例'C0L020':モータ番号0番のモータを20ステップします。) 000ならステップせず状態の取得に利用します。
・'CxRyyy' : 上記とは反対方向にyyyステップします。yyyは000〜128の範囲です。
・'CxSTOP' : バッファに蓄積されたコマンドにかかわらず,強制的にすぐに停止します。(例'C1STOP':モータ番号1番のモータをすぐに停止します。)
コマンドに対する応答として下記の文字列が帰ってきます。
・'OK:Cx????:yyyyy' :コマンドを受け付けたとき。yyyyyは電源を入れてからのステップ位置(+32766〜-32767の範囲で可変長)
・'ER:Cx????:yyyyy' :コマンドを受信はできたが,バッファがいっぱいで処理できない。
・'DN:______:yyyyy' :所定のステップが終了したとき。'_'はスペースです。
・存在しないチャンネル番号を指定した時や通信エラーの場合は何も返しません。
・複数のモータを接続しているときに,確率的には非常に低いですが、同時に上記DNメッセージが複数のPICから送られてくることがある場合も考えられます。その場合文字化けして正常に受け取ることができません。
例えば、電源投入後(モータが停止している状態で)
@'C0R050'コマンドを送った場合、
Aすぐに'OK:C0R050:0'が返ってきます(タイミングによっては、最後の'0'が'1')になる場合もあります)。
B50ステップした後(50/100=0.5秒後)に'DN:______:50'が返ってきます。
●サンプル通信ソフト(VB6のソースファイル)
下記にテスト用のサンプルプログラムを公開いたします。
あくまで使用例ということでお考えください。
(落札者様には、ご希望によりファイルをお送りできます。(実行形式ではありません))
★仕様変更対応の範囲
・仕様変更はありません

テスト回路(見えない裏面に抵抗1本とダイオード2本があります)

テスト回路の回路図

テスト用ソフト(VB6)の実行画面

データ通信ソフト(VB6)の作成画面
●オークション関係トップページへ(他にもいろいろと出品しています)
●PIC関連の出品物の入札を考えている方に(必ずお読み下さい)
下記がソースファイルです。参考程度ということでご理解ください。
Private Sub Command1_Click(Index As Integer)
'L100ボタンが押された
MSComm1.Output = "C" + CStr(Index) + "L100"
End Sub
Private Sub Command2_Click(Index As Integer)
'L10ボタンが押された
MSComm1.Output = "C" + CStr(Index) + "L010"
End Sub
Private Sub Command3_Click(Index As Integer)
'強制停止ボタンが押された
MSComm1.Output = "C" + CStr(Index) + "STOP"
End Sub
Private Sub Command4_Click(Index As Integer)
'R10ボタンが押された
MSComm1.Output = "C" + CStr(Index) + "R010"
End Sub
Private Sub Command5_Click(Index As Integer)
'R100ボタンが押された
MSComm1.Output = "C" + CStr(Index) + "R100"
End Sub
Private Sub Command6_Click(Index As Integer)
'取得ボタンが押された
MSComm1.Output = "C" + CStr(Index) + "R000" ' L000 でもok
End Sub
Private Sub Command7_Click()
Text1.Text = "" ' クリアします
End Sub
Private Sub Form_Load()
MSComm1.CommPort = 5 ' ご使用のCOMポート番号を指定してください。
MSComm1.Settings = "9600,n,8,1" ' 変更しないでください
MSComm1.PortOpen = True ' ポートの使用開始します
MSComm1.InputLen = 0
Timer1.Interval = 10 ' タイマーを使用開始
End Sub
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False ' ポートの使用終了
End Sub
Private Sub Timer1_Timer()
' 返信されるメッセージをテキストボックスに入れます
Text1.Text = Text1.Text + MSComm1.Input
End Sub