Monthly FB NEWS 月刊FBニュース 月刊FBニュースはアマチュア無線の電子WEBマガジン。ベテランから入門まで、楽しく役立つ情報が満載です。

ものづくりやろう!

第二十一回 Arduino Unoでつくる簡易周波数カウンタ

JH3RGD 葭谷安正

2023年2月1日掲載

1. 概要

・Arduinoのライブラリを使用して簡単な周波数カウンタをつくりました。
・Arduino互換機では水晶発振器の周波数からずれていました。
・同じソフトをArduino Nanoに移植するとほぼ正確な値が表示されました。
・ボード上の発振器の発振周波数がずれているのかもしれませんね。

2. はじめに

半年ほど前に私の持っていた周波数カウンタが壊れてしまいました。そのうち修理しようとしばらく手元に置いていましたが、古い物ですし修理する時間もないので結局捨ててしまいました。

ところが、新年早々ちょっと音声周波数帯信号の周波数を測る必要が出てきました。手持ちの部品でサササット作れないかと思ったときに何年か前知り合いがネット情報で見つけたArduinoの周波数カウンタを作っていたのを思い出しました。Arduino周辺の回路もトランジスタと数個のコンデンサや抵抗で作られているシンプルな回路でしたので、ネットで資料をさがしてつくることにしました。

3. 回路図と必要部品

いつもの「Google先生」にお聞きしました。「周波数カウンタ、arduino」のキーワードで検索をかけると何件かの国内サイトがでてきましたので、先頭から順番に見ていきましたところ、以前見た回路とこの周波数カウンタのArduinoライブラリのホームページを見つけました(写真1)。
URLはこちらです。https://www.pjrc.com/teensy/td_libs_FreqCount.html


写真1 周波数カウンタライブラリホームページ

Arduinoのライブラリを作って公開されています。内容はライブラリの概要とプリアンプの回路、プログラムソースについて説明されています。また、https://www.arduinolibraries.info/libraries/freq-countに移動すると、Arduino Unoや他のボードに対応するライブラリが置かれています。

このページの中に見える「FreqCount-1.3.zip」をダウンロードしてArduinoの開発環境に取り込みます。この周波数カウンタはどれくらいの周波数までカウントできるのかも記載があり、計測可能範囲は、「8MHz位まで」との記載があります。その言葉を信じてArduino版簡単周波数カウンタを作成しました。なお、ライブラリのArduino IDEへのインストール方法については記載省略させていただきました。

4. 回路図

