[H8-ML(4072)] Re: [H8-ML(4070)] Re: [H8-ML(4068)]モータの制御について
From: "SumioNoriko" <sumionoriko@xxxxxxxxxxxxxxx>
Date: 2003年11月11日(火)19時29分33秒
ご返答ありがとうございます。

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
>
>
>

スレッド概略
[4068(R)](起点)
 └[4070(U)]
   └[表示中]
     └[4073(1)]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]