動画はこちら

https://www.youtube.com/watch?v=rNyItR_EDPk&feature=youtu.be

例題1:サーボモータを制御 その1

int main (void)
{
volatile int i; //遅いメモリに割り当てるインターバルの時間を変えないようにする
int high;
const unsigned short MainCycle = 50; //50Hzに保つ
Init(MainCycle);
LPC_IOCON->PIO2_4=0xd0; //PIO2_4レジスタをIOポートとして使うための設定。2進数で00011010000を代入、
//3,4ビット目を10にしてプルアップ抵抗を使うモードに、10ビット目を0にして通常の入出力IOポートとして設定
LPC_GPIO2->DIR |= (1<<4); //GPIO2DIRレジスタの4ビット目だけを1にして、PIO2_4を出力IOポートに設定 LED(1);//緑LED点灯 while(1){ Sync(); //while文の{}内の周期を50Hzに保つ if(getSW()==1){ //ボタンが押されたら high=4959; //ロボット用サーボモータを-90度にするための約1.0ミリ秒(実際は0.9ミリ秒くらい)を作るための値 } else{ high=8265; //ロボット用サーボモータをニュートラル位置にするための約1.5ミリ秒を作るための値 } LPC_GPIO2->DATA &=~(1<<4); //PIO2_4を0V(low)にすると、サーボモータの信号5Vとなる for(i=0; iDATA |=(1<<4); //PIO2_4を3.3V(high)にすると、サーボモータの信号が0Vとなる
}
}

@@@@@@@@@@@@@@@@@@

例題2:サーボモータを制御 その2 ARMマイコンのPWM出力機能を使用

int main (void)
{
const unsigned short MainCycle = 50;//50Hzに保つ
Init(MainCycle);
LED(1);//緑LED点灯
while(1){
LPC_TMR32B0->MR0=109227;//ロボット用サーボモータをニュートラルの0度に指定
//トランジスタを介して、highの時間約1.5ミリ秒、周期20ミリ秒でpwmを出力する。
//※トランジスタで信号のhigh,lowが反転するため、109227の値はlowの時間を指定している
Wait(500); //0.5秒待つ
LPC_TMR32B0->MR0=66111; //ロボット用サーボモータを-90度に指定
//トランジスタを介して、highの時間約1.0ミリ秒(実際には0.9ミリ秒くらい)、周期20ミリ秒でpwmを出力する
//※トランジスタで信号のhigh,lowが反転するため、66111の値はlowの時間を指定している
Wait(500); //0.5秒待つ
}
}

@@@@@@@@@@@@@@@@@@