1

H-Bridge を使ってモーター速度を制御して洗濯機を作っています。H-Bridge の MOSFET への信号は、マイクロ コントローラ PICAXE 14M2 によって制御されます。

モーターは、発電機と負荷を受けるバケットに結合されています。デフォルトのデューティ サイクルは 25% です。50% でモーターが停止し、50% を超えるとモーターの回転が変化します。

今、私がやりたいことは、負荷がバケットに追加されると、モーターはその速度を維持する必要があり、速度を維持するためにデューティサイクルを制御したい.

したがって、負荷が増加すると、モーターへの抵抗が増加します。つまり、バケットが減速し、発電機が生成する電圧が低下します。

ここで、デューティ サイクルを増やす必要があるため、モーターが速度を上げてデフォルト値に追いつくようにします。

残念ながら、クローズ ループ機能を実行できません。誰でも私を助けてくれませんか....

PS。12V DCモーターを2つ使用しています。1つはバケットを回転させるモーターとして機能し(他のモーターとも結合されています)、もう1つのモーターはフィードバックを得るために発電機として機能します

ありがとう。

次のコードを使用しています。


setfreq M32   ' 100 kHz Frequency

main:
if pinB.5 = 1 then goto Closeloop
goto main 

***************************************************************************

Closeloop:          

    symbol duty = b2
    let duty = 79
    gosub closeloop1

closeloop1:

    for b11 = 1 to 100
    hpwm 1,0,0,79,duty
    readadc C.4, b22    ` Read generated voltage from pin C.4

    IF b22 > 204 then gosub stepdown    'if Generated voltage > 4 V , stepdown the duty cycle

    IF b22 < 153 then gosub stepup      'if V< 3 V, stepup the duty cycle

stepup: ` Increase the duty (So speed is increased) if gernerated voltage is less than 3V

    duty = duty - 5 
    goto closeloop1 

stepdown:  ` Decrease the duty (So speed is reduced) if gernerated voltage is more than 4V

    duty = duty + 5 
    goto closeloop1

next b11

4

1 に答える 1

0

制御アルゴリズムを確認する前に、PICAXE Basic コードで修正が必要な問題がいくつかあります。gosubとにかく、プログラムの次の行であるラベルに移動します。ループgotoから飛び出すために使用しています。サブルーチンを呼び出すのforに使用しますが、サブルーチンから戻るのではなく、別の場所にジャンプします。これらはエラーの原因にはならないかもしれませんが、プログラムの流れをどのようにしたいかを明確に考えていないことを示唆しています。gosubgotoreturn

forこれらの s によってループが中断されない場合、ループはgoto100 回実行されて終了します。その後、pwm 出力は最後に設定したデューティで続行されますが、プログラムは何も実行しなくなります。pauseループには時間遅延がないか、または他の時間遅延がないため、数ミリ秒で発生します。なぜ 100 回ループしているのですか? 最後のループの後に何をしたいですか?

最後に、デューティ比を増減してモーターの速度を上げたり下げたりしようとしていますが、0 未満または必要な最大値を超えていないことを確認していません。 byte 変数が 0 の場合、それを 1 減らすと 255 に丸められます。hpwmのドキュメントを見ると、デューティ ファクタの値が実際には 0 から 1023 の範囲であることがわかるので、バイトではなくワード変数を使用する必要があります。

私の意見では、速度を安定させようとしている方法は最善のアプローチではありませんが、ループに適切な時間遅延を設定すれば、ある程度は機能するはずです。そのため、コードを試してみてください。そして、それが実際にどのように機能するか、そしてそれを改善できるかどうかを確認してください。

これは教育的な課題であると想定しているため、このサイトでソリューションを作成するのではなく、自分で開発する必要がありますが、このプロジェクトのハードウェアまたはソフトウェアについてさらに質問がある場合は、おそらく改善されるでしょう. PICAXE フォーラム、あるいはEE Stack Exchangeで回答してください。ただし、ハードウェアの回路図を投稿し、何を試して何が起こったのかを具体的に説明する準備をしてください.

于 2016-05-28T20:32:12.797 に答える