前回に引き続き、サーボモータの制御をRaspberryHabuで試します。
今回はハードウェアPWMを試しましょう。
基本的にはソフトウェアPWMの回と同じつなぎ方ですが、RaspberryPiのハードウェアPWMが使えるのはRaspberryHabuのデジタル出力1番ピンにつながっているところだけなので白(PWM)をRaspberryHabuのデジタル出力1ピン、赤をVCC、黒をGNDにつなぎました。
ソフトウェアPWMの信号は0から99の値で設定しますが、ハードウェアPWMの信号は0から1023の値で設定します。
/* servo-hardpwm.c Lisence CC0. */ #include "stdio.h" #include "stdlib.h" #include "wiringPi.h" int main() { if (wiringPiSetup() == -1) { printf("setup error!"); exit(1); } pinMode(1, PWM_OUTPUT); while(1){ pwmWrite(1,700); printf("channel 1:pwm 70\n"); sleep(2); pwmWrite(1,100); printf("channel 1: pwm 10\n"); sleep (2); } }
今回はWiringPiライブラリの関数であるhardPWMを使ってみました。
pinModeでPWM出力の設定をし、pwmWriteで出力します。
動いているのがわかります。基本的にはソフトウェアPWMと同じです。出力を0→1023に変えていくと右回りに角度が変化します。
ソフトウェアPWMはCPUの負荷によってはガタ付きなどが発生するため、安定して動かすにはハードウェアPWMのほうが望ましいと思われます。
次回はソフトウェアPWMとハードウェアPWMを比較してみます。