- ベストアンサー
ArduinoでDCモーターの角度制御
- arduinoでDCモーターの角度のフィードバック制御をしたく思っており、エンコーダーで角度を計測しながら、一定時間毎(10ms)にモーターに制御入力を入れたいです。
- エンコーダーで角度を計測するには外部割り込みが必要で、一定時間ごとにモーターへの電圧を変化させるにはタイマー割り込みが必要だと思います。
- attachInterrupt(interrupt, function, mode) ; MsTimer2::set(unsigned long ms, void (*f)()) ; MsTimer2::start(); を書けば良いのでしょうか?この場合、タイマー割り込みで実行される関数 void (*f)()の処理中に、外部割り込みのイベントが発生した場合、functionを実行してくれるのでしょうか?また、functionの実行中にタイマー割り込みが入ることもあり得るのでしょうか?この場合、エンコーダによる角度計測がきちんと行われないことになると思うので、どうすれば良いでしょうか?
- みんなの回答 (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 但し、高価! 高価なれどコスパ最高なので、お値打ちとも謂える
その他の回答 (1)
- lumiheart
- ベストアンサー率47% (1142/2410)
問答無用でモータドライバのエンコーダフィードバック付きのやつ 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)」
お礼
ご回答ありがとうございます。なるほどモータドライバのエンコーダフィードバック付きのやつというものがあるのですね。とても助かります。サンプル時間については、別の質問サイトで1msでDCモーターをフィードバック制御したいと書いたら、 「>一定時間毎(1ms)にモーターに制御入力を入れたいです この時点で破綻していると思います。モーターの反応速度はそんなに速くありません。時定数を適切に設定しないと、制御系はまともに動きません。 まぁ、そもそも >DCモーターの角度のフィードバック制御 という話自体「無茶」な感じがありますが。どれだけの減速比のギアをいれるのでしょう?」 と言われました。。。でもやはり、回答者様の言う通り、1msの方が良いのでしょうか?
お礼
ありがとうございます!大変勉強になりました。なるほどDCモーターは不感帯があるので、低速回転は難しいのですね。ありがとうございました!