なんでも作っちゃう、かも。

Arduino/Make/フィジカルコンピューティング/電子工作あたりで活動しています。スタバの空きカップを使ったスタバカップアンプなど製作。最近はもっぱらArduinoと3Dプリンタの自作に興味があります。

Arduinoで遊ぼう - 周波数カウンタ

Posted by arms22 on 2009年06月23日 9  0

テルミンの製作でハートレー発振回路の発振周波数を調節する必要がでてきた。何とかArduinoで測定出来ないかと、Arduinoで周波数カウンタを作れないか調べてみた。すると次のページで「Freq Counter」という高精度、高解像度の周波数カウンタライブラリが公開されていた。

Arduino Frequency Counter Library

入力はデジタル端子の5番に固定されていて、この端子はT1の16ビットハードウェアカウンタにマッピングされている。入力信号はデジタルレベルである必要があり、微弱信号はトランジスタか、74HC14インバータを使って増幅させる必要がある。
入力できる周波数は最大8MHz(デュティー50%時)。

使い方
1.上記のページからFreq Counterライブラリをダウンロード
2.ライブラリを解凍し、arduino-0016/hardware/librariesにコピー
3.新しいスケッチを開いて、Sketch->Import Library->FreqCounterを選択

プリアンプ回路図
preamp.png

※トランジスタは2SC1815でOK。


サンプルスケッチ

#include <FreqCounter.h>

void setup() {
  Serial.begin(9600); // connect to the serial port
  Serial.println("Frequency Counter");
}

long int frq;
void loop() {
  FreqCounter::f_comp = 8;             // Set compensation to 12
  FreqCounter::start(100);            // Start counting with gatetime of 100ms
  while (FreqCounter::f_ready == 0); // wait until counter ready
  frq = FreqCounter::f_freq;            // read result
  Serial.println(frq); // print result
  delay(80);
}



Making Things Talk -Arduinoで作る「会話」するモノたち
Tom Igoe
オライリージャパン
売り上げランキング: 15890
価格: ¥ 3,990



Ads by Google

9 Comments

もんちっち says..."周波数"
はじめまして。
いつも勉強させて頂いております。
40MHz前後の周波数を計測したいのですが、Arduinoではどうしても無理でしょうか?何か外部回路を工夫して上記レベルの周波数をSDカードに流し込みたいのですが。もしお知恵が御座いましたらよろしく御教授お願い致します。
2012.01.20 16:30 | URL | #- [edit]
arms22 says..."Re: 周波数"
40MHzのアナログ波形をサンプリングしてSDカードに保存したい、ということ?
それはデジタルオシロスコープ買ったほうがいいんじゃないかと。。

40HzぐらいならADCぶん回して保存すればいいと思います。
ADCは割り込みで駆動で、サンプリングした値はある程度バッファリングさせて
一気にSDカードに書き込むようにすれば途切れなく保存できるんじゃないかな。たぶん。
ただSDカードへの書き込み速度が遅いのでちょっと厳しいかもしれません。
2012.01.21 10:24 | URL | #- [edit]
wiwao says..."周波数カウンタ"
このブログで色々勉強しています。
発展途上国に電気部品を出荷していますが、電力事情が悪く現地の電圧のロガーを作ろうとしています。電圧に関しては電力計のスケッチを参考にして信号用のトランスでSDカードに記録しようと思います。周波数も変わるとの事で電力計のスケッチで波形を記録するとデータが大きくなるので、この周波数カウンタで記録しようと思いますが下記のエラーが出て上手く書き込み出来ません。IDE1.04です。
sketch_may01a.ino: In function 'void loop()':
sketch_may01a:10: error: 'FreqCounter' has not been declared
sketch_may01a:11: error: 'FreqCounter' has not been declared
sketch_may01a:12: error: 'FreqCounter' has not been declared
sketch_may01a:13: error: 'FreqCounter' has not been declared
夏場の瞬時停電を検出する為に1秒毎に電圧、周波数をSDに記録しようと思います。期間は1週間程度。
もしお手間で無ければご助言頂けると幸いです。
2013.05.01 16:59 | URL | #- [edit]
arms22 says..."Re: 周波数カウンタ"
こちらのURLからArduino 1.0に対応したライブラリをダウンロードして試してください。
最新版で正常にビルドできることを確認しました。

http://interface.khm.de/index.php/lab/experiments/arduino-frequency-counter-library/
2013.05.03 14:14 | URL | #- [edit]
wiwao says..."No title"
おやすみのところご連絡ありがとうございます。
frequency counter lib exampleで同じエラーが出てしまいます。
他いろいろな情報も参照していますが良くわかりません。namespace等も調べてみましたが、どこかで手順を間違っているように思います。zipを展開してフォルダーをライブラリーにコピーすると同じタブが出ているのでファイルを消してみたりもしましたがどうも上手く行きません。他の人のブログを見る限り私のような事は起こっていないのでいろいろしてみました。
2013.05.05 11:08 | URL | #- [edit]
wiwao says..."追伸"
商用電源60hz位までなのでpulseInでパルスの長さで計算出来るので実験してみました。8000−8600位の数字が出ていたので参考位になります。周波数カウンターはまた後日挑戦してみます。電力計等もあわせて大変参考にりました。ありがとうございます。
2013.05.08 10:37 | URL | #- [edit]
wiwao says..."その後"
何とか出来ました。他のページが参考になりました。ありがとうございました。取り敢えず今回の目的はpulseinで進めます。freqcounterも出来るようになりました。
2013.05.21 15:57 | URL | #- [edit]
says..."管理人のみ閲覧できます"
このコメントは管理人のみ閲覧できます
2015.01.07 15:07 | | # [edit]
arms22 says..."Re: No title"
使用できないというのはコンパイルエラーが発生するということでしょうか?
tone関数はArduinoのコアライブラリに組み込まれているので特別なライブラリは必要ないです。
もし正しく動作しないという場合、freccounterで使用しているタイマー1がtone関数でも使われている可能性があります。
2015.01.07 23:14 | URL | #- [edit]

Leave a reply






管理者にだけ表示を許可する

該当の記事は見つかりませんでした。