2011年2月21日月曜日

A/Dは3.3Vなのね


A/Dのお試し。VRの両端に電源電圧をかけて、真ん中の端子から分圧された電圧を取り出して使うのが常套手段であります。
サーボのコネクタはVRと順番が異なるが電源電圧と信号線があるので都合がいい。
(順番は入れ替えねばならない)

で、
5VがVRの両端にかかるようにしてGEMMYのアナログ入力ピンに接続して動いた。
VRを回すと0.0-->1.0の値が表示されサーボが然るべき角度になる。

あれ・・・・?

VRの上のほうが余っている。回しきらないのに 値が1.0になって当然サーボもそれ以上回らない。

はは~んと、VRから出る電圧をあたる。やはり3.3V で値が1.0になる。
A/Dの入力がフルスケールで3.3V。

テストだから理由がわかればそれでおしまいなのだが、そこは趣味だから、
好きなところまでやってみる。

A/Dコンバータに外から基準電圧を入れる方法があるのだがmbedのデータシートを見ても見つからない。
これは安易に信号の方を3.3Vにしたほうが良さそうだ。電流も僅かなのでVRの両端にかける電圧を  5Vから分圧すれば十分である。例えば、33KΩのVRに17KΩの抵抗を直列に入れれば良い。

なのだが、このあと3.3V動作のセンサーをつなぐことも多そうなので、簡単な電源を作っておくことにした。と言っても5Vに3.3Vの3端子レギュレータをつなぐだけである。
ワークベンチにユニバーサル基板をくっつけたが、この前リセットボタン用にGEMMYにくっつけた
基板でも十分乗る。

実はmbedに3.3v出力があるのだがショートでもさせてレギュレータを焼失すると、まるごと使用不能は痛いのでこのようにした。
実際に使うときセンサーの消費電流がはっきりわかっていればmbedからとっていいだろう。

VR式のサーボテスター。
プログラムは、たったこれだけ。

#include "mbed.h"
#include "TextLCD.h"
#include "Servo.h"

TextLCD lcd(p11, p12, p27, p28, p29, p30); // rs, e, d4-d7

Servo myservo(p26); //GEMMY C1 CONNECTOR

AnalogIn ad(p15);   //GEMMY A1 CONNECTOR

int main() {


while(1){
double a = ad.read();
myservo = a;
lcd.cls();
lcd.printf("AD TEST %4.2f",a);
wait(0.1);
}

}