7.wiringPi를 이용한 PWM 실험.


지금 주기와 듀티비를 알아내는 것이 관건인데...

 1

  2 #include <stdio.h>
  3 #include <errno.h>
  4 #include <string.h>
  5
  6 #include <wiringPi.h>
  7 #include <softPwm.h>
  8
  9 #define RANGE      500    //이렇게 하면 주기가 50ms이다.
 10 #define NUM_LEDS   12
 11
 12 int ledMap [NUM_LEDS] = { 0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13 } ;
 13
 14 int values [NUM_LEDS] = { 0, 17, 32, 50, 67, 85, 100, 85, 67, 50, 32, 17 } ; //이건 듀티비!!!
 15
 16 int main ()
 17 {
 18     int i ;
 19     char buf [80] ;   // buffer
 20
 21     if (wiringPiSetup () == -1)
 22         {
 23           fprintf (stdout, "oops: %s\n", strerror (errno)) ;
 24           return 1 ;
 25         }
 26
 27     for (i = 0 ; i < NUM_LEDS ; ++i)
 28         {
 29           softPwmCreate (ledMap [i], 0, RANGE) ;
 30           printf ("%3d, %3d, %3d\n", i, ledMap [i], values [i]) ;
 31         }
 32
 33 ///////////////////////////////////////////////////////////////step1//
 34
 35       fgets (buf, 80, stdin) ; ////////////////////act as scanf(put in anyth
 36
 37             // Bring all up one by one
 38
 39             while(1)  //infinite loop
 40             {
 41             softPwmWrite (ledMap [1], values [6]);  // value=50
 42             delay (50) ;
 43             }
 44 }
 


위처럼 면, softPwmWrite (ledMap [1], values [6])를 했더니 (4편에 빵판사진 LED)

 두 번째 LED가 켜지고 주기는 매우 짧았다;;

1
2
3
4
5
 39             while(1)  //infinite loop
 40             {
 41             softPwmWrite (ledMap [1], values [6]);  // value=50
 42             delay (50) ;
 43             }


LED 는 위 배열에서 1값일거고...밸류가 듀티비인가..

     

보면 주기는 50ms

RANGE를 주파수라 생각하고 500 ㅡ> 주기는 20ms로 생각했는데 실제는 50ms

values는 여전히 듀티비(%)라 가정하고 다시 조정해보자.


values [3] (실제 50)으로 하니까 high인 폭이 더 짧아졌다. (duty비 맞는듯)

그리고 high가 너무 짧아서 LED도 더 어둡게 깜빡인다. 깜빡이는 속도는 같다.


다시 values [6] 해놓고 RANGE만 1000으로 바꿔보았다. LED가 더 느리게 깜빡인다.

 아하... 주기가 100ms가 되었다.


RANGE 1은 0.1ms이다.


자 그럼 위 오실로 사진을 보면 주기는 100ms이고 

RANGE 1000에 values [6](100)을 적용하면 전체주기의 10%만 high값이 출력된다.


만약 주기20ms를 맞추기 위해 RANGE 200, 그리고 values [6](100)을 적용하면

 10ms동안 high가 출력된다.



이제 PWM은 어느정도 완료된듯!


여기서 내가 주기 20ms를 꼭 맞추려고 하는 이유가 있다.

주기가 20ms 라는 것은 20ms 마다 한번씩 파형을 발생시키는 것인데

서보모터 입장에서 20ms 보다 주기가 짧으면 더 많이 모터가 움찔?거려야 하므로 뜨거워진다.

20ms 주기가 서보모터에겐 가장 이상적인 조건이라 한다.

설정

트랙백

댓글