ATtiny13Aを使ってラジコン用サーボを動かしてみた。
使用したデジタルサーボの仕様は1520μs/333Hzとなっていて、プロポから送信される各チャンネルへの送出周期よりずっと短い。
サーボの動作が本当に追従するのか試してみた。
パルスの幅は600μs~2400μsとし、パルスの周期は333Hzで時間は3ms(3000μs)である。
タクトスイッチによってパルスの幅を変えられるようにしてみた。ソースコードは次のとおり。
#define F_CPU 9600000UL #include <avr/io.h> #include <util/delay.h> #define cls_bit(reg,bit) reg &= ~(1<<bit) // ビットクリア #define set_bit(reg,bit) reg |= (1<<bit) // ビットセット int main(void) { // ポート設定 // 76543210 DDRB = 0b00001001; // PB0:Buzzer(出力) PB1,PB2:Button(入力) PORTB = 0b00000110; // PB1,PB2:プルアップ int sw; int pulse=150; while (1) { sw=0; if ( bit_is_clear(PINB,PB1) ){ sw=1; } if ( bit_is_clear(PINB,PB2) ){ sw=-1; } pulse = pulse+sw; if (pulse>240) pulse=240; if (pulse<60) pulse=60; set_bit(PORTB,PORTB3); for(int i=0;i<pulse;i++){ _delay_us(8.5); } cls_bit(PORTB,PORTB3); for(int j=0;j<300-pulse;j++){ _delay_us(8.5); } } }
信号を計測した結果は次のとおり。
パルス幅 600μs | パルス幅 1500μs | パルス幅 2400μs |
タクトスイッチで変化するパルス幅に合わせ、サーボが動作することを確かめた。