Care este diferența dintre soft PWM și PWM (Raspberry Pi, Gpio)

Ming Ding a intrebat.

Care este diferența dintre soft pwm și pwm (poate hardware pwm) în raspberry 3 b+.From pinout (https://pinout.xyz), se vede că există doar 2 pini pwm, pinul 32 pentru pwm0 și 33 pentru pwm1. Dar api pentru GPIO arată că, putem genera pwm în orice pin.Care este diferența, îmi poate da cineva un răspuns.Mulțumesc mult.


import RPi.GPIO as GPIO
from time import sleep

ledpin = 12             # PWM pin connected to LED
GPIO.setwarnings(False)         #disable warnings
GPIO.setmode(GPIO.BOARD)        #set pin numbering system
GPIO.setup(ledpin,GPIO.OUT)
pi_pwm = GPIO.PWM(ledpin,1000)      #create PWM instance with frequency
pi_pwm.start(0)             #start PWM of required Duty Cycle
while True:
    for duty in range(0,101,1):
        pi_pwm.ChangeDutyCycle(duty) #provide duty cycle in the range 0-100
        sleep(0.01)
    sleep(0.5)for duty in range(100,-1,-1):
        pi_pwm.ChangeDutyCycle(duty)
        sleep(0.01)
    sleep(0.5)

1 răspunsuri
joan

Rețineți că sunt autorul pigpio, așa că voi fi părtinitor în evaluarea mea a diferitelor tipuri de PWM.

De fapt, există trei tipuri diferite de PWM acceptate pe Pi.

PWM complet hardware

Acest tip de PWM este generat de perifericul PWM al lui Pi.

Sincronizarea impulsurilor este controlată de perifericul PWM.

Este cel mai precis și, fără îndoială, cel mai flexibil.

Poate fi generat pe GPIO 12/13/18/19. Cu toate acestea, există doar două canale, astfel încât pot fi generate doar două fluxuri PWM diferite la un moment dat. GPIO 12/18 sunt pe un canal, iar GPIO 13/19 pe celălalt.

Potrivit pentru servomotoare fără jitter, controlul luminozității LED fără erori, controlul vitezei motorului.

PWM temporizat DMA

Acest tip de PWM este generat de perifericul DMA al Pi.

Sincronizarea impulsurilor este controlată de DMA. Nu este la fel de precis ca un PWM complet hardware, dar este mult mai precis decât un PWM temporizat prin software. În funcție de implementare, nu este la fel de flexibil ca PWM-ul complet hardware, de exemplu, numărul de frecvențe este mult mai limitat, iar numărul de pași între pornit și oprit este mult mai limitat.

Acest tip de PWM poate fi generat pe orice GPIO de pe antetul de expansiune. Toate GPIO-urile pot avea setări diferite.

Adecvat pentru servomotoare fără jitter, controlul luminozității LED-urilor fără erori, controlul vitezei motorului.

PWM temporizat prin software

Acest tip de PWM este generat prin software.

Sincronizarea impulsurilor este controlată de planificatorul (Linux). Este mult mai puțin precis decât un PWM complet hardware sau un PWM temporizat DMA. Este mult mai flexibil decât DMA timed PWM și la fel de flexibil ca și PWM complet hardware, de exemplu, numărul de frecvențe este nelimitat și numărul de pași între pornit și oprit este nelimitat.

Acest tip de PWM poate fi generat pe orice GPIO de pe antetul de expansiune. Toate GPIO-urile pot avea setări diferite. Precizia sincronizării va varia în funcție de numărul de GPIO utilizate pentru PWM.

Nu este foarte potrivit pentru servomotoare, va controla luminozitatea LED-ului, dar va suferi de glitch-uri, potrivit pentru controlul vitezei motorului.

Comentarii

  • Este corect faptul că PWM-ul hardware este accesibil doar din biblioteca C, iar biblioteca python folosește PWM-ul software? –  > Por Sasan.
  • Depinde de bibliotecă. pigpio Python folosește PWM hardware. –  > Por joan.

Tags: