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として任意の角度に回転させます。

以下の関数、信号、パラメータを使っています。

関数
(予約語)
 w_sqr 矩形の周期関数を発生します。
初期値0とするためにオフセットを加算しています。
 int その値以下で最大の整数値を与えます。
 Dout ディジタル信号を出力します。
信号 Target指令角度をステップ数で換算した値です。
 step回転角度をステップ数で換算した値です。
 gen駆動パルス信号です。
 cmd指令角度を[度]で表した値です。
 angle回転角度を[度]で表した値です。
パラメータ  modeこの値を変えて運転モードを選択します。
 target指令角度を[度]で与えます。
 speed回転速度の絶対値を[ステップ/秒]で与えます。

設定例
記録例
(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度に達したら停止します。