Pot folosi GPIO ca ieșire modulare lățime impuls ?

Dacă da, cum aș proceda și câte ieșiri PWM distincte simultane pot avea?

Comentarii

  • Tu probabil că trebuie să specificați modelul pe care ‘ îl utilizați. Toate sunt ușor diferite.
  • @ user1147688 Această întrebare a fost pusă înapoi când exista un singur model!

Răspuns

După cum sugerează Alex Chamberlain , apare biblioteca WiringPi pentru a suporta ambele ieșiri hardware PWM pe unul sau doi pini GPIO în funcție de model și software PWM pe oricare dintre ceilalți pini GPIO. Între timp, biblioteca RPIO.PWM face PWM prin DMA pe orice pin GPIO. Efectiv, aceasta este o jumătate de drum între hardware și software PWM, oferind o rezoluție de sincronizare de 1   µs comparativ cu 100   µs cu WiringPi „s Software PWM [1] .

Care dintre acestea este potrivit pentru aplicațiile dvs. depinde de câte ieșiri PWM aveți nevoie și de ce performanță doriți din aceste ieșiri.

Dacă aplicația dvs. este tolerantă la rezoluția de sincronizare scăzută și la o mare jitter , atunci puteți utiliza un software sau o buclă de sincronizare asistată de DMA. Dacă doriți o precizie mai mare / PWM cu jitter inferior, este posibil să aveți nevoie de asistență hardware.

Când poate fi potrivit software-ul PWM?

Dacă doriți să luminați o grămadă de LED-uri cu diferite cadențe vizibile umane (10 „s de hertz) cu cerințe de răspuns soft în timp real , bucla software ar putea gestiona atâtea PWM-uri cât aveți pini GPIO.

Când PWM hardware poate fi potrivit?

Dacă doriți să controlați un serv o motor cu cerințe de răspuns în timp real greu în timp real , atunci va trebui să utilizați hardware PWM. Chiar și atunci este posibil să aveți probleme cu asigurarea unui răspuns în timp real pentru bucla servo care leagă intrarea codificatorului de ieșirea PWM.

O servo buclă a stabilă > trebuie să citiți codificatoarele la o rată obișnuită (jitter scăzut), să scrieți valorile de ieșire PWM revizuite la o rată obișnuită și latența dintre acestea ar trebui să fie fixată (jitter scăzut în general). Dacă nu puteți face acest lucru, va trebui să reglați (reglați moale) motorul pentru a preveni instabilitatea acestuia sub sarcină. Acest lucru este greu de făcut cu un sistem de operare multi-tasking fără suport la nivel scăzut.

Ce se întâmplă dacă am nevoie de mai multe ieșiri hardware PWM?

Dacă trebuie să rulați mai multe servo bucle decât aveți ieșiri hardware PWM, atunci va trebui probabil să le descărcați pe alt dispozitiv pentru a vă asigura performanță în timp real, retragând Raspberry Pi pentru a fi un supraveghetor în timp real ușor.

O opțiune ar fi ceva de genul Adafruit 16-Channel 12-bit PWM / Servo Driver – I²C interface – PCA9685 care vă va permite să controlați 16 ieșiri PWM cu doar câțiva pini GPIO pentru magistrala I²C. Pentru un exemplu de utilizare a acestuia, consultați I²C 16 canale PWM / Servo Breakout – Working pe forumurile Raspberry Pi.

1. Mulțumesc lui dm76 pentru sugestie, totuși heather spune că este posibil ca RPIO.PWM să nu mai funcționeze pentru modelele pi noi.

Comentarii

  • Pot folosi abordarea software PWM pentru a rula motoare de curent continuu?
  • @gideon – Da, amplificatoarele de putere ale motorului pe care le-am folosit au luat toate PWM ca intrare.
  • FYI, biblioteca RPI ( pythonhosted.org/RPIO/pwm_py.html ) pare să aibă o rezoluție mult mai bună (1us) în comparație cu WiringPi cu Rezoluție 100us
  • @MarkBooth – Fără probe. Biblioteca este foarte bine scrisă și poate fi folosită ca înlocuitor drop-in pentru RPi.GPIO, care este foarte util dacă ați început un proiect cu acesta din urmă și ați realizat ulterior că semnalele PWM erau necesare …
  • RPIO. PWM s-ar putea să nu mai funcționeze pentru modelele pi noi, cred.

Răspuns

Hardware PWM

Da, există o ieșire hardware PWM pe Raspberry Pi, conectată la P1-12 (GPIO18). Mai mult, ieșirile PWM ar putea fi adăugate folosind o interfață I²C sau SPI ; unii oameni au avut succes cu acest lucru ( postare pe forum ).

Exemplu de cod

Puteți utiliza biblioteca WiringPi pentru a controla pinul PWM; ați putea privi codul pentru a evita includerea întregii biblioteci.

Software PWM

Raspberry Pi nu este potrivit pentru niciun software serios PWM, deoarece Linux nu este un sistem de operare în timp real .

