問題タブ [motordriver]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - PID フィードバック & DC モーター/エンコーダー付き位置コントローラー
PID フィードバックとポジショニングの両方を同時に実行するのに苦労しています。
RPMを計算する私の考えは次のとおりです。
- タイマーを開始し、割り込みを使用してエンコーダー パルスをカウントします。
- 簡単な計算を使用して RPM に変換します。
- 使用した変数をリセットして最初からやり直してください。
RPM を計算することはできますが、計算後にしか PID コントローラーを呼び出すことができません (ただし、適切な解像度が得られるまで待ちたいと思います)。これにより、非常に厄介なコードが作成されます。より簡単な方法または私が見逃しているものはありますか?
私のアプリケーションに関する情報: DC モーター/1 回転あたり ~600 パルス (ギアヘッド後) のデュアル磁気エンコーダーを備えた Atmel ATmega328P にプログラミングしています。GoToTarget(#) を呼び出して、PID パラメータを更新しながらモーターをその位置に移動させたいと考えています。さらに、双方向である必要があります。
usb - USB経由でステッピングモーターを制御
私がやっているUSBデバイスは、ステッピングモーターを制御することです。パラレルポートを使用する前にこれを行いました。これらのポートは現在のマザーボードには存在しないため、デバイスと PC (ホスト) の間に USB 通信を実装することにしました。私の目的を達成するために、12Mbps の USB モジュールを備えたデバイスにフリースケール マイクロコントローラーを提供しました。私の USB デバイスは、特定の時間に 4 バイト (モーター ドライバーごとに 1 つ) を受信する必要があります。これは、すべてのバイトがエンジンを動かすステップであるためです。PC (ホスト) では、ユーザーのアプリケーションが情報を含むテキスト ファイルを処理し、軌道座標を作成して、各モーターに対して特定の速度でバイトを送信します (モーターの加速と速度を達成するのに時間はかかりません)。
パラレル ポートの使用は、各バイトがユーザー アプリによって決定された時間に順次送信されるため、簡単な作業でした。
フルスピード USB プロトコルについて少し調べてみると、フレームが 1ms ごとに送信されることがわかりました。その後、1ミリ秒ごとに4バイト以上を送信できますが、パラレルポートで行ったように時間を管理できません。私のマイクロコントローラーは、フレームごとに最大 64 バイトを送信できます (転送用紙の種類に基づいて、Control、Bulk、Int、Iso ..)。
質問1:
1 ミリ秒ごとよりも速く 4 バイトのパケットを送信できる方法を知りたいですか?
質問2:
これらのタイプのデバイスについてアドバイスできる転送のタイプは何ですか?
ありがとう。
microcontroller - ゲームパッドによるStellarisサーボ制御
ラップトップに接続されたゲームパッドで 3 つ以上のサーボを制御するソリューションを探しています。使用したい MCU は、Texas Instruments の Stellaris ランチパッドまたは MSP430 です。私はほぼすべての場所を検索しましたが、まだ答えが見つかりません。プロジェクトは PC 制御の望遠鏡マウントです。
アドバイスをよろしくお願いします!
microcontroller - L293D morot Driver および Atmega8 とのインターフェース中に DC モーターの速度が低すぎる
L293DドライバーとAtmega8でPWMなしで6v DCモーターを駆動しようとしています。問題は、モーターを L293D ドライバーに接続しているときに速度が非常に遅くなることです。しかし、モーターに直接6V DCを供給すると、よく回転します。L293DのV2(モーター電源)ピンで外部6V電源を使用していますが、改善されません。ローターを手で回さないとモーターが回りません。PWM を使用しない場合の問題は残っていますか? 私のコードはここにあります:
c - atmega 32 pwmでモーターを制御する方法
私は、atmega32 を使用して高速 pwm モードでモーターを制御する (速度を制御する) 方法についてしばらく考えてきました。他のカウンターには別の用途があるため、8 ビットの Timer0 を使用する必要があります。このタスクのタイマーを初期化する方法を知っていると思います:
しかし、問題が発生します。次に何をすべきか、メインで何をすべきかわかりません。
私の正確なプロジェクトは、リモートコントロールカーを加速して運転することです。そのため、車から前進するように要求すると、停止から一定の加速度で最高速度まで加速する必要があります。私はアセンブリを知りませんので、私を助けてくれるなら C でやってください。どんな助けも大歓迎です。
c - ステッピング モーターの C の構造体で配列値を返す
Rabbit 4000 プロセッサでステッピング モーターを回転させようとしています。構造体を保持するキューがあり、4 巻線ステッピング モーターを実行するために必要なバイナリ ビットのシーケンスを作成する関数を作成しました。構造体内の関数からキューを埋めるプロデューサーにシーケンスを渡そうとしています。問題は、期待値がキューに入れられないことです。関数から構造体を返す方法を誤解していますか、それとも配列値を個別に割り当てる必要がありますか? 関連するコードのチャンクは次のとおりです。
プログラムの画面出力:
Hola Consumer
Hola Producer
Breaking Funct with: 1,0,0,0 関数
呼び出し後の値: 235,0,24,23
受信 (1a= 0: 1b= 1: 2a= 0:2b= 0) 0
put 235,0 ,24,23
Breaking Funct with: 0,0,1,0
funct 呼び出し後の値: 236,41,237,0
受信 (1a= 0: 1b= 0: 2a= 0:2b= 1) 1
put 236,41,237,0
私の問題は、関数呼び出し後の値が同じであると予想される関数を壊すことから値にあることです。
c# - Stellaris ステッピング モーター RDK USB シリアル インターフェイスと PC アプリケーション - パケット形式
TI-Luminary Micro の Stellaris ステッピング モーター RDK を使用しています。必要に応じて右のフォーラムに移動してください。C# を使用して開発したアプリケーションとデバイスを接続するために、USB シリアル インターフェイスを使用しています。現在、アプリケーションから制御コマンドを送信することに固執しています。次のコマンドを送信することで、ステッピング モーターを開始および停止できます。しかし、目標歩数/秒を設定したいと思います。必要なターゲット ステップでコマンド制御パケットを形成する方法がわかりません。したがって、これに関するヘルプは大歓迎です。
コード:
ありがとうございました、
バラジ R
arduino - Arduino プロジェクト - LDR とサーボモータの同期と回転
私は楽しみのためだけにホームプロジェクトを行っており、Arduinoにはかなり慣れていませんが、基本は知っています。
暗くなると開き、明るくなると閉じる自動ベネチアンブラインドを作成しています。
そのため、ベネチアン ブラインドのスラットは、光センサーが暗闇を検出すると開いた位置に回転し、光センサーが光を検出すると閉じた位置に回転します。
私は使用しています:
arduino uno r3/連続サーボモーター/led/LDR(光センサー)/10k抵抗/
このコードは、標準のサーボ モーターで機能します。私が持っている「より良い制御」ができるので、連続サーボモーターで動作するようにしたかったのです。
次のような if ステートメントが必要になると思います。
光センサーが暗を感知したらサーボモーターを一定回転させてから停止し、光センサーが光を感知したらサーボモーターを一定回転させてから停止します。
arduino - 割り込みはロボットに使用するのに適していますか?
それで、私はロボットに改造しようとしているこの古い電動車椅子を持っています。元のモーター ドライバーを sabertooth 2x12 に交換し、Arduino micro を使用して対話しています。モーターのシャフトがぐるぐる回っているので裏側に磁石とホール効果センサーを付けてロータリーエンコーダーとして機能させました。私の現在の目標は、ロボットに一定量の足を前進させてから停止するように指示できるようにすることです。これを直線的に行うコードを書きましたが、うまくいきませんでした。その後、割り込みについて学びましたが、それはまさに私が必要としているもののように思えました。それで私はそれを試してみましたが、いくつかの異なるレベルで物事がうまくいきませんでした。
レベル 1: モーターを適切に駆動することができたようには見えませんでした。ループ内でモーターをオンにするコマンドを実行したり、if ステートメントを実行したりするたびに、散発的かつ予測不可能な動きをするように思えます。
レベル 2: 割り込みが自分自身を中断しているように感じます。ホイールが前進するのを止めるために設定したものが、ロータリー エンコーダーの 14 クリックを前方に移動するように指示できるため、一方のホイールは 1000 クリックを超えて移動し続け、もう一方のホイールは 1000 クリックを超えて移動し続けます。止まる
レベル 3: コード ウィンドウをアップロードすると Arduino の認識が停止し、リセット ボタンを押して点滅スケッチをアップロードするまでドライバーが壊れてしまい、割り込みを間違って配置したと思います。次に、割り込みの 1 つを削除すると、正常にアップロードされます。
レベル 4: モーターがオンになっていると、ホール効果センサーが正しく機能しないようです。数秒でクリック数が 1 から 200 に跳ね上がる傾向があります。これにより、シリアルポートがフラッディングされ、Arduino ide がクラッシュします。
ご覧のとおり、システムのどこかにいくつかの欠陥があり、それがハードウェアであろうとソフトウェアであろうと、私にはわかりません。私はこれに正しい方法で取り組んでいますか、それとも私が知らないArduinoの秘密が私の人生を楽にしてくれるのでしょうか? 私がこの権利に近づいている場合は、以下のコードを見て、私が間違っていることを確認してください。
matlab - Simulink による Arduino ステッピング モーター制御
こんにちは、私は Arduino と電子機器の初心者ですので、ご容赦ください。
Matlab と Simulink を使用してステップ モーターを制御するプロジェクトがあります。今のところ、私は物事を立ち上げて実行したいだけです。ステップモーターの簡単なコードでテストした回路図を接続しましたが、動作します(これはMatlabなしで行われました)。私の問題は、Simulink と Matlab を使用してモーターを動作させるにはどうすればよいかということです。
Simulink モデルを実行しようとすると、これが表示されます
ステップ モーター ドライバー ボードは ULN2003APGで、モーターは .
Matlab 用の Arduino ハードウェア サポート パッケージをダウンロードし、サーバー プログラムを Arduino にアップロードして、Matlab と Arduino 間の通信を有効にしました。
私が得たエラーの原因は何なのかわかりません。どんな助けでも大歓迎です!
そのようなトピックをカバーする既存のガイドまたは例がある場合は、それらにリダイレクトできます。
(ボード用の新しいドライバーを作成する必要がある場合は、それについて読むことができるチュートリアルを送ってください。)
前もって感謝します。
編集!
ここでは、Simulink モデルを実行するために私が試みていることを段階的に示します。
1:このチュートリアルの手順を完了します。
2: Arduino 用 MATLAB サポート パッケージをダウンロードします。
3: arduino uno を PC に接続し、Arduino IDE を開き、ステップ 2 の adioes.pde をアップロードします。
4: Matlab を開いて作業パスを変更します (そうでない場合はエラーが発生します)。
5: ダウンロードした Arduino 用 MATLAB サポート パッケージから既存の例を開きます ...\ArduinoIO\examples\stepper_sim.mdl
6: COMPORT を変更し、Tools/Run on Target Hardware/Prepare to run をクリックしてから、Tools/Run on Target Hardware/Run をクリックします。
その後、エラーが発生します。
simulink モデルの別のイメージを次に示します。