ソフトウェアの準備が整いましたが、Arduinoに取り込む前に周波数を計測したい信号をデジタルピンから読み取るための周辺回路を先に準備します。図2がHPに記載されている周辺回路の回路図です(https://www.pjrc.com/teensy/td_libs_FreqCount.htmlの下方に書かれています)。

日本国内でもこのページを参照してカウンタを作られた方が沢山おられるようで、皆さん方はこのページの回路をもとに自分なりに少し改良を加えたり、回路図中のトランジスタを入手の容易な互換品に変えて自作されておられるようです(図2)。

私もこのトランジスタ2N3904を手持ちの2SC1815に変えて、ほかはこのままで作成しました。


図2 元の回路図

この図をもとに
変更点
①2N3904    ⇒ 2SC1815
②74HC14   ⇒ 74HC04
③TEENSY 2.0 ⇒ Arduino UNO
④マイコンへの信号入力Pin 11 ⇒ デジタルピンD5

回路は次の図3のように変更しました(部品を変更しただけですが)。


図3 周辺回路の回路図(図2を一部変更)

74HC14の代わりに74HC04を使用したのは、74HC14が手持ち部品の中になかったからです。ライブラリの製作者のHPではシュミットトリガタイプの74HC14を推奨していましたので動作が怪しいときに困るかもしれません。

2SC1815やArduino互換ボードも、手元にあった互換品という理由です。

5. ハードウェアの組み立て

図3の回路をもとにブレッドボード上に部品を配置していきました。部品数も少ないため、部品が手元にあればあまり時間がかかりません。組み上がったものが写真4です。


写真4 周辺回路

水晶発振器を入れてありますが、図3左の入力端子の前に発振器を入れておきました。後ほど行う動作チェックのためです。

6. プログラムのダウンロード

プログラムはホームページのサンプルをそのまま使用しました(図5)。


図5 プログラムリスト

プログラムからわかるように、入力した信号の周波数はSerialコマンドでパソコン側に送られ、パソコン側で表示するようにプログラミングされています。

パソコン側ではなく、このマイコン上に液晶ディスプレイを載せてそのうえで表示したい等変更する場合はこのソースプログラムに追記していきます。

プログラムは、プログラムリストのようにライブラリ関数FreqCountを使って短いプログラムになっています。 このライブラリの作者の前出のページに使い方が書かれています。この周波数カウンタのライブラリは4つのコマンドだけです。これだけでカウンタを構成できます。

(1) FreqCount.begin(1000);
周波数計測の開始。カッコ内の数値はゲート間隔をミリ秒で指定

(2) FreqCount.available();
周波数計測を繰り返すとき、計測データが更新され、読み込み可能になったときにTrueになる関数です。

(3) FreqCount.read();
FreqCount.available()がTrueになったときに、この関数で周波数を読み込みます。

(4) FreqCount.end();
周波数カウンタの終了です。繰り返し計測するときにはこのコマンドの記載がないプログラムになります。

便利ですね! このプログラムを動かすとシリアルモニタ上を計測結果がながれていきます。

7. 動作確認

ソフトウェアのインストールと周辺回路の組み立てが済んだら動作チェックを行います。

動作チェックは、入力から信号を入れ、その信号の周波数と同じ周波数値が表示されればOKです。ライブラリの精度はそんなに高く無いとおもいますので過大な期待をしないようにしましょう。

ブレッドボードに電源を入れるとすぐにLEDが点灯しました。この状態で入力信号としてオシロスコープに載っている1kHzのキャリブレーション信号を入れて計測しました。パソコン上をながれていくデータを見ていると30ヘルツほどずれているようです(図6)。


図6 計測動作確認結果

以前計測したときには、ほぼ1000±1Hz程度だった記憶があります。おかしいなという疑念しかわきません。とりあえず、正確さをそんなに必要とする計測ではなかったのでいったん終わることにしました。

8. 何が悪いのか調べてみる

1kHzのCAL信号を計測させても1.030kHzと表示されるのはどうも気持ちが悪い。そこでもう一度条件を変えて調べてみることにしました。
不具合原因の可能性としては、
(1) 互換マイコンの不具合
(2) ソフトウェアの不具合や計測限界を超えた入力を入れた場合
(3) プリアンプやインバータ回路への入力信号が小さすぎるまたは大きすぎる
(4) プリアンプやインバータの動作不良など

でしょうか。波形を見るのが手っ取り早いので、回路の各部波形をオシロスコープで観測しました。計測ポイントを次の3点にして波形の観測をおこないました。

その前に、高周波を扱うのでブレッドボードではなくはんだ付けをおこなうべきですが、すぐにばらすつもりですので、せめてノイズの影響などが少なくなるように配線をやり直しました。

写真7のようにしました。少しすっきりしたと思います。


写真7 配線の整理


図8 信号源(水晶発振器)の接続とテストポイント(TP1~TP3)

図8のように入力として5MHzの水晶発振器をつけました。8MHzまで計測できるという記載を信じて5MHzを入力して計測してみました。

周波数を計測すると、「4.985MHz」。少なく出ました(図9)。


図9 5MHz信号の計測結果(左数値)

正確な発振周波数を知るために知り合いの方に簡易な周波数計を借用して5MHzの水晶発振器の出力を計測することにしました。その周波数カウンタでの計測結果が写真10です。


写真10 別の周波数カウンタによる5MHz水晶発振器の周波数計測

こちらも正しいのかは不明ですが、一応製品ですので当方作成のカウンタよりは信頼できそうな周波数を表示しています。

各部の波形はと言うと、写真11,12,13のようになりました。


写真11 水晶発振器出力波形(TP1)


写真12 プリアンプ出力波形(2SC1815コレクタ出力:TP2)


写真13 74H04出力波形(マイコン入力波形:TP3)

周波数がかわってしまうような要因は見当たりません。ということで、マイコンをうたがいました。今度はArduino Nanoに周波数カウンタソフトを入れ、計測することにしました。Arduino Nanoはこのライブラリの互換リストには掲載されていませんでしたが、性能的には同じでUNOを小型化したものがNanoと思います(写真14)。一部UNOにあってNanoにポートもあるようですが、周波数カウンタについては同じ性能と思います。


写真14 Arduino Nano(左)とUNO互換ボード(右)

Nanoにカウンタソフトを転送し、計測しました。結果は、図15のように5MHz(5000974Hz)になりました。


図15 Nanoの計測結果(入力信号周波数5MHz)

マイコンボードにより計測結果が違いました。使用するときに気を付けてください。

9. 回路製作に使用した部品(主要なもの)

今回の回路製作に使用した主要部品を表16にまとめました。


表16 使用部品

10. あとがき

ここで紹介しました周波数カウンタはその後ばらしてしまいました。やはり計測器はある程度精度のあるものでなければ製作時に不安が残ります。今後も使っていけるものを入手しようとおもいます。

先日、ジャングルを徘徊しましたら、50MHzまで計測できるというカウンタテスタキットが1000円を切る値段で販売されていました(写真17)。自作より安い。私はまだ買っていませんが、どんなのかなと興味をそそられています。安かろう、悪かろうというのもありますが、この頃の中国製製品は大当たりの物もありますよ。国産にも目を向けながら外国製の安価でよさそうなものも探していきたいと思います。きっと、明日には「ポチっ」としていると思います。


写真17 カウンタキット(一例)

ものづくりやろう! バックナンバー

2023年2月号トップへ戻る

サイトのご利用について

©2024 月刊FBニュース編集部 All Rights Reserved.