2016-03-24 22 views
2

私はPi 2上で動作する単純なPythonプログラムを持っています。なぜ出力周波数がオフになっているのか分かりません。私は2000hzのためにそれをプログラムしました。私は出力を2通り測定し、両方とも1530 Hzを出力します。Raspberry Pi PWM精度、Python

私はピン18を使用しているので、私はハードウェアPWMを使用する必要があると信じています。どのような提案、私は何が欠けている。

は、ここで私は、ピン12及び24(ボードnumberingscheme)が可能なハードウェアPWM、したがってより正確だと思うコード

import time 
import sys 
import datetime 
import RPi.GPIO as GPIO 


def tonet(hz,s): 
    pt = GPIO.PWM(tone,hz) 
    pt.start(50)  # duty cycle 
    time.sleep(s) 
    pt.stop 
    GPIO.output(tone, GPIO.LOW) # good house keeping 
    return 


# Pin Definitons: 
tone = 18 # 

# Pin Setup: 
GPIO.setmode(GPIO.BCM) # Broadcom pin-numbering scheme 
GPIO.setup(tone, GPIO.OUT) # pin set as output 
GPIO.output(tone, GPIO.HIGH) 
pause = raw_input('high press a key') 
GPIO.output(tone, GPIO.LOW) 
pause = raw_input('low press a key....') 

print 'start pwm' 


tonet(2000, 20) 

GPIO.cleanup() 

答えて

0

です。

0

Broadcomのピン#18ラズベリーパイ2と3のPWMハードウェアのピンはしかし問題は、使用しているインタフェース・ライブラリはパイこのラズベリーパイStackExchangeを読む2.

にPWMのハードウェアをサポートしていない方法です投稿の答えは、それがアレックス・チェンバレンによって示唆されるようにRPIOライブラリーは2012年

Can I use the GPIO for pulse width modulation (PWM)?

に少なくとも答えの時に、いくつかのPWMの不正確さを有していても良いように見える、WiringPiライブラリがに表示されます210は、1つのGPIOピン上のハードウェアPWM出力と他のGPIOピンのいずれかの 上のソフトウェアPWMの両方をサポートします。一方、RPIO.PWMライブラリは、どのGPIOピンでも DMAによってPWMを行います。効果的に、これは ハードウェアとソフトウェアPWMの間の半分のハウスであり、WiringPiのソフトウェアPWM [1]と比較して1μsのタイミング分解能を提供します。 を100μsと比較しています。

どれがアプリケーションに適しているかは、出力する のPWM出力の数とそれらの出力からどれだけのパフォーマンスを望むかによって異なります。

アプリケーションが低タイミング分解能と高いジッタを許容する場合は、ソフトウェアまたはDMAアシストタイミングループを使用できます。 高精度/低ジッタPWMが必要な場合は、 ハードウェアアシスタンスが必要な場合があります。

はまた、2013年 RPIO.PWM: Precise PWM via DMA for servos and more (1µs res)

からこのRaspberrypi.orgフォーラムの説明を参照してください。また、私は、回路が2間で共有されているとしてヘッドフォンジャックのオーディオは、PWMの使用を妨げることができることを覚えているようです。これはジャックを使用している場合にのみ問題になるはずです。