モータードライバーがたまにしか機能しません どうすれば解決できるでしょうか?

【問題】
モーターを目的の回転角へ追従させる制御をしても、
勢いよく回転り続ける(暴走)
or いきなりピタッと止まったまま(異常停止)
or たまにちゃんと動く(正常動作) の3種類が起きます。正常動作は体感で10回に一回しかしません。
【前提】 Pololu 172:1 金属ギヤードモータ 25Dx71L mm HP 6V 48CPRエンコーダ付きを2台動かそうとしています。 電源電圧は7.2 Vです。 マイコンはArduino Megaです。 モータードライバーは

を使用しています。公式サイトがこのモーター用にと推奨していたものです。 回路は単純に、M1,M2ポートにモーターを一台ずつ接続したものです。
【気がかりな点】 目標角度が90度みたいな定数なら、正常動作する確率が上がります。しかし、目標角度を90→30→60とか、90→92→85みたいに小刻みにかえると追従しきれずに暴走します。あるいは異常停止します。 ちなみにモーターやドライバー、マイコンは全て新品です

このモータドライバはフィードバック制御が付いている製品ではないので、フィードバック制御(エンコーダのデータを受信して角度を計算)する部分はどのようにされてますでしょうか。

回転角を指定して制御する際にトラブルとなっているようですので、モータドライバの問題と言うよりは、フィードバック制御部分の問題のように考えられます。

ご返信ありがとうございます.はい,その通りでございます.エンコーダー付きのただのDCモーターですので,位置決め系(サーボ系)はプログラムで実装せねばなりません.

以降,回答者様が基本的な用語を抑えられていると推察して文章をしたためますので,もし私が独りで突っ走ってしまったらお構いなく,話を止めて議論してください.

——————————————————————————

位置決め系はPID制御で行いました.位置決め系は次の方法で精度よくチューニング
できます.

・簡単にジャイロセンサーの回路を組み,車体の角度を取得します.
・次に,位置決め系の目標値としてその車体角度の−1倍を与えます
・すると,精度のよい位置決め系にチューニングできていれば,車体を傾けるとタイヤは逆方向に回るので,まるでタイヤは空中に静止しているように見えます.

以上のコードが以下です.(ただしジャイロのプログラミングや変数宣言を全て書くと恐ろしく長いので割愛しました.以下はコードの核となる部分だけ抜粋しました)

error=ang_ref-w_ang;
error_itg += error*0.001;

dw_ang=80*(w_ang-w_ang_old) + 0.9231dw_ang_old;
dw_ang_old=dw_ang;
w_ang_old=w_ang;
uref=0.6
error + 0.030error_itg -0.01dw_ang;

U=uref*(PWM_MAX/VREF);

int mag = constrain(abs(U), PWM_MIN, PWM_MAX);

if(U >= 0){
digitalWrite(DI, HIGH);
digitalWrite(l_DI, HIGH);
analogWrite(PWM, mag);
analogWrite(l_PWM, mag);

    }

else{
digitalWrite(DI, LOW);
digitalWrite(l_DI, LOW);
analogWrite(PWM, mag);
analogWrite(l_PWM, mag);

    }

しかし,ここに間違いがあるとは思えません.なぜなら先程申し上げた方法でうまく追従するためです.

問題は,「このデュアルモータードライバに対して」「モーターを二つ繋ぐと,暴走する」ということです.モーター一つならば,どのような目標角度を与えても追従します.しかし,モーターをもう一つつなぎ,全く同じ指示電圧を加える(この時,そのモーターのエンコーダー情報は使わない.位置決め系も構築しない.いわば動きだけをコピーさせる)と暴走します.

——————————————————————

書いている最中に頭が整理できてきましたが,要は.

「デュアルモータードライバにモーターを一つだけつけて,うまく動く位置決め系を作った.もうひとつモーターをつけて,同じ指示電圧で動きをコピーさせたい. しかしなぜか暴走する.暴走するのは,必ずしもコピーのモーターだけではない.オリジナルのモーター(さっきまでうまく動いていた)もほぼ同じ確率で暴走する.」

ということです.どうぞご一緒にお考えください.よろしくお願いいたします.

書いていただけてないない点で、可能性は多く考えられますが、プログラムが全て正しいという前提に立たれているのであれば、次の課題が考えられます。

  • 起動電流などに十分に対応できる電源を使用していますでしょうか。
  • 磁気式センサを利用していませんでしょうか。

制御系プログラムは完璧であると言うことですので、プログラム的にモータドライバ制御へモータを1台追加しただけであれば、問題がある可能性は少ないと考えています。