calendar

    123
45678910
11121314151617
18192021222324
252627282930 
<< June 2017 >>

categories

archives

ロリポップレンタルサーバ

カラーミー

グーペ

お名前.com

ANA ToMeCard

◆ Raspberrypi2 PWMでサーボモータを動かす

0
    PWMでLEDの輝度を変化させるプログラムを作ったが、やはりPWMでサーボモータを動かしてカメラのパン(左右)、チルト(上下)の制御をやってみたくなり、とりあえず安価なサーボモータ(SG-90:400円)を購入して動作確認をしてみた。
    実際の物を見ると、写真のように非常に小さなサーボモータであることがわかる。
    このサーボモータの仕様は以下の通りである。
    外形寸法:22.2x11.8x31mm
    重量:9g
    動作電圧:4.8V(〜5V)
    PWM 周期(周波数) : 20ms(50Hz)
    ポジション 周期 Duty比 pwmWriteで設定するDuty比
    1.45ms 7.25% 7.25*1024/100=74.24
    90° ~2.4ms 12% 12*1024/100=122.88
    -90° ~0.5ms 2.5% 2.5*1024/100=25.6

    wiringPiでの[pwmWrite()]のDuty比の設定は0〜1024なのでこの点を踏まえて以下の プログラムでは、事前に値を計算して値を保持している。(上記の表参照)
    以下のpythonのプログラムは、サーボモータの動作確認プログラムである。
    # -*- coding: utf-8 -*-
    import wiringpi2
    
    PWM_PIN = 18   # GPIOの18番ピン
    DUTY_MAX = 123 # 90°の時
    DUTY_MIN = 26  # -90°の時
    DUTY_HOME= 74  # 0°の時
    duty = 0       # Duty比の値(0から1024)
    
    wiringpi2.wiringPiSetupGpio()   #winringPiの初期設定
    wiringpi2.pinMode(PWM_PIN, wiringpi2.GPIO.PWM_OUTPUT)
    #「Balanced」→「mark:space」Modeに変更
    wiringpi2.pwmSetMode(wiringpi2.GPIO.PWM_MODE_MS)
    # 周波数を50Hzにすると、18750/周波数=375
    wiringpi2.pwmSetClock(375)
    
    wiringpi2.pwmWrite(PWM_PIN, DUTY_HOME)        # 0°の位置に移動
    wiringpi2.delay(100) #0.1sec
    
    for duty in range(DUTY_HOME, DUTY_MAX+1, 1):  # 0°から90°まで動かす
        wiringpi2.pwmWrite(PWM_PIN, duty)
        wiringpi2.delay(100) #0.1sec
    wiringpi2.delay(500)    #0.5sec
    for duty in range(DUTY_MAX, DUTY_MIN-1, -1):  # 90°から-90°まで動かす
        wiringpi2.pwmWrite(PWM_PIN, duty)
        wiringpi2.delay(100)
    wiringpi2.delay(500)
    
    wiringpi2.pwmWrite(PWM_PIN, DUTY_HOME)        # 0°の位置に移動
    
    

    ひらめき pwmSetModeの変更は周波数を固定にする設定である。デフォルトのwiringpiでは
     DUTY比を変更すると周波数も変更されてしまう。

    ひらめき pwmSetClockの値の設定についてだが、調べたところ以下の条件式が成立するらしい。
     pwm周波数=raspiのPWMが持つベースクロックの周波数/clock×range
     pwm周波数:50Hz
     raspiのPWMが持つベースクロックの周波数:19.2MHz
     range:1024
     clock:pwmSetClockで設定する値
    従ってclockを求める式は、clock=19.2×10^6/pwm周波数×1024となる。
    clock=18750/pwm周波数

    ひらめきGPIOの18番はハードウェアでのPWMをサポートしているが、他に使用可能なのは
     GPIO12,13,19の3つのポートだけである。試しに他のポートを設定したらサーボは
     全く動作しなかった!(あたりまえ)

    コメント
    コメントする








       
    この記事のトラックバックURL
    トラックバック