前回に引き続き、サーボモータの制御を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を比較してみます。


