2016-03-24 17 views
2

Ich habe ein einfaches Python-Programm auf einem Pi 2. Ich kann nicht herausfinden, warum die Ausgangsfrequenz weg ist. Ich habe es für 2000Hz programmiert. Ich messe die Ausgabe auf zwei Arten und beide ergeben 1530 Hz.Raspberry Pi PWM Genauigkeit, Python

Da ich Pin 18 verwende, glaube ich, dass ich die Hardware PWM verwenden sollte. Irgendwelche Vorschläge, was fehlt mir.

Hier ist der Code

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() 

Antwort

0

ich glaube, die Stifte 12 und 24 (BOARD numberingscheme) sind Hardware-PWM-fähig, daher genauer.

0

Broadcom Pin # 18 ist ein PWM-Hardware-Pin auf der Raspberry Pi 2 und 3 aber die Frage ist, wie funktioniert die Interface-Bibliothek Sie Unterstützung, um die PWM-Hardware auf dem Pi 2.

Lesen dieses Raspberry Pi Stack verwenden Beitrag Antwort, wie es scheint, dass die RPIO Bibliothek eine PWM Ungenauigkeit aufweisen kann, zumindest zum Zeitpunkt der Antwort in 2012.

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

Wie von Alex Chamberlain vorgeschlagen, erscheint die WiringPi Bibliothek unterstützt sowohl Hardware-PWM-Ausgang an einem GPIO-Pin und Software-PWM an einem der anderen GPIO-Pins. Inzwischen macht die RPIO.PWM-Bibliothek PWM von DMA auf jedem GPIO-Pin. Effektiv ist dies ein Zwischenhaus zwischen Hardware und Software PWM, bietet eine 1 μs Timing Auflösung im Vergleich bis 100 μs mit WiringPi's Software PWM [1].

Welche davon für Ihre Anwendungen geeignet ist, hängt davon ab, wie viele PWM-Ausgänge Sie benötigen und welche Leistung Sie von diesen Ausgängen wünschen.

Wenn Ihre Anwendung eine geringe Zeitauflösung und einen hohen Jitter von toleriert, können Sie eine Software- oder DMA-unterstützte Zeitschleife verwenden. Wenn höhere Präzision/niedrigerer Jitter-PWM erfordert, benötigen Sie möglicherweise Hardware-Unterstützung.

Siehe auch diese Raspberrypi.org Forum Diskussion ab 2013 RPIO.PWM: Precise PWM via DMA for servos and more (1µs res)

Auch scheinen Ich erinnere mich, dass der Kopfhöreranschluss mit PWM Nutzung stören können, wie die Schaltung zwischen den beiden geteilt wird. Dies sollte nur ein Problem sein, wenn Sie die Buchse verwenden.