라즈베리파이 이용 자동차 참고자료.

http://blog.naver.com/siam18/193752235

설정

트랙백

댓글

서보용 글리치 필터 회로도

신기하네 +_+


설정

트랙백

댓글

라즈베리파이 관련 RC카 제작정보

http://cafe.naver.com/openrt/1838


요기.

설정

트랙백

댓글

11



코드는 ARM7으로 작성하였고, 서보모터를 통해 좌측 최대, 가운데, 우측 최대를 결정하게 하였음~_~;;

어려움을 겪었던 원인은 PWM에 대해 잘 몰랐고 계산식을 잘못 적었던 것이다. 그리고 서보모터 주기를 20ms 보다는 2ms로 하는게 낫다는 것도 몰랐고...


//model HS-7966HB

//MCK -> 48MHz

//PWM_pin ->

//survo motor 주기: 2ms =(N*CPRD)/MCK (N=16,CPRD=6000) 주기는 20ms가 아니다.


#include "AT91SAM7X256.h"

#include "lib_AT91SAM7X256.h"

#include "OK7S256gcc.h"


#define PWM (1<<10)

#define Prescale_16 (1<<2) //16분주

#define CHID0 (1<<0)

#define PID3 (1<<3)

#define DIV_A (1<<1) // DIV_A와 DIV_B는 정교하게 할 때만 쓰는거다.

#define DIV_B (1<<16)//

#define Prescale_1 (1<<10)

#define Prescale_2 (1<<26)

 

void init_PWM(void)

{

*AT91C_PMC_PCER = (PID3 | PWM);//PIOB,PWM 클럭 허용

*AT91C_PIOB_PDR = (PB19);//주변장치롤 사용

// *AT91C_PWMC_MR = Prescale_1|Prescale_2|DIV_A|DIV_B;   이건 세부조정이라 안쓴다.

*AT91C_PWMC_CH0_CMR = Prescale_16;//분주비: MCK/16

*AT91C_PWMC_CH0_CPRDR = 6000;//주기 20ms

*AT91C_PWMC_CH0_CDTYR = 4200;//0.6ms

*AT91C_PWMC_ENA = CHID0;//PWM ch0 허용

}

void main(void)

{

init_PWM();

//2700->90씩 움직임. == 1350->45도

//58200 -> -90도 

//55500;//1.5ms 0도

//52800;//2.4ms 90도


  *AT91C_PMC_PCER = Prescale_16; // PIOA A켜겠다

*AT91C_PIOA_PER = (PA8)|(PA9);    //LED 두핀의 기능을 입출력 여부시킨다.

*AT91C_PIOA_OER = (PA8)|(PA9);   // LED 두 핀 입력할지 출력할지 결정



while(1){

  *AT91C_PIOA_SODR = (PA8);   // p.119 두 핀에 1을 넣는다 (LED 켠다!)

Delay_ms(2000);

*AT91C_PWMC_CH0_CUPDR = 800;//1.5ms

Delay_ms(2000);

*AT91C_PIOA_CODR = (PA8);  // p.120 해당비트 클리어 = 0

*AT91C_PWMC_CH0_CUPDR = 1900;

*AT91C_PIOA_SODR = (PA9);   // p.119 두 핀에 1을 넣는다 (LED 켠다!)

*AT91C_PIOA_CODR = (PA8);

Delay_ms(2000);


*AT91C_PWMC_CH0_CUPDR = 3000;//

Delay_ms(2000);

}


return 0;


}


아래는 작동영상~~

설정

트랙백

댓글