글
8. PWM 이용한 서보모터 제어.
●프로젝트와 세미나/Raspberry pi
2013. 8. 17. 16:38
먼저 서보모터의 개요이다. 사진처럼, -90에서 +90까지 움직이는데 필요한 duty 시간이 나와있다.
주기가 2ms, 20ms, 40ms 상관없이 high 시그널이 0.6ms동안 오면 -90인 것이다.
따라서 이렇게 하기 위해서 코드를 수정해보면.
RANGE가 1000이었을 때 실제 100ms 였으니까. 6이면 0.6ms 이겠구나.
많이 고칠 것도 없다.
39 while(1) //infinite loop
40 {
41 softPwmWrite (ledMap [1], 6); // value=는 없고 그냥 0.6ms 일 뿐이다
42 delay (50) ;
43 }
여태껏 values[]를 배열형태로 값을 정해놨었는데 그냥 6하면 0.6ms duty값을 줄 수 있다.
0.6 밀리세크!!!
원래는 빵판에 서보모터까지 세팅해놓고 실험하려 했으나 라즈베리파이에 보호회로가 없어서 위험할 수 도 있다는 염려에 나중에 하기로 했다 +_+;;;
왜 위험한건지는 아직 그냥 느낌... 참고자료->(http://cafe.naver.com/openrt/224)
완성된 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #include <stdio.h> #include <errno.h> #include <string.h> #include <wiringPi.h> #include <softPwm.h> #define RANGE 500 //이렇게 하면 주기가 50ms이다. #define NUM_LEDS 12 int ledMap [NUM_LEDS] = { 0, 1, 2, 3, 4, 5, 6, 7, 10, 11, 12, 13 } ; int values [NUM_LEDS] = { 0, 17, 32, 50, 67, 85, 100, 85, 67, 50, 32, 17 } ; //이건 듀티비!!! int main () { int i ; char buf [80] ; // buffer if (wiringPiSetup () == -1) { fprintf (stdout, "oops: %s\n", strerror (errno)) ; return 1 ; } for (i = 0 ; i < NUM_LEDS ; ++i) { softPwmCreate (ledMap [i], 0, RANGE) ; printf ("%3d, %3d, %3d\n", i, ledMap [i], values [i]) ; } ///////////////////////////////////////////////////////////////step1// fgets (buf, 80, stdin) ; ////////////////////act as scanf(put in anyth // Bring all up one by one while(1) //infinite loop { softPwmWrite (ledMap [1], 6); // value=는 없고 그냥 0.6ms 일 뿐이다 delay (50) ; } } |
'●프로젝트와 세미나 > Raspberry pi' 카테고리의 다른 글
10. 시리얼 통신 헤더파일(wiringSerial.h) 분석. 인터럽트처럼 동작할 수 있게 코드변환. (2) | 2013.08.22 |
---|---|
9. 시리얼통신-라즈베리 통신하기-후에 블루투스로 통신 (1) | 2013.08.19 |
7.wiringPi를 이용한 PWM 실험. (2) | 2013.08.17 |
6. 지갑잃어버림, 노트북 무선랜카드 망가진듯... (0) | 2013.08.16 |
5. 랜 케이블 하나로 라즈베리파이 접속하기 (1) | 2013.08.15 |