Puis-je utiliser le GPIO comme sortie de modulation de largeur dimpulsion ?
Si oui, comment procéder et combien de sorties PWM distinctes et simultanées puis-je avoir?
Commentaires
- Vous vous devez probablement spécifier le modèle que vous ‘ utilisez. Ils sont tous légèrement différents.
- @ user1147688 Cette question a été posée alors quil ny avait quun seul modèle!
Réponse
Comme suggéré par Alex Chamberlain , la bibliothèque WiringPi apparaît pour prendre en charge à la fois la sortie matérielle PWM sur une ou deux broches GPIO selon le modèle, et le logiciel PWM sur lune des autres broches GPIO. Pendant ce temps, la bibliothèque RPIO.PWM effectue le PWM par DMA sur nimporte quelle broche GPIO. Il sagit en fait dune maison intermédiaire entre le PWM matériel et logiciel, offrant une résolution temporelle de 1 µs par rapport à 100 µs avec WiringPi « s Logiciel PWM [1] .
Laquelle de celles-ci convient à vos applications dépend du nombre de sorties PWM dont vous avez besoin et des performances que vous attendez de ces sorties.
Si votre application tolère une résolution à faible cadencement et une gigue élevée, vous pouvez utiliser une boucle de synchronisation assistée par logiciel ou DMA. Si vous voulez une précision plus élevée / faible gigue PWM, vous aurez peut-être besoin dune assistance matérielle.
Quand le logiciel PWM pourrait-il convenir?
Si vous souhaitez faire clignoter un groupe de LED avec différentes cadences visibles humaines (10 » hertz) avec des exigences de réponse soft temps réel , alors la boucle logicielle pourrait gérer autant de PWM que vous avez de broches GPIO.
Quand le PWM matériel peut-il convenir?
Si vous voulez contrôler un serv o moteur avec des exigences de réponse en temps réel , vous devrez alors utiliser le PWM matériel. Même dans ce cas, vous pouvez avoir des problèmes pour garantir une réponse en temps réel pour la boucle dasservissement qui relie lentrée de lencodeur à la sortie PWM.
Une boucle dasservissement stable besoin de lire les encodeurs à un débit régulier (faible gigue), décrire des valeurs de sortie PWM révisées à un rythme régulier et la latence entre ceux-ci doit être fixe (faible gigue globale). Si vous ne pouvez pas faire cela, vous devrez alors régler (soft tune) votre moteur pour éviter quil ne devienne instable sous la charge. Cest difficile à faire avec un système dexploitation multi-tâches sans support de bas niveau.
Et si jai besoin de plus de sorties PWM matérielles?
Si vous avez besoin dexécuter plus de boucles dasservissement que de sorties PWM matérielles, vous devrez probablement les décharger sur un autre appareil pour garantir le dur des performances en temps réel, reléguant votre Raspberry Pi au rang de superviseur en temps réel souple.
Une option serait quelque chose comme le Adafruit 16-Channel 12-bit PWM / Servo Driver – Interface I²C – PCA9685 qui vous permettrait de contrôler 16 sorties PWM avec juste quelques broches de GPIO pour le bus I²C. Pour un exemple de son utilisation, consultez le post I²C 16 canaux PWM / Servo Breakout – Working sur les forums Raspberry Pi.
1. Merci à dm76 pour la suggestion, cependant heather indique que RPIO.PWM peut ne plus fonctionner pour les nouveaux modèles pi.
Commentaires
- Puis-je utiliser lapproche logicielle PWM pour faire fonctionner les moteurs à courant continu?
- @gideon – Oui, les amplificateurs de puissance moteur que jai utilisés ont tous pris PWM comme entrée.
- Pour info, la librairie RPI ( pythonhosted.org/RPIO/pwm_py.html ) semble avoir une bien meilleure résolution (1us) par rapport à WiringPi avec Résolution 100us
- @MarkBooth – Aucun problème. La bibliothèque est vraiment bien écrite et peut être utilisée comme remplacement de RPi.GPIO, ce qui est très pratique si vous avez démarré un projet avec ce dernier et que plus tard vous avez réalisé que des signaux PWM étaient nécessaires …
- RPIO. PWM peut ne plus fonctionner pour les nouveaux modèles de pi, je pense.
Réponse
PWM matériel
Oui, il y a une sortie PWM matérielle sur le Raspberry Pi, connectée à P1-12 (GPIO18). De plus, les sorties PWM peuvent être ajoutées en utilisant une interface I²C ou SPI ; certaines personnes ont eu du succès avec ce ( message de forum ).
Exemple de code
Vous pouvez utiliser le Bibliothèque WiringPi pour contrôler la broche PWM; vous pouvez regarder le code pour éviter dinclure toute la bibliothèque.
Logiciel PWM
Le Raspberry Pi ne convient à aucun logiciel sérieux PWM car Linux nest pas un système dexploitation en temps réel .
Commentaires
- Question, quelle est la définition ou un exemple de logiciel sérieux PWM? Et quels sont les » systèmes dexploitation en temps réel » et y a-t-il une chance den obtenir un sur un Pi
- @AnthonyBlake Eh bien, vous pouvez probablement contrôler la luminosité dune lumière à laide du logiciel PWM, mais je soupçonne quun moteur va caler. Il ny a ‘ aucun besoin de faire du logiciel PWM cependant, le matériel est plus simple et plus efficace. Les systèmes dexploitation en temps réel seront mieux expliqués par Google; ils garantissent certaines choses sur la durée et la fréquence dexécution du logiciel.
- @AnthonyBlake A » Système dexploitation en temps réel » (RTOS) est un système dexploitation qui vous donne une garantie sur le délai dexécution supérieur. Comme dire au programme » Oui, vous aurez un temps dexécution en 33 ms (donnez ou prenez une tolérance de 2 ms) pour retourner ce bit de broche GPIO pour donner à votre moteur pas à pas un signal dans le fenêtre de temps quand il en a besoin. Et vous pouvez vous y fier! » Il y a ‘ un RT Linux là-bas. ‘ ne sais pas si ‘ a été porté (encore) sur le RPi.
- Désolé Alex, je Je nai ‘ volé intentionnellement une autre partie de votre réponse, mais je ‘ vient de remarquer que nous sommes arrivés au même message sur le forum via des itinéraires différents .
- Les modèles plus récents avec 40 broches ont un deuxième PWM matériel connecté à GPIO19 (broche 35).
Réponse
Les Pis récents ont deux canaux PWM matériels. De plus, les impulsions PWM cadencées par le matériel peuvent être générées indépendamment sur tous les GPIO connectés à len-tête dextension à 40 broches.
En pratique, cela signifie quil existe deux canaux PWM très précis et que tous les autres GPIO peuvent avoir un PWM de style Arduino (800 Hz, 0 désactivé – 255 complètement activé).
Par exemple servoblaster et mon pigpio , etc.
Commentaires
- Bonne réponse! Comment puis-je utiliser ces deux PWM HW? Jai besoin de contrôler 2 servos, je sais que vous dites que le servoblaster et le pigpio sont OK pour cela, mais je minterroge juste sur le HW PWM, car je ne trouve rien à leur sujet … y a-t-il des documents pour cela? Jai un RPi 2 V1.1 pour les tests.
- C , Python , ligne de commande pigs .
- Une charge CPU lourde ne devrait pas ‘ faire un différence. Une charge réseau importante peut faire une différence pour gpioServo, en particulier si léchantillonnage est à 1 MHz au lieu de 200 kHz par défaut. La fréquence est de 50 (Hz), la plage des rapports cycliques sera de 0 à 1000000 (mappée à la valeur sous-jacente réelle de 0 à 5000000). 1 ms équivaut à 1 ms en 20 ms donc un cycle dutilisation de 5% soit 50000, 1,5 ms- > 7,5% – > 75000, 2 ms – > 10% – > 100000.
- Page 102 sur BCM2835 ARM Peripherals montre les différents modes auxquels le GPIO peut être attribué. Recherchez en ligne les GPIO qui sont dirigés vers les différents en-têtes dextension du modèle Pi.
- @ user1147688 PLLD (500 MHz) est utilisé comme horloge PWM principale. En raison du fonctionnement de » « , la fréquence centrale PWM est de 250 MHz. Pour pouvoir allumer et éteindre (assez essentiel pour PWM) le maximum est de 125 MHz. Vous pouvez doubler les chiffres en utilisant PLLC (1000 MHz), mais cette PLL varie en fonction de la vitesse dhorloge du cœur.
Réponse
Ce nest pas tout à fait un système dexploitation en temps réel, mais RISC OS pour Raspberry Pi est un multitâche coopératif, vous pouvez donc facilement exécuter une application qui a 100% de CPU. vous pouvez bien mieux gérer vos horaires. Ne vous attendez pas à faire autre chose que votre propre code.
Commentaires
- Jai lu quelque part quil y a une limite matérielle quant à la commutation fréquence dune broche de sortie, aussi. Je pense que cétait autour de 20 MHz. Donc, ‘ ne vous attendez pas à pouvoir tirer sur 300 MHz PWM ou quoi que ce soit de ce genre, même avec 100 % Dutilisation du processeur.
- @Wallacoloo: Quelles applications nécessitent 300 MHz PWM?
- @PeterMortensen: Eh bien, je ne ‘ pas savoir comment la radio émetteurs et autres génèrent leurs signaux, mais certains pourraient le faire avec PWM. PiFM le fait à 100 MHz. Cela semble cependant contredire mon commentaire, alors je me demande si la broche peut encore être commandée à cette fréquence, mais elle ‘ s juste que la capacité de la broche atténue ces signaux, de sorte quune onde carrée de 100 MHz peut en fait osciller de par exemple (1,0 V, 2,3 V) au lieu du plein (0 V, 3,3 V) gamme.
Réponse
Jai trouvé cette bibliothèque ( pi -blaster ) qui prétend être « extrêmement efficace: nutilise pas le processeur et donne des impulsions très stables. »
Je ne lai pas encore testé, mais je le mettrai à jour dès que je le ferai (probablement aujourdhui)
Commentaires
- Jai ‘ essayé mais jusquici pas de chance. Pour autant que je sache, ‘ ne change pas réellement le matériel?
- Je veux juste changer ça. Pi-blaster a travaillé pour moi où ces autres réponses pas.