Comentarii

  • Întrebare, care este definiția sau un exemplu de software PWM serios? Și ce sunt ” sisteme de operare în timp real ” și există vreodată vreo șansă de a obține unul pe un Pi
  • @AnthonyBlake Ei bine, probabil că puteți controla luminozitatea unei lumini folosind software-ul PWM, dar bănuiesc că un motor se va opri. ‘ nu este nevoie să faceți software PWM, deși hardware-ul este mai simplu și mai eficient. Sistemele de operare în timp real vor fi mai bine explicate de Google; acestea garantează anumite lucruri despre cât de des și cât de des rulează software-ul.
  • @AnthonyBlake A ” Sistem de operare în timp real ” (RTOS) este un sistem de operare care vă oferă o garanție pentru limita de timp superioară de execuție. Ca și cum ați spune programului ” Da, veți avea un timp de execuție în 33 ms (dați sau luați toleranță de 2 ms) pentru a întoarce bitul pin GPIO pentru a da motorului dvs. pas un semnal exact fereastra de timp când are nevoie de ea. Și vă puteți baza pe asta! ” Există ‘ un RT Linux acolo. Nu ‘ nu știu dacă ‘ a fost portat în RPi (încă).
  • Ne pare rău Alex, eu ‘ nu ți-am furat în mod intenționat o altă parte a răspunsului tău, dar ‘ tocmai am observat că am ajuns la aceeași postare pe forum prin rute diferite .
  • Modelele mai noi cu 40 de pini au un al doilea PWM hardware conectat la GPIO19 (pinul 35).

Răspuns

Pisul recent are două canale hardware PWM. În plus, impulsurile PWM temporizate hardware pot fi generate independent pe toate GPIO-urile conectate la antetul de expansiune cu 40 de pini.

În practică, acest lucru înseamnă că există două canale PWM extrem de precise și toate celelalte GPIO pot avea PWM în stil Arduino (800 Hz, 0 off – 255 complet pornit).

De ex servoblaster și pigpio etc.

Comentarii

  • Răspuns frumos! Cum pot folosi aceste două PWM-uri HW? Trebuie să controlez 2 servome, știu că spui că servoblaster și pigpio sunt OK pentru asta, dar mă întreb doar de HW PWM, pentru că nu găsesc nimic despre ele … există unele documente pentru asta acolo? Am un RPi 2 V1.1 pentru teste.
  • C , Python , linia de comandă porci .
  • Încărcarea mare a procesorului nu ar trebui să ‘ diferență. Încărcarea grea a rețelei poate face diferența față de gpioServo, mai ales dacă eșantionează la 1MHz, mai degrabă decât la 200kHz implicit. Frecvența este de 50 (Hz), intervalul de cicluri de funcționare va fi 0 – 1000000 (mapat la adevărata valoare de bază 0 – 5000000). 1 ms este 1 ms în 20 ms deci un ciclu dutic de 5% deci 50000, 1,5ms- > 7,5% – > 75000, 2ms – > 10% – > 100000.
  • Pagina 102 din BCM2835 ARM Peripherals arată diferitele moduri care pot fi atribuite GPIO. Căutați on-line pentru care GPIO sunt direcționate către diferitele anteturi de expansiune ale modelului Pi.
  • @ user1147688 PLLD (500 MHz) este folosit ca ceas PWM de bază. Datorită modului în care funcționează „, funcționează ” frecvența de bază PWM este de 250 MHz. Pentru a putea porni și opri (destul de esențial pentru PWM), maximul este de 125 MHz. Puteți dubla cifrele folosind PLLC (1000 MHz), dar acel PLL variază în funcție de viteza de ceas de bază.

Răspuns

Nu este un sistem de operare în timp real, ci OS RISC pentru Raspberry Pi este multitasking cooperativ, astfel încât să puteți rula cu ușurință o aplicație care are 100% CPU, astfel încât vă puteți gestiona sincronizarea mult mai bine. Doar nu vă așteptați să faceți altceva în afară de propriul cod.

Comentarii

  • Am citit undeva că există o limită hardware în ceea ce privește comutarea de asemenea, frecvența unui pin de ieșire. Cred că era în jur de 20 MHz. Deci, nu ‘ nu vă așteptați să puteți extrage PWM de 300 MHz sau orice alt gen de acest gen, chiar și cu 100 % Utilizare CPU.
  • @Wallacoloo: Ce aplicații necesită PWM de 300 MHz?
  • @PeterMortensen: Ei bine, nu ‘ nu știu cum radio transmițătoarele și altele își generează semnalele, dar unii ar putea să o facă cu PWM. PiFM face asta la 100 MHz. Totuși, asta pare să contrazică comentariul meu, așa că mă întreb dacă poate pinul poate fi comandat în continuare la acea frecvență, dar = „8373562c8c”>

doar că capacitatea pinului atenuează astfel de semnale, astfel încât o undă pătrată de 100 MHz ar putea oscila de la (de exemplu, 1,0 V, 2,3 V) în loc de maxim (0 V, 3,3 V) gamă.

Răspuns

Am găsit această bibliotecă ( pi -blaster ) care se pretinde a fi „extrem de eficient: nu folosește CPU și oferă impulsuri foarte stabile.”

Nu l-am testat încă, dar mă voi actualiza imediat ce o fac (probabil astăzi)

Comentarii

  • ‘ am încercat acest lucru, dar până acum nu am avut noroc. Din câte îmi dau seama, nu ‘ nu schimbă de fapt hardware-ul?
  • Vrei doar să scapi de asta. nu a făcut-o.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *