16
18

More than 5 years have passed since last update.

【C】Edisonでラジコンサーボを動かす

Last updated at Posted at 2014-12-01

表示ができたら,次は駆動だ.

サーボモータの制御

サーボモータとは

サーボモータとは,ミニ四駆で使われているような,電源を入れたら回りっぱなしのモータに角度を制御するユニットが付属していて,外部からの信号を入力して回転角度を任意に設定できるモータのことです.出力できる角度や角速度,トルクなどは,それぞれのモータによって異なります.
古典的なラジコンサーボモータは,回転角度をアナログな電圧で入力していたのですが,近年は,PWM(Pulse Width Modulation)信号と言う,周期的なパルス信号で入力する方式が一般的です.さらに最近は,角度をUARTやSPIで入力できるサーボモータも増えてきたのですが,今回は,一番対応しているサーボモータの種類が多い,PWMを使用する方式でやってみます.

ラジコンサーボモータの制御信号

ラジコンサーボモータに角度を入力する信号は,厳密に規格が決まっているわけではないため,実はメーカーごとに違います.今回は,50[Hz]で1.5±0.5[ms]で制御するサーボモータを対象にします.
このラジコンサーボモータは,1.5[ms]の間 H ,18.5[ms]の間 L の信号を連続して受け取ったときに,可動角のちょうど中心の角度を保持します.1.0[ms]と2.0[ms]の信号を受け取ったときは,可動角の限界の角度を保持します.

回路

ラジコンサーボモータをEdisonから制御するときに,一番問題となるのが,信号の電圧レベルです.だいたいのラジコンサーボモータは,3.3[V]程度の電圧レベルでも十分,H信号とL信号を見分けてくれるのですが,Edisonの標準信号電圧レベルの1.8[V]だと,さすがにキツい.
そこで,電圧レベル変換ICを使用して,電圧レベルを変換します.
レベル変換回路
74VHC125というレベル変換ICを利用します.このICは,1.5[V]の入力レベルでHと判断し,後段に変換後の電圧を出力します.上の図のように,125の2番ピンにEdisonからの信号(J18-7)を接続し,3番ピンをサーボモータの入力ピンに接続してください.1番ピンは,このICのEnable端子なので,GND(J19-3)につないでください,また,125に電源を供給するため,14番ピンには3.3[V](J20-2)を,7番ピンにはGND(J19-3)をつないでください.

プログラム

servo.c
#include <stdio.h>
#include <mraa.h>

int main(int argc, char *argv[])
{
    mraa_init();

    mraa_pwm_context pwm;
    pwm = mraa_pwm_init(20);
    mraa_pwm_period_us(pwm, 20*1000);   // 20[ms]
    mraa_pwm_enable(pwm, 1);

    int i;
    const int STEP = 20;
    for(i=0;i<STEP;i++){
        mraa_pwm_write(pwm, 1.0/15.0+1.0/15.0/STEP*i);
        usleep(200*1000);   // 0.2[s]

        float out = mraa_pwm_read(pwm);
        fprintf(stdout, "PWM0 : %f\n", out);
    }

    mraa_pwm_enable(pwm, 0);

    mraa_deinit();

    return ret;
}

実験結果


クリックすると,動画に飛びます.

まとめ

  • ラジコンサーボモータはPWM信号でコントロールできる.
  • Edisonからサーボモータに信号を伝えるには,途中で電圧のレベル変換をする必要がある.
  • EdisonからのPWMは,MRAAライブラリから簡単にできる.
16
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
18