本文へ移動
サポートシェアリングソリューション
OKWAVE Plus

このQ&Aは役に立ちましたか?

ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ArduinoでDCモーターの角度制御)

ArduinoでDCモーターの角度制御

2023/09/07 00:50

このQ&Aのポイント
  • arduinoでDCモーターの角度のフィードバック制御をしたく思っており、エンコーダーで角度を計測しながら、一定時間毎(10ms)にモーターに制御入力を入れたいです。
  • エンコーダーで角度を計測するには外部割り込みが必要で、一定時間ごとにモーターへの電圧を変化させるにはタイマー割り込みが必要だと思います。
  • attachInterrupt(interrupt, function, mode) ; MsTimer2::set(unsigned long ms, void (*f)()) ; MsTimer2::start(); を書けば良いのでしょうか?この場合、タイマー割り込みで実行される関数 void (*f)()の処理中に、外部割り込みのイベントが発生した場合、functionを実行してくれるのでしょうか?また、functionの実行中にタイマー割り込みが入ることもあり得るのでしょうか?この場合、エンコーダによる角度計測がきちんと行われないことになると思うので、どうすれば良いでしょうか?
※ 以下は、質問の原文です

ArduinoでDCモーターの角度制御

2021/04/03 10:44

arduinoでDCモーターの角度のフィードバック制御をしたく思っており、エンコーダーで角度を計測しながら、一定時間毎(10ms)にモーターに制御入力を入れたいです。エンコーダーで角度を計測するには外部割り込みが必要で、一定時間ごとにモーターへの電圧を変化させるにはタイマー割り込みが必要だと思います。この場合どのようなプログラム構成にすれば良いのでしょうか?void setup( )の中に、

attachInterrupt(interrupt, function, mode) ;
MsTimer2::set(unsigned long ms, void (*f)()) ;
MsTimer2::start();

を書けば良いのでしょうか?この場合、タイマー割り込みで実行される関数 void (*f)()の処理中に、外部割り込みのイベントが発生した場合、functionを実行してくれるのでしょうか?また、functionの実行中にタイマー割り込みが入ることもあり得るのでしょうか?この場合、エンコーダによる角度計測がきちんと行われないことになると思うので、どうすれば良いでしょうか?

ご教授のほどどうぞよろしくお願い致します。

質問者が選んだベストアンサー

ベストアンサー
2021/04/03 23:00
回答No.2

DCモータの仕様書をよく読みましょうね
いにしえの名機 FA-130は本家では既に絶滅危惧種なんだけれど
https://www.monotaro.com/p/0526/3956/?utm_source=Overture&utm_medium=cpc&utm_campaign=880162_6493296903&utm_content=80894682914&utm_term=b_381658354020_x_dsa-1212116371400&yclid=YSS.1000403920.EAIaIQobChMIv7fB043i7wIVCWoqCh0eJwQREAAYAiAAEgLz1fD_BwE&gclid=CI-fgNiN4u8CFQUSvAodSXQPLg&gclsrc=ds
1.5V 8600rpm
https://product.mabuchi-motor.co.jp/detail.html?id=11


8600rpmとは1秒間で143回転する!
1ミリセカンドで51度回る

もちろん速度制御無しでの全速回転ですけど
では、PWMで電圧落としたら1rpmで回せるか?
答え:回せません
単純計算で1/8600V=0.16ミリボルト
圧倒的にトルク不足でベアリング抵抗にすら勝てず回らない

じゃあと160ミリボルトくらいに挙げるとイキナリ100rpmくらいで回ってしまう
答え:不感帯
https://www.m-system.co.jp/mstoday/backnum/2012/04/mame/index.html
それを回避するために、高速応答は必須

どーゆー事か?
100ミリボルトを0.1ミリセカンドくらいの短時間印加して
2度回転しちゃって行き過ぎたのでマイナス80ミリボルトで逆転させて、、、
ってゆーよーに正転逆転を高速で繰り返して極低速運転が可能になる

よーするにゆっくり回すのはとっても困難

安価なオープンループドライバで速度制御できるのは1/100くらいの速度まで
つまり、100rpm以下で回すのは不可能レベル

タミヤ ギアボックス
https://www.tamiya.com/japan/products/70167/index.html
https://www.tamiya.com/japan/products/72007/index.html

産業ロボット向けサーボモータは0.1rpmでも安定的に回せる
https://www.mitsubishielectric.co.jp/fa/products/drv/servo/pmerit/index.html
https://www.e-mechatronics.com/product/servo/sgmx/motors/sgmxj/index.html
https://www.renesas.com/jp/ja/application/industrial/48v-position-control-solution
但し、高価!
高価なれどコスパ最高なので、お値打ちとも謂える

お礼

2021/04/03 23:32

ありがとうございます!大変勉強になりました。なるほどDCモーターは不感帯があるので、低速回転は難しいのですね。ありがとうございました!

質問者

このQ&Aは役に立ちましたか?

この質問は投稿から一年以上経過しています。
解決しない場合、新しい質問の投稿をおすすめします。

質問する

その他の回答 (2件中 1~2件目)

2021/04/03 14:35
回答No.1

問答無用でモータドライバのエンコーダフィードバック付きのやつ
https://www.switch-science.com/catalog/3169/
安価なモータドライバにはエンコーダフィードバックが憑いて無い
https://www.switch-science.com/catalog/3935/


>一定時間毎(10ms)にモーターに制御入力を入れたいです
そんな低速じゃあ無理だって何度も書いてるんだけど無視されてる
https://www.switch-science.com/catalog/3459/
「ソフトウェアの特徴」
「位置/速度制御を行う加速度メジャーループ(制御周期200 us)と電流マイナーループ(制御周期50 us)」

お礼

2021/04/03 14:47

ご回答ありがとうございます。なるほどモータドライバのエンコーダフィードバック付きのやつというものがあるのですね。とても助かります。サンプル時間については、別の質問サイトで1msでDCモーターをフィードバック制御したいと書いたら、

「>一定時間毎(1ms)にモーターに制御入力を入れたいです
この時点で破綻していると思います。モーターの反応速度はそんなに速くありません。時定数を適切に設定しないと、制御系はまともに動きません。
まぁ、そもそも
>DCモーターの角度のフィードバック制御
という話自体「無茶」な感じがありますが。どれだけの減速比のギアをいれるのでしょう?」

と言われました。。。でもやはり、回答者様の言う通り、1msの方が良いのでしょうか?

質問者

お礼をおくりました

さらに、この回答をベストアンサーに選びますか?

ベストアンサーを選ぶと質問が締切られます。
なおベストアンサーを選びなおすことはできません。