Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
10 years, 10 months ago.
サーボモータの制御問題,よかったら教えていただきたい.もう一週間ぐらい全然進んでない><
二つのサーボを動かせたいですけど. 数値の差により,モータ1とモータ2を回転させたい. http://developer.mbed.org/users/changzhe8387/code/temp/ 詳細はこのプログラムの101行から問題が発生した 数値の差をパルス幅に変換し,そのパルス幅をサーボに代入.コード98と99行目のaとbの値はパルス幅に変換した,pwm1とpwm2(サーボ)に代入した.しかし実際にやってみたら,pwm1しか動かない. これは何故だろうか?教えてください.
1 Answer
10 years, 10 months ago.
こんにちは。
Quote:
しかし実際にやってみたら,pwm1しか動かない. これは何故だろうか?教えてください.
動かないとの事ですが、もう少し現象を詳しく教えて頂けないでしょうか? どのような波形が出ることを期待されていて、実際の出力がどうなっているかなど。 printf() で変数の値を出力されているようなので、動かない場合のログを頂けると何か分かるかも知れません。
少し気になったのですが、for ループで実行されるコードは意図されたものでしょうか? for ループのブロックの外側にある wait_ms() 関数の呼び出しは、for ループ内で実行されません。
while(1){
sampleTemp();
float k=getAvgTemp1()-getAvgTemp2();
float i=getAvgTemp3()-getAvgTemp4();
pc.printf("Temp1:%f\nTemp2:%f\n",getAvgTemp1(),getAvgTemp2());
pc.printf("Temp3:%f\nTemp4:%f\n",getAvgTemp3(),getAvgTemp4());
a = k * 2;
b = i * 2;
{
for(int p = start; p < end; p += a)
pwm1.pulsewidth_us(p);
wait_ms(10);
}
{
for(int q = start; q < end; q += b)
pwm2.pulsewidth_us(q);
wait_ms(10);
}
}
オンラインIDEで、コードを整形すると分かりやすいと思います(HELP アイコンの隣の Format Code)。
for ループ内から wait_ms() 関数呼び出しを行うのであれば、以下のようになると思います。
while(1){
sampleTemp();
float k=getAvgTemp1()-getAvgTemp2();
float i=getAvgTemp3()-getAvgTemp4();
pc.printf("Temp1:%f\nTemp2:%f\n",getAvgTemp1(),getAvgTemp2());
pc.printf("Temp3:%f\nTemp4:%f\n",getAvgTemp3(),getAvgTemp4());
a = k * 2;
b = i * 2;
for(int p = start; p < end; p += a) {
pwm1.pulsewidth_us(p);
wait_ms(10);
}
for(int q = start; q < end; q += b) {
pwm2.pulsewidth_us(q);
wait_ms(10);
}
}