Aproc-1を使ってモータドライバ付きステップモータを制御します。
パラメータ target に角度を与え、パラメータ mode で運転モードを指定します。
ソースコードやプロジェクトファイルのダウンロードはこちら →step.zip
| ステップモータの角度を任意に設定するプログラムです。 | ||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ブロック図 | ![]() | |||||||||||||||||||||||||
| 処理フロー | ![]() | |||||||||||||||||||||||||
| プログラム |
unit = 0.05; // 1ステップあたりの回転角度[度](モータ1.8度÷ギア比36)
var gen; // 矩形波 gen を信号として宣言
proc
{
Target= int( target/unit ); // 指令角度をステップ数で表現する
if mode==1 //【初期化モード】
{
step = Target; // Target の値を現在の整数角度に設定
}
elsif mode==2 //【回転モード】
{
if step != Target // 現在角度 ≠ 目標角度 ならドライブ
{
if step<Target { dir= 1; } // 現在角 < 目標角なら正転
else { dir=-1; } // 現在角 > 目標角なら反転
step = genStep( speed, dir, step, gen ); // 駆動信号出力
}
}
cmd = target; // target の値を cmd に記録する
angle = step * unit; // 角度の単位を[度]にする
}
// ユーザ関数:速度パルスと回転方向信号を出力し、角度を更新する
genStep( rate, dir, step, last )
{
if rate>0 // 指令速度が有効なら
{
gen = w_sqr( 1/rate, 0, 1 ); // 矩形波発生
if (last==-1) && (gen==1) // 矩形波の立ち上がりで
{
step = step + dir; // 角度を更新
}
last = gen; // 次回のために覚えておく
Dout( 0, 0, gen ); // Dout0:ステップパルス出力
Dout( 1, 0, dir ); // Dout1:回転方向指令出力
}
return step;
} | |||||||||||||||||||||||||
| 説明 |
ステップパルス列と回転方向の2つの信号を入力とするステップモータドライバを使って、 ステップモータを駆動します。 パラメータmode=1として角度の初期値を設定し、mode=2として任意の角度に回転させます。 以下の関数、信号、パラメータを使っています。
| |||||||||||||||||||||||||
| 設定例 | ![]() | |||||||||||||||||||||||||
| 記録例 |
(1)上記設定で運転開始ボタンを押します。mode=0なので、angle=0度で停止状態です。 (2)mode=1(初期化モード)にすると angle=15度になります。 (3)mode=2(回転モード)にしますが、target=angle=15 なので停止したままです。 (4)target=60とすると、その角度に向かって回転開始します。 (5)角度が目標の60度に達したら停止します。 (6)target=30とすると、方向を変えて再び回転開始します。 (7)角度が目標の30度に達したら停止します。 | |||||||||||||||||||||||||


