RSコンポーネンツさんに発注していたAD737が届きました。AD737は入力信号のRMS値をDC信号として出力してくれるすぐれものなんですよ。早速データシート通りの回路を組んでみて試してみました。200kHzくらいまではすごく素直にRMS値が出ます。
理由は明かせませんが、時計用の水晶発振子(32.768kHz)、中身は音叉型というかチューニングフォークになっているものを使う必要というものがありました。普段は4MHzとか10MHzくらいの水晶振動子を使っているので、今回もその発振回路を使っておけばいいじゃな~い。くらいにはじめたのですが、時計用の水晶発振子は発振してくれませんでした。それでいろいろ調べてみましたが、これでうごくんじゃ~いという情報はないのね・・・。それでもなんだかかんだかやって、なんとか発振するようになりました。図が動作した回路の回路図です。えらそうに書いてみたものの教科書にあるままじゃないかと思われるかもしれません。本当にそのままです。ちなみに、時計用の発振回路はブレッドボード上ではなかなか動かないとかいう情報も見られましたが、できるだけコンパクトにまとめるようにしていますが、ブレッドボード上での動作確認もできました。
正解がわかった上での反省タイムですが、発振しなかった回路はR2をゼロ(つまり何もいれずに配線しただけ)にしていました。だってMHz程度の発振をする水晶振動子にこの回路を使う場合、普通R2っていれませんよね?教科書にさえ書いてなかったりするわけですから。でも、この時計用の水晶振動子については京セラさんのホームページによると「音叉振動子はMHz帯ATカットの厚みすべり振動モードの水晶振動子とは異なる屈曲振動モードで振動します。音叉振動子は許容値を超えた励振電力で動作させると内部の水晶片が破壊されます。330kΩ程度のダンピング抵抗Rdを使用して励振電力を低減して水晶振動子の破壊を予防しましょう。」とあります。結局、通常のMHz台の発振をする水晶振動子と中身がことなっているから励振電力が不用意に大きくするとまともには動かないからR2で適当なレベルまで下げてね♪ということのようです。
ちなみに、どこでも注意されることですが、ICには74HC04ではなく、そのアンバッファタイプである74HCU04を使用しましょう。また74HCU04の使用していないゲートの入力端子はグランドなり電源なりに落としておくこともお忘れなく。
Arduino関連の情報を探すとシリアル通信はSerial.printやSerial.printlnなどをつかったテキストで通信することが主であるように感じます。簡単ですし、直感的ですし、ArduinoIDEのシリアルモニタでも見られますから便利っちゃあ便利なんですが、当然データ量がおおくなります。例えばn=255としてprintln(n,DEC)なんてやると「255」+CR+LFと5バイトも送っちゃうことになります。遅くてもいいならこれでも充分なんですが、ちょっと真剣になにかやろうとすると時間的なネックになります。そこでバイナリモードを使います。使うコマンドはSerial.write(配列, データ長)です。これを使えばCR+LFといったデリミタを無視できるし、そこそこ長いデータも一括転送できるという御利益があります。デメリットはPCB側などがちょっと鬱陶しくなる。とりあえず動作テストにサンプルスケッチを組んで見ました。
byte x[512];
int n;
void setup(){
Serial.begin(9600);
for (n=0; n<256; n++){
x[2*n]=n;
x[2*n+1]=n;
}
}
void loop(){
Serial.write(x,512);
delay(3000);
}
実行すると3秒に1回の割合で1,1,2,2,3,3・・・・255,255という512バイトがドサッと送られてきます。
F-BASIC ver6.3で受けるサンプルプログラムも公開!正に誰得な情報!
open "COM4:(S8N1N8)" for input as #1
baud 4,9600
BUF$=space$(512)
*main
'print lof(1)
buf$=input$(512, #1)
for n=0 to 511
print asc(mid$(buf$,n+1,1))
next
goto *main
close #1
COMポートは自分の環境に併せて変更すること。
殺してあるLOFは受信バッファ内のデータ数を示すもの。
なんか時代は自分用のCNCフライスじゃね?ってことで昨年の秋口から、「できるだけしょぼい構成でなんとなくCNCフライスっぽいものを作ってやろうプロジェクト」が密かにうごいていました。目標はプリント基板やアクリル樹脂、アルミなどの軽金属を切削できるところまで持って行いくのが最終目標です。
とりあえずよくわからなかったので下の写真がタミヤの工作シリーズの基礎構造材+秋月で数百円で買えるステッピングモータを組み合わせてXY軸を作ったものです。左の穴あきボードの集まりが加工部分で、右側がArduino+PICマイコンで作った2軸のモータドライバです。ちなみにZ軸は動きますが、モーターもつけていなければモータードライバも無いと言う状況ですので、とりあえずZ軸に油性ペンを持たせてみました。XY軸を操作し、正方形をかいてみました。
下の写真が制御部です。PCとの通信をArduinoUNOが解釈し、PICとFETで構成されたモータードライバを制御するという方法でステージをうごかしています。一応奥にはZ軸用のドライバを組み付けるだけのスペースは確保しています。
実際に5回同じ場所で正方形を書いた結果です。目で見る限りはそこそこの正方形になっているとおもいます。1辺の長さからモーター5000ステップで約8.5mmの移動量ということがわかります。素直に割り算すればモーターの1ステップで1.6ミクロンぐらいですかね。プリント基板を加工するには充分すぎると思います。
やってみた結果、やはりというべきでしょうがプラスチックの板で作るのは強度的に厳しい。特にZ軸はプロクソンのリューターをつかうつもりなのでちょっとつらいという問題点が浮き上がってきました。これは骨格を木製にすることで回避できるのではと考えています。あとはGコードを解釈するプログラムを作るか、MACHみたいな出来合いを使うかという問題もありますし、リミットスイッチはやっぱり欲しいです。
最近はちょっとしたことはArduinoをつかっていたが、故あってPICでなければいけない案件(というほどのものでもないが)にあたった。さてということで、準備を始めたわけですがきれいさっぱり忘れていた。PICについてもアセンブラでがりがり書くことは出来れば避けたいのでmikroBasicなるものをつかっているのですが、ArduinoのIDEと比べるとしょぼい。mikroBasicってBasicっていうわりにはハードウエアを意識しなくちゃならんところが特にひどい。Arduinoを知る前までは普通だと思ってやっていたのに、今になれば愚痴しか出ない。これって安易なArduinoに走ったゆえの堕落なんでしょうか。
定格5Vを加えてプランジャが飛び出す先にビー玉をおいてみました。水平な机の上で試してみましたがプランジャにおされたビー玉はゆるゆると転がる程度で、飛んでいくようなことはないのであまり面白くありませんでした。
何かしらの役に立てようと思いますが、とりあえずはお蔵入りかな。
ここからもデジタル入出力できるんです。やり方はA0~A5を14~19と順に読み替えて通常のデジタルピンの設定をしてしまえばOKです。ですからA0をデジタル出力ピンとして使いたいのであればpinMode(14,OUTPUT);としておけばあとはdigitalWriteで出力制御できるんですよ。うーん便利だよな。
電流を0%,20%,60%,100%と設定できることと正負の反転ができるので2つあれば、バイポーラ型のステッピングモーターにちょっとしたマイクロステップをさせられる。RSコンポーネンツで500円ぐらい。
マイコンボードを使うときにはグランドを忘れないように注意しよう>自分