2016-03-24 3 views
2

J'ai un simple programme Python fonctionnant sur un Pi 2. Je n'arrive pas à comprendre pourquoi la fréquence de sortie est loin. Je l'ai programmé pour 2000hz. Je mesure la sortie de deux façons et les deux donnent 1530 Hz.Précision de Raspberry Pi PWM, Python

Depuis que j'utilise la broche 18, je crois que je devrais utiliser le matériel PWM. Des suggestions, qu'est-ce qui me manque?

est ici le 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() 

Répondre

0

Je pense que les broches 12 et 24 (BOARD numberingscheme) sont du matériel PWM capable, donc plus précis.

0

Broadcom broche # 18 est une broche de matériel PWM sur Raspberry Pi 2 et 3. Cependant, la question est de savoir comment la bibliothèque d'interface que vous utilisez le support de matériel PWM sur le Pi 2.

La lecture de ce Raspberry Pi StackExchange la réponse de l'affichage, il apparaît que la bibliothèque RPIO peut avoir une certaine imprécision PWM, au moins au moment de la réponse en 2012.

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

Comme suggéré par Alex Chamberlain, la bibliothèque WiringPi semble prend en charge la sortie matérielle PWM sur une broche GPIO et le logiciel PWM sur l'une des autres broches GPIO. Pendant ce temps la bibliothèque RPIO.PWM fait PWM par DMA sur n'importe quelle broche GPIO. Effectivement c'est une maison de transition entre PWM matériel et logiciel, fournissant une résolution de synchronisation de 1 μs comparée à à 100 μs avec le logiciel PWM de WiringPi [1].

Laquelle de ces options est adaptée à vos applications? Cela dépend du nombre de sorties PWM dont vous avez besoin et des performances que vous souhaitez obtenir parmi les sorties .

Si votre application est tolérante avec la résolution à basse résolution et la gigue élevée , vous pouvez utiliser un logiciel ou une boucle de synchronisation assistée par DMA. Si vous voulez une plus grande précision/faible gigue PWM, vous devrez peut-être assistance matérielle.

également voir cette discussion forum Raspberrypi.org à partir de 2013. RPIO.PWM: Precise PWM via DMA for servos and more (1µs res)

me semble aussi se rappeler que la prise casque audio peut interférer avec l'utilisation PWM que le circuit est partagé entre les deux. Cela ne devrait poser problème que si vous utilisez le jack.