4

Microchip TCP/IPスタックを使用しているときのステッピングモーターの制御について質問があります。

過去には、ステッピングモーターの制御にタイマーを使用していました。タイマーの周期をパルス間の必要な時間に設定し、タイマーティックISRで必要に応じてモーターの位相出力を変更します。私がこれを行った場合、私のステッパーは毎秒約400パルスの最大速度で動いていました。これは、割り込みが2.5ミリ秒ごとに発生していたことを意味します。そして、私はホストとの通信にUSBを使用していました。

現在、TCP/IPスタックを使用してイーサネット経由でPCと通信する新製品に取り組んでいます。また、SPIおよびUARTモジュールを介して他のデバイスと通信します。この新しいデバイスは、毎秒最大2000パルスのステッパーを操作できる必要があります。つまり、同じタイマー/ ISRアプローチを使用してステッパーを駆動すると、0.5ミリ秒ごとに割り込みが発生する可能性があります。ステッパーは、ホストから受信したコマンドに基づいてオンとオフが切り替えられるため、ホストとの通信とモーターの動作が調和して同時に行われる必要があります。ステッパーの速度がわずかに変化する場合、それは問題にはなりませんが、理想的ではありません。また、ステッパーが移動の途中でたとえば30ミリ秒間一時停止した場合、それは受け入れられません。

このプロジェクトでは、命令クロック速度が16MHz(内部FRC+PLLを使用して32Mhz/2)のPIC24Fを使用することを検討しています。ステッパーの割り込みによってイーサネット通信が中断されると思いますか、またはその逆だと思いますか?これを行うためのより良い方法はありますか?

ステッパー制御に別のPICを使用することを検討しました。次に、そのPICターゲット位置コマンドまたは停止コマンドを送信して移動を開始および停止できますが、それによって別のファームウェアがミックスに追加され、すべてが複雑になります。

4

3 に答える 3

1

ハードウェアにもよりますが、試してみるのが一番です。

他のオプションは、前述のようにステッパー制御に別のPICを使用するか、疑似スレッドを使用することです(ユーザーランドスレッドですが、通常、PICプラットフォームのほとんどのコンパイラでは使用できません)。

しかし、おそらくあなたにとって最もうまくいくのは、ソフトウェアのメインループでステッピングモーターを制御し(移動、スリープ、続行)、割り込みを使用して、着信するTCP/IP要求を処理することです。状態レジスタ/変数を変更します。

割り込みを使用することは良い考えですが、このような優先度の高いものがある場合は、ポーリングとループの方が適しています。すべてがスムーズであることを確認するには、TCP / IP割り込みがxxxサイクル(またはミリ秒、実際にはPICでも同じこと)を超えないことを保証するか、TCPにステッパー制御コードを追加する必要があります。 /IP割り込みハンドラ。

PICコントローラが割り込みを優先している場合、これは必要ありません。その場合は、ステッパー割り込みをTCP割り込みよりも高い優先度に設定するだけで、問題ありません。ただし、PICがユーザー機能にそれを備えているとは思いませんが、誤解される可能性があります。また、優先割り込みをサポートする別のプラットフォームに移行することもお勧めします。これにより、コードがはるかにクリーンになり、全体的な作業が楽になります。

于 2011-01-07T15:29:19.860 に答える
1

ステッピングモーターを制御してからPCやセンサーからデータを受信するまでのマイクロコントローラーCPUの時間を管理するという同じ問題がありましたが、制御プログラム(パルス)を1Kバイトごとに分割してマイクロコントローラーのメモリに送信することで解決しました。その後、CPU時間を解放することができました。

于 2011-03-26T18:16:01.737 に答える
0

ホストは、0.5ミリ秒の境界でステッパーを開始および停止する必要がありますか?これを裏付ける数字はありませんが、特に同じネットワーク上に他のデバイスがある場合は、イーサネットリンクの可変遅延がコマンドへの応答性を支配する可能性があると感じています。

于 2011-01-07T16:00:31.777 に答える