2014年6月8日日曜日

PWMでサーボ動かす

PWMでサーボを動かしてみた。
サーボにVCC,GND,PWMの線をつなげば動いた。
今回は、Amazon で2個入り980円で売ってるTowerPro Micro Servo SG90を使った。
PWMはOCR0Bから出した。

サーボは周期を20msくらいにして・・・らしい。
よくわからん。
とりあえず、8bit高速PWM、前置分周を64分周にしたらいいらしい。
ほかにもなんか書いてあったけど、、、よくわからん。
ていうか、前置分周がわからん。
読んだけどわからん。

後、サーボの角度とプログラムでの数値 i は、
i = (角度)/7 + 9
らしい。
i = (角度)/7 + 8
のほうが安定するらしい。

とりあえず、プログラムこんな感じ。



/* Name: main.c
 * Author: <insert your name here>
 * Copyright: <insert your copyright message here>
 * License: <insert your license reference here>
 */

#include <avr/io.h>
#include <util/delay.h>


int main(void)
{
    TCCR0A = 0b10100011;
    TCCR0B = 0b00000011;
    
    DDRD = 0xff;
    
    OCR0A = 0x00;
    OCR0B = 0x00;
    /* insert your hardware initialization here */
    for(;;){
        //if(OCR0A == 0x80) OCR0A = 0x00;
        //OCR0A ++;
        //_delay_ms(1);
        
        OCR0B = 14;
        /* insert your main loop code here */
    }
    return 0;   /* never reached */

}

なんかよくわからんけど、とりあえず動いた。
うーん。。。
とりあえず、次はA/D変換のピン使ってアナログ値を読むことをがんばる。

0 件のコメント:

コメントを投稿