1

私はモーター制御アプリケーションに取り組んでいます。基本的にボタンを押すとモーターが作動し、実行中にモーター電流を測定して、過負荷が発生した場合にモーターを停止できるようにします。

問題は、過負荷がある場合にモーターを停止できることですが、応答時間が長くなり、プログラムが突然の衝撃に反応しません。

ボタンをオンにすると、1 つのループが過負荷の電流を測定し、もう 1 つのループがモーターの制御で動作するように、2 つのループを並列に実行することは可能ですか?これらの 2 つのループは同時に動作する必要があります。 ..

4

2 に答える 2

1

g-makulik がコメントに投稿したように、スレッドを使用できます。または、単一のループ内で状態を維持する古いソリューションにフォールバックすることもできます。お使いの TI が fork() またはスレッドをサポートしているかどうかはわかりませんが、サポートしていない場合、このようなものが強力な候補になります。

int need_to_monitor_motor = 1;
int common_switch; // 共通処理ならtrue

while (need_to_monitor_motor)
{
    共通_スイッチ = 1; // 共通処理を許可

    // プロセッサの占有を避けるために何かをする必要があるかもしれません
    // 他のプロセスが実行中です。最小限のナノスリープでも。
    // sched_yield()
    // usleep()
    sleep_or_processor_release();   

    スイッチ ( motor_state )
    {
       ケース MOTOR_OFF:
        need_to_monitor_motor = do_motor_off_stuff();
        壊す;

       ケース MOTOR_ON:
        need_to_monitor_motor = do_motor_on_stuff();
        壊す;

       デフォルト
        need_to_monitor_motor = trouble__fix_it( &common_switch );
        壊す;
    }

    if (共通スイッチ)
    {
        do_common_processing();
    }
}

(注意してください、これはコンパイルされていません)

于 2012-09-15T13:14:07.947 に答える
0

つまり、TIプロセッサ用の組み込みCプログラムを作成しているということです。ここで問題は、OS/マルチスレッド機能を有効にしているかどうかです。ほとんどの安価なTIボードはこのサポートを備えておらず、組み込みプログラムは無限ループwhile(1)で終了します。実際の作業はすべて、割り込みハンドラーで行われます。あなたの場合、おそらく、1つまたは2つのタイマーを使用できます。main関数の最初でそれらを初期化し、タイマー割り込みハンドラーで必要なすべてを実行します。

したがって、ボード用のタイマーを備えたTIコードサンプルを見つけて、それに独自のロジックを追加します。

于 2012-09-15T13:25:18.213 に答える