2016-05-27 12 views
1

Hブリッジを使用してモータ速度を制御して洗濯機を作っています。 HブリッジのMOSFETへの信号は、マイクロコントローラPICAXE 14M2によって制御されます。PICAXE 14M2を介してデューティサイクルを制御してDCモータ速度を維持する方法(閉ループフィードバック)

モーターは、負荷にかかるジェネレータとバケットと結合されています。デフォルトのデューティサイクルは25%です。 50%のモーター停止時および50%以上のモーター回転の変化。

ここでは、負荷がバケットに追加されるとモータがその速度を維持し、速度を維持するためにデューティサイクルを制御したいとします。

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

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

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

PS。私は2つの12V DCモーターを使用しています。バケット(他のモーターにも接続されている)と他のモーターを回転させるモーターとして機能するものが、フィードバックを得るためのジェネレーターとして機能しています。

ありがとう。

私は、次のコードを使用しています:私たちはあなたの制御アルゴリズムを見る前に、あなたのPICAXEの基本的なコードで固定する必要がいくつかの問題がある


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 

+0

私はあなたに手を差し伸べていません:2番目のDCモーターはフィードバックを得ることです。つまり、そのモーターの逆起電力を読み取るということですか?もしあなたの最初のモーターコマンドのゲインを計算するには、伝達関数を使用します。 – LPs

+0

あまりにも多くのことが間違っています。クラスメイトにこのプロジェクトのお手伝いをしてもらい、Basicをよく知っている人を見つけてください。 –

答えて

0

。プログラムの次の行であるラベルにはgosubと書いてあります。ループforから飛び越すにはgotoを使用しています。サブルーチンを呼び出すにはgosubを使用しますが、returnではなく、gotoを呼び出してサブルーチンから戻ることができます。これらはエラーを発生させないかもしれませんが、プログラムの流れを欲しいと思っていないことを示唆しています。

ループがgotoによって中断されていない場合、100回実行されて終了します。その後、最後に設定した時点でpwm出力が続行されますが、プログラムは何も実行しません。ループにはpauseや他の時間遅延がありませんので、数ミリ秒で発生します。なぜあなたは100回ループしていますか?また、ループの最後の時間の後に何をしたいですか?

最後に、デューティファクタを増減してモータを加速または減速させようとしていますが、0またはそれ以下に低下させていないことを確認していませんtake - バイト変数が0で1を減じると、ラウンドラウンドが255になります。 documentation for hpwmを見ると、デューティ・ファクタ値は実際には0から1023の範囲にあるので、バイトではなくワード・変数を使用したいと思うでしょう。

スピードを安定させようとする方法は、私の意見では最良の方法ではありませんが、ファッションの後にはうまくいくはずです - ループに適切な時間遅れを入れたら、それが実際にどのように機能するのか、それを改善できるかどうかを確認してください。

私はこれが教育的な割り当てだと思うので、あなたはこのサイトであなたのために書かれた解決策を得るのではなく、あなた自身でそれを開発することになっています。しかし、このプロジェクトのハードウェアまたはソフトウェアについて、 PICAXE forum、または可能であればEE Stack Exchangeによくなるでしょう。あなたのハードウェアの回路図を投稿し、あなたが試したことと何が起こったのかを具体的に説明する準備をしてください。

関連する問題