サーボモーターを使ってみた-その2(ハードウェアPWM編)

前回に引き続き、サーボモータの制御をRaspberryHabuで試します。
今回はハードウェアPWMを試しましょう。

DSC01521

基本的にはソフトウェア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で出力します。

DSC01522PWM出力約10%時

DSC01523PWM出力約70%時

動いているのがわかります。基本的にはソフトウェアPWMと同じです。出力を0→1023に変えていくと右回りに角度が変化します。
ソフトウェアPWMはCPUの負荷によってはガタ付きなどが発生するため、安定して動かすにはハードウェアPWMのほうが望ましいと思われます。

次回はソフトウェアPWMとハードウェアPWMを比較してみます。

ブックマーク へのパーマリンク.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>