0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FreeBSDで交流周波数を計る

Last updated at Posted at 2025-08-13

FreeBSD/mipsのmrubyで交流周波数を計ってみました。

回路はネットに転がっているフォトカプラー(PC817)を使ったものを作りました。

100V直結の回路も見かけますが、怖いので何かから取ったトランスを使いました。

トランスがあまりよくないのかサイン波のはずがかなりゆがみます。

20250814-080153.jpg

何故かフォトカプラーの出力がHIが13.5msでLOが6.5msくらいになります???

mruby-bsdgpioにcycleというメソッドを追加します。このメソッドは引数がピン番号で、返り値はワンサイクルのナノ秒です。

ユーザーランドのGPIOイベントで処理しています。GPIO_INTR_EDGE_RISING を指定していますが、なぜか両方のエッジが飛んできます。なんかがおかしいです。

これを組み込んだmrubyで以下のスクリプトを実行します。

t = BsdGpio.new(0)

val = t.cycle(10)

p val

p 1000_000_000.0 / val

実行結果はこんな感じです。

19948562
50.1289265862873

IMG_20250813_093250.jpg

何度か計ってみると小数点以下が変動し、精度が出ない感じです。ちょっと実用には難しいかもしれません。

環境による問題も考えられますが、ユーザーランドのGPIOイベントはあまり精度でないのかもしれません。nsecまで拡張されているので、少し期待しましたが、usecでも十分だと思います。必要なくシステムコールにいろいろな単位ができるのはよくないです。

あと1MHzとかのクロックをGPIOにいれて、GPIOイベント拾おうとすると、システムが固まります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?