HOME > natural science Laboratory > ものづくり講座 > AVRマイコン TIPS集

サーボモータを制御するためのデータシート製作をしよう!!

文責:八重樫 和之 (2008年11月19日) カテゴリ:AVRマイコン TIPS集(38)

実験目的

ATmega48におけるdelay関数の誤差を求め、実時間に即したdelay関数を作る。

実験方法

  • 1,マイコンにdelay関数による命令を書き込む
  • 2,delayの時間をオシロスコープで測定する
  • 3,データを1次関数にフィッティングし特性を求める

使用器具

  • オシロスコープ Tekronix TDS 1003
  • マイコン ATmega48

結果

msについて

結果は表1,図1 のようになった。最小二乗法で一次関数にフィッティングすると f(t)=7.65t 誤差率 1.268%となる。 これをプログラミングに直すには

void delay_ms(t) { while (t--) _delay_ms(0.13); } とすればいい。

usについて

結果は表2,図2 のようになった。最小二乗法で一次関数にフィッティングするとf(t)=12.50t 誤差率 0.075%となる。 しかし

void delay_us(t) { while (t--) _delay_us(0.08); }

というプログラムを書くと失敗する。なぜなら\verb|delay_us(0.08);|などという短い時間を測れる装置はないからである。このようなプロうグラミングを行うとまた新たな誤差が生じてしまう。そこで

void delay_us(t) { int tt;
tt = 8*t/100;
while (tt--) _delay_us(1);
}

のように計算式を用いて表すとよい。ただし目安として100usよりも短い時間を入れると計算式は整数しか返せないので打ち込んだ値と大幅にずれる可能性がある。

atmega_ms.gif

atmega_us.gif

yaegahsi_table2.gif

今後の予定~サーボモータの制御へ~

次に以上のデータを用いてサーボモータを制御する

使用するサーボモータ

  • Minis servo RB90
これは1ms~2ms程度の周期、すなわち250~500[Hz]のパルス波を送る。2種類の周波数を交互に送り、その周波数の違いで角度が変わる。また、周波数を送る長さによってモータの速度が変わる。 以下のようなプログラムで試した。

#include <avr/io.h>
#include <avr/delay.h>
void delay_ms(t) { while (t--) _delay_ms(0.13); }
void delay_us(t) {
int tt;
tt = 8*t/100;
while (tt--) _delay_us(1);
}//実測による誤差
int main()
{
int i,j,k;
int sokudo;
int kakudo1,kakudo2;
sokudo=100;
kakudo1 = 1000;
kakudo2 = 2000;
for (;;) {
DDRD = 0xff; // PORT B はすべて出力
// PORTD = _BV(PD1);
// delay_ms(1000);
for(i=0;i PORTD = _BV(PD0);
delay_us(kakudo1);
PORTD = _BV(PD1);
delay_us(kakudo1);
}
for(i=0;i<sokudo;i++){
PORTD = _BV(PD0);
delay_us(kakudo2);
PORTD = _BV(PD1);
delay_us(kakudo2);
}
}
return 0;
}

yaegashi_table.gif



▲このページのトップNPO法人 natural science トップ

▲このページのトップNPO法人 natural science トップ




Warning: mysqli_connect(): (28000/1045): Access denied for user 'xsvx1015071_ri'@'sv102.xserver.jp' (using password: YES) in /home/xsvx1015071/include/natural-science/include_counter-d.php on line 8
MySQL DBとの接続に失敗しました