質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

mbed

mbed(エンベッド)は、Webサイト上でC++を使って開発を行う、ワンボードマイコンのプロトタイピングツールです。PCに開発環境をインストールする必要がなく、Webにアクセスできればどこにいても開発を行うことができます。

Q&A

解決済

1回答

1778閲覧

mbedによるサーボモータの制御について

TakayukiYamada

総合スコア13

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

mbed

mbed(エンベッド)は、Webサイト上でC++を使って開発を行う、ワンボードマイコンのプロトタイピングツールです。PCに開発環境をインストールする必要がなく、Webにアクセスできればどこにいても開発を行うことができます。

0グッド

0クリップ

投稿2018/04/29 10:30

mbedを用いたサーボモータの制御について
https://youtu.be/uMxCtYfdkhs

下記に示すyoutubeでの動画のようにmbedを用いてサーボモータをジョイスティックで制御しました。

しかし、動画の後半にあるようにジョイステックを
動かしているとある時、急に動かなくなる時があります。

この原因を探っているのですが、いまいち確かな解決策が
見当たらず困っております。
(手でモーターを少しだけ回すとまた、復活します)

また、プログラムを始動した時もジョイステックで動かしても
すぐにはモータは回らず、手で少し動かすと急に反応します。

この原因や解決策をご教授して頂きたいです。

以下にこの環境の詳細とソースコードを載せます。

サーボモータ TowerPro サーボ MG996R
mbed 1768
モータ駆動電圧 単三電池四本

ソースコード

※ジョイスティックは動かしていない時が0.76です
※サーボモータの制御パルスは0.5ms ~ 2.4msで180°回転なので
1.45msを0°として処理


#include "mbed.h"

PwmOut servo1(p21);
Serial pc(USBTX, USBRX); // tx, rx

AnalogIn x(p19);

int main() {
float xx,mx;
servo1.period_ms(20);// pulse cycle = 20ms

float pwidth = 0.00145;
float motorSpeed = 0.0;

int i = 0;

servo1.pulsewidth(pwidth);
wait(0.2);

while(1){

xx = x.read(); //ジョイスティックでアナログ値を読み取る

if((xx<0.74) || (xx>0.77)){
mx = abs(xx - 0.5);
}
else mx = 0.0;

//モーター前転
if(xx>0.77){
motorSpeed = mx*0.0001;
if((pwidth+motorSpeed)<0.0024){
pwidth += motorSpeed;
servo1.pulsewidth(pwidth);
wait(0.01);
}
}

else if(xx<0.74){
//モーター後転
motorSpeed = mx*0.0001;
if((pwidth-motorSpeed)>0.0005){
pwidth -= motorSpeed;
servo1.pulsewidth(pwidth);
wait(0.01);
}
}
else{
motorSpeed = 0.0;
pwidth = pwidth;
wait(0.03);
}

pc.printf("x = %.3e %.3e\n",mx,xx);

}//while
}//main


気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

電源が貧弱すぎです
きちんとした電源を用意してそれで駆動するようにしましょう。

モータが停止していて、起動させようとした場合に大電流が流れます
その時に、単3乾電池では、その大電流で電圧が下がってしまいモータを回すことが出来ません

投稿2018/04/29 11:44

y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TakayukiYamada

2018/05/01 17:22

ありがとうございます。 12V 2AのACアダプターに変えたいと思います
y_waiwai

2018/05/01 22:21

そのサーボモータの動作電圧しらべてみよーな。。
TakayukiYamada

2018/05/03 03:13

あ、もちろん 適正電圧まで電圧降下させます。
y_waiwai

2018/05/03 03:39

電圧降下て、、まあ、なんでもやってみて失敗したら失敗したでそれもまた糧になるんだから頑張ってやってみよう。 くれぐれも火事は出さないようにな。
TakayukiYamada

2018/05/06 14:39

ありがとうございます。 三端子可変レギュレーターでヒートシンクつけて 放熱しながら行ったところ無事にできました。 あと、ビギナーな質問で申し訳ないですが それでは、この場合はどのようにするのがベターなのでしょうか? サーボモーターの適正電圧にあったACアダプターを購入するという事 でしょうか? お手数ですが、いろいろ知りたいので よろしくお願いします。
y_waiwai

2018/05/06 14:45

12Vから5Vの三端子となると、モータを回してるとかなりの発熱になるんじゃないでしょうか #回すのが短時間なら問題にならないかも そりゃベターなのが5Vの電源を用意することですね 5V2Aの電源と言えば、、2AのUSB充電器を用意すればそれでOKってことになりますねw
TakayukiYamada

2018/05/06 15:00

なるほど、 短時間だったので 長時間側の発熱を気にしていなかったです。 USB充電器はいけますね。 仕様書にはトルクを高めるなら6Vが適正と書いてあったため USB充電器には着目しておりませんでした。 ですが、安全面を考えるとそちらの方が良いかもしれません。 いろいろ、初学者にご親切にいろいろ教えていただき ありがとうございました! これからもよろしくお願いします。
y_waiwai

2018/05/06 15:08

6Vを与えたいという場合は、ACアダプタじゃなく、 https://www.marutsu.co.jp/pc/i/64235/ こんな電源だと、電圧調整のトリマが付いてるので、6V程度には電圧を上げることが出来ます
y_waiwai

2018/05/06 15:12

まあ、ぐぐると6VのACアダプタもふつーに売ってるようなので、それを買うのももあべたー
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問