ご返答ありがとうございます。
c = lo / a * acc; // 加速タイマー値のセット
の計算の意味が今ひとつ分からないのですが、
詳しく教えてはいただけないでしょうか?
よろしくお願いします。
素人ですみません。
----- Original Message -----
From: "Kazuaki Kamei" <kkamei@xxxxxxxxxxxxxxxxx>
To: <h8@xxxxxxx>
Sent: Tuesday, November 11, 2003 12:09 PM
Subject: [H8-ML(4070)] Re:モータの制御について
> 亀井@大和市在住です
>
> > > 既にこのような制御プログラムの経験がある方や、
> > > 何かいい案がある方がいれば教えてください。
>
> 少し興味のある話題です。
>
> 私の作ったパルスジェネレータです。
> Nios cpu 16bit版 20MHz で 約500Kppsが出ています。
> 私も、もっと良いジェネレータプログラムを知りたいので
> どなたか公開して頂けませんか?
>
> 下記は、8bitのバスに ステッピングモータの CW/CCW信号を2ビット接続
> して使っています。
> 参考になるでしょうか(*^_^*)
>
>
> //アドレスの定義
> #define MOTOR (*((volatile unsigned int *)(0x868))) //モーター接続コ
ネクタ(CN5)のアドレス
>
> //モータードライブのパラメータ・グローバル変数
> unsigned int hi; // 速度上限値 1〜lo ( 1 = 最大速度)
> unsigned int lo; // 速度下限値 hi〜65534 (65534 = 最低速度)
> unsigned int acc; // 加減速時間 1〜8 ( 1 = 最大加速)
> unsigned int feed; // 送りパルス量
> unsigned char rev; // パルス出力の[ON]ビットパターン 8Bit
>
> //モーター関数のプロトタイプ宣言
> void motor_run(void);
>
> //***************************
> // メインプログラム
> //***************************
> int main(void)
> {
> //動作に必要なパラメータを変数にセットする
> hi = 150; // 速度上限値セット
> lo = 1000; // 速度下限値セット
> acc = 2; // 加減速時間セット
> feed = 50; // 送出パルス数の設定
> rev = 0x55; // 回転方向の設定(ポートに出すON信号パター
ン)
>
> loop:
> //起動条件は適当に入れる事・・・
> motor_run(); // モーター駆動関数の呼び出し
> goto loop;
>
> }//end
>
>
>
> //モーター位置決め駆動関数++++++++++++++++++++++++++++++++++++++++++++++++
>
> void motor_run(void)
> {
> unsigned int a; // 送りパルス数:出力済みパルス数 の比較変数
> unsigned int b; // パルス間隔減算タイマーの加算変数
> unsigned int c; // パルス間隔減算タイマーの比較変数
> unsigned int e; // 加速に使ったパルス数
> unsigned int k;
>
> //加速駆動
--------------------------------------------------------------
>
> c = lo; // 加減速パルス間隔タイマーの減算値
> e = 0; // 加減速パルスの数
>
> for(a=1 ; a<=feed/2 ; a++) // 送りパルスの前半(1/2)を処理
> {
> MOTOR = rev; // パルス [ONのパターン]
> if(c > hi) // 加速タイマーが速度上限値以下な
ら
> { c = lo / a * acc; // 加速タイマー値のセット
> e++; // e <= 加速に使ったパルス数を加
算
> }
> if(c < hi){ c = hi; }
> for(b=0 ; b<=c ; b++){} // 加速パルス間隔タイマー
> MOTOR = 0xff; // パルス [OFFのパターン]
> }
>
> //減速駆動部 -----------------------------------------------------------
>
> for(a=feed/2 ; a>=1 ; a--) // 送りパルスの後半(1/2)を処理
> {
> MOTOR = rev; // パルス [ONのパターン]
> if(a<e ){c = lo / a * acc ;} // 減速領域ならタイマー値のセッ
ト
> for(b=0;b<=c;b++){} // 減速パルス間隔タイマー
> MOTOR = 0xff; // パルス [OFFのパターン]
> }
> } //end
>
>
>