サーボを使う
サーボモータには,ギアやセンサー,制御回路などが組み込まれていて,マイコンから指定した角度に回転します.
サーボの使い方
詳しい説明は後日.
サーボはPWMで制御します.周期は16~20ms.Hになっている時間が1~2msくらい.
回路
サーボからはオレンジ,赤,茶,の三本の線が出ていると思います.
- 茶 GND
- 赤 Vcc(電源)
- 橙 制御用PWM
今回の基盤上では下方(AVRから遠い側)がGNDです.
プログラム例
ボタンを押すと,少しずつ回転します.
servo_test.c
//////////////////////////////////////////////////////////////////////////// // サーボ サンプル // #include <avr/io.h> #define SERVO_POS OCR1B #define SERVO_MIN 16 // 最小値 #define SERVO_MAX 37 // 最大値 // 指定された時間だけ待つ void wait(uint16_t w){ while(w--){ volatile uint16_t i=200; while(i--); } } void servo_init(void){ //サーボ設定 TCNT1 = 0; // タイマカウンタ初期化 OCR1B = 0; // おかしな位置に回転しないように TCCR1A = (1<<COM1B1); TCCR1B = (1<<CS12) | (1<<WGM13); ICR1 = 0x0110; } int main() { int pos = SERVO_MIN; // 初期位置 DDRB = 0xFF; // モータ DDRC = 0x00; // ボタン DDRD = 0xFF; // モータ,LED PORTC |= 3; // プルアップON servo_init(); SERVO_POS = pos; // 初期位置に移動 for(;;) { wait(100); if ((PINC&1)==0) { if (pos < SERVO_MAX) pos++; SERVO_POS = pos; } if ((PINC&2)==0) { if (pos > SERVO_MIN) pos--; SERVO_POS = pos; } } }
解説
OCR1Bを変化させてサーボ用のPWMのデューティ比を変化させています.OCR1Bは使いやすいように,SERVO_POSという名前でdefineしています.
SERVO_POSに値を代入すると,それに応じた角度にサーボが回転します.SERVO_MINからSERVO_MAXの範囲で動かしてください.今回のサーボは,それ以上は回りません.
この文書の履歴
- 2006-07-13 作成
- 2006-08-05 解説を少し追加・サンプル修正
Copyright © binzume all rights reserved.