0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

電子工作 > RPi / GPIO / デジボル > 周波数計測ができない > 100HzはOK, それより速いのがおかしい > time.sleep()後の待ちの蓄積だろうか?

Last updated at Posted at 2016-02-06

カイセのKU-2600というデジボルを使っている。

チャージポンプ負電圧を作るため1MHzのクロックをだそうとしている。
1MHzを作るpythonコードを試しているが、KU-2600で測定した周波数が想定通りでない。

code

pythonコードは以下を書いた。

chagePumpNegative.py
!/usr/bin/env python

import RPi.GPIO as GPIO
import time
usleep = lambda x : time.sleep(x/1000000.0)

GPIO.setmode(GPIO.BOARD)

kPinCLK = 8 # GPIO14, 4th from the top at right sides

GPIO.setup(kPinCLK, GPIO.OUT)

usleep(100)

print "hello"

while True:
    GPIO.output(kPinCLK, True)
#    usleep(0.5)
    usleep(50.0)
    GPIO.output(kPinCLK, False)
#    usleep(0.5)
    usleep(50.0)

結果

動作環境
Raspberry Pi2 + raspbian

usleepの待ち時間を変更することで、周波数が変わる。

  • usleep(5000.0)
    • 97.9Hz : だいたいあってる
  • usleep(500.0)
    • 833.4Hz : あやしい値だ
  • usleep(50.0)
    • 3.3kHz : 全然違う

usleep(5000.0)の場合、1周期が10msecになるので、1 / (10 * 10^-3) = 100Hz.
あとはその周波数を10倍していく値になるはずだが、上記の結果となった。

KU-2600の取説
によると以下の通りなので、対応できない測定範囲ではないと思う。

  • 1-3. 周波数 (Hz)
    • レンジ: 9.999Hz から 9.999 MHz

関連

オシロ用プローブを使うという案があるが、それが本当に必要なのだろうか。
http://www.marutsu.co.jp/contents/shop/marutsu/mame/180.html

問題の切り分け

以下のいずれなのだろうか。

  • RPiの処理の問題
  • KU-2600の問題

code v0.2

pythonコードを変更してみた。

for で10回ループするようにした。以下の場合は usleep(5000.0)と同じ処理になるはず。

#!/usr/bin/env python

import RPi.GPIO as GPIO
import time
usleep = lambda x : time.sleep(x/1000000.0)

GPIO.setmode(GPIO.BOARD)

kPinCLK = 8 # GPIO14, 4th from the top at right sides

GPIO.setup(kPinCLK, GPIO.OUT)

print "hello"

while True:
    GPIO.output(kPinCLK, True)
    for loop in range (10):
        usleep(500.0)
    GPIO.output(kPinCLK, False)
    for loop in range (10):
        usleep(500.0)

上記の結果、86.0Hzとなった (97.9Hzではない)。

KU-2600は悪くない

RPiの処理でusleep()処理直後のタスクディスパッチ遅延などによりwaitが累積しているのかもしれない。

The Linux kernels tend to have a higher tick rate, where the intervals are generally closer to 1 millisecond.

1msec程度までしかだめかもしれない。

トラ技でこういう記事があったような気がするが、昨年の何月号だっただろうか。
2015年のトラ技を見たが、載っていなかった。インターフェイスの方だったかもしれない。

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?