Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
PIC16F1827 HPWM Push-pull
#1
Kao sto se iz naslova vidi radi se o kontroleru Pic16F1827 sa kojim bih hteo koriscenjem njegovog PWM modula da generisem signal 50Hz na dva pina za Push-pull pretvarac.
Odmah na pocetku da vam kazem da sam pocetnik u programiranju i nikada do sada nisam nista radio vezano za PWM tako da mi je potrebna vasa pomoc.
Prilozicu datasheet radi lakseh resavanja mog problema.
E sada imam pitanja za iskusne:
1- Da il je moguce dobiti frekvenciju 50Hz sa HPWM i na koju frekvenciju treba da radi glavni oscilator.
2- Koji registri su potrebni da se podese u ovom slucaju iz datasheeta sam mogo da zakljucim da su potrebni: CCP1CON, APFCON0, ?
Cilj mi je da dobijem trajanje jedne poluperiode 7ms zatim pauza 6ms i druga poluperioda 7ms sto je ukupno cele periode 20ms.
Duty-Cycle trenutno nebih menjao vec bih ostao konstantan 6ms.
 
Potrebna mi je pomoc oko konfiguracije potrebnih registra jer sam se sve pogubio citajuci datasheet i da li je moguce da se izvede ovo kako sam ja zamislio ili postoji neko drugo resenje za koje ja neznam.

Pozdrav Milan
Reply
#2
Ne valja ti racunica, nemas pauzu za slijedecu periodu povorke impulsa. Jeli mora MCU koji si naveo?

pOz
Reply
#3
[attachment=16954 Wrote:[attachment=16954][attachment=16954][attachment=16954]  emiSAr pid='50032' dateline='1445529669']Ne valja ti racunica, nemas pauzu za slijedecu periodu povorke impulsa. Jeli mora MCU koji si naveo?

pOz

Mozda sam se malo presao sa racunicom ali evo slikovito cu da objasnim sta hocu da dobijem na slici plavi oscilogram to mene interesuje kako da dobijem iz MCU.

MCU koji sam naveo trenutno njega imam na raspolaganju tako da mogu odmah da pocnem sa vezbanjem.Izbor MCU-a mislim da nije toliko bitan jer kada se na jednom savlada onda je na svakom slicna situacija.


Attached Files Thumbnail(s)

Reply
#4
Pogledaj princip ovde. Čini mi se da to hoćeš da dobiješ.
https://mlabsbd.wordpress.com/2015/01/17...ontroller/
Reply
#5
Super je ovo ali za pocetak nebih odmah isao na PWM modulaciju generisanje sinusa za to postoje namenski procesori pout dsPIC itd.

Sa 8-bit MCU meni je dovoljan kvadratni oblik sa pauzama izmedju poluperiode da savladam.
Reply
#6
Mislim da nećeš moći da generišeš PWM tako niske frekvencije jer je TIMER2 male rezolucije i sa malim preskalerom. Koliko se sećam kod PIC-ova sa 4MHz OSC-a neki donji limit je nešto oko 1kHz.

Ja sam pre više godina za neki projekat slične namene pravio 50Hz softverski PWM, pošto ta frekvencija nije problem da se izvede korišćenjem Timer interapta na 10mS odnosno 20mS. Ako želiš "dead-time" onda generišeš timer interapt na 1ms i brojačem podešavaš uključenje isključenje pinova i kašnjenje između izlaznih tranzistora.

Vodi računa da u interapt rutini imaš samo uslove i kontrolu I/O pinova, nikako neku kompleksnu matematiku i slično, to možeš raditi u main petlji.
Reply
#7
(10-23-2015, 11:30 AM)npejcic Wrote: Mislim da nećeš moći da generišeš PWM tako niske frekvencije jer je TIMER2 male rezolucije i sa malim preskalerom. Koliko se sećam kod PIC-ova sa 4MHz OSC-a neki donji limit je nešto oko 1kHz.

Ja sam pre više godina za neki projekat slične namene pravio 50Hz softverski PWM, pošto ta frekvencija nije problem da se izvede korišćenjem Timer interapta na 10mS odnosno 20mS. Ako želiš "dead-time" onda generišeš timer interapt na 1ms i brojačem podešavaš uključenje isključenje pinova i kašnjenje između izlaznih tranzistora.

Vodi računa da u interapt rutini imaš samo uslove i kontrolu I/O pinova, nikako neku kompleksnu matematiku i slično, to možeš raditi u main petlji.

Posto se nemoze upotrebiti HPWM onda mi nista drugo ne preostaje vec da prihvatim ovo resenje da uz pomoc timer interrupt pravim prekide i na svakih 10ms menjam stanje izlaznih pinova.

Koji Timer da upotrebim jer konkretno ovaj kontroler ima 8-bit i 16-bit tajmere.
Reply
#8
Mora li sa mikrokontrolerom ?
http://www.simple-electronics.com/2011/1...erter.html

Pozz
Reply
#9
[attachment=16957 Wrote:Želja pid='50055' dateline='1445609348']Mora li sa mikrokontrolerom ?
http://www.simple-electronics.com/2011/1...erter.html

Pozz

Moj razlog upotrebe mikrokontrolera je da napravim malo pametniji inverter koji ce imati kontrolu napona nad akumulatorom i nadgledanje prisustva mreznog napona.

Nesto poput ovog invertora


Attached Files
.pdf   opr001ZQ.pdf (Size: 375,64 KB / Downloads: 26)
Reply
#10
Bice ti problem da kontolises napon posto bi morao da ides na resenje koje ne koristi PWM nego sam da generises povorke impulsa i pauze.
Mislim nije neizvodljivo ali stvarno steta ne raditi to na HW nivou tj ne koristiti interni PWM modul.

Probaj sa tim PIC koji imas i njegovim PWM da ipak napravis "sinus".
Dakle izaberi neku nosecu frekvenciju, 1-2-3kHz i onda probaj staticno da menjas duty.
U tom koraku nemoj da se bavis izlaznim delom, tranzistorima i ostalo, bitno ti je samo da ovladas PWM modulom, stavi neki R/C clan na izlaz (u ulozi low-pass filtera) cisto da pratis promene.
Sledeci korak je da "modulises" taj PWM tj da mu menjas u petlji duty.
Obicno se ide bar 10x ili vise odnos frekvencije PWM nosioca i frekvencije modulacije, znaci modulacija da ti ne bude brza od 10-100Hz.
Kad to savladas, samo se posle postavi mala tablica koja predstavlja diskretizovanu vrednost sinusnog signala i prema njoj tako postavljas duty za svaki korak kroz petlju.
To kad ti proradi onda tek predjes na problematiku sa drajverima i izlaznim tranzistorima pa posle i ostale stvari koje se ticu punjenja.

Ne znam sad napamet za taj tvoj PIC, moguce da PWM modul moze da se konfigurise sa externim clock-om pa postoji varijanta da preko nekog interapta generises relativno brzi clock koji izlazi napolje u jedan delitelj (neki 256 delitelj) pa to vracas u clcok za PWM. Ovo opcija ti je vise u edukativne svrhe ...
Reply
#11
Neznam na koju kontrolu napona si tacno mislio.
Ako si mislio na kontrolu izlaznog napona iz pretvaraca pomocu promene odnosa signala i pauze to i ne planiram za sada bitno mi je da postoji pauza neka konstantna izmedju poluperioda da ne bih doslo do provodjenja oba tranzistora u isto vreme.

A da li ce imati vreme MCU da radi pored ovoga jos nesto poput merenje napona akumulatoru to vec neznam.
Reply
#12
Ovo sto sam ti pisao je bilo vezano vise u cilju savladavanja i vezbe oko PWM problematike i mozda kao uvod u potpuno istu pricu i kod dsPIC.
Ako bi to savladao posle ce ti biti dosta lakse preci i npr na ovu temu:
http://forum.yu3ma.net/showthread.php?tid=704

Da me ne shvatis pogresno, taj pretvarac moze da se napravi na XY nacina.
Logika je vrlo prosta (za kvazi sinus), upali jedan izlaz, cekaj malo, upali drugi izlaz i tako u krug.
Moze i diskretno sa SG kolima ali tad nebi savladao neke cakice koje imaju ovi PWM moduli u PIC a koji mogu biti ektra korisni, samo moras malo da se udubis u problematiku.
Reply
#13
Sad razmisljam da li da koristim HPWM na nekoj visoj frekvenciji kao nosecoj a sinusni napon na 50Hz da generisem po tablici.

Za dobijanje kvazi sinusa mogu u petlji da vrsim promenu stanja pinova ali onda kontroler nece imati vreme za neke druge stvari i tu je problem.

Edit. Pic16f1827 ima dva ECCP (Enhanced) modula koji modu da generisu na 4 razlicita pina signal sa 10-bit rezolucije.
Reply
#14
(10-23-2015, 06:19 PM)Milan94 Wrote: Za dobijanje kvazi sinusa mogu u petlji da vrsim promenu stanja pinova ali onda kontroler nece imati vreme za neke druge stvari i tu je problem.

Izgleda nisi shvatio šta ti je NPejcic pokušao objasniti.

P.S.
Dok sam ovo pisao, nisam video Mikijev post o interaptu.

Pozz
Reply
#15
Mozes to odraditi preko interapta i to tako da se interupt rutina trigeruje na neki vremenac (koliko god moze sporije) a u samoj rutini da imas dodatno jos neke brojace (variable koje svakim ulazom u rutinu inkrementujes) i npr ako je brojac = 0 upali jedan izlaz, pa ako je brojac 30 ugasi, pa kada je 40 upali drugi i tako redom.
Tako preko svojih brojaca dobijas preskaler za vremence, jos npr dodatnih 16 bita. Ako ti i to malo, dodaj jos jednu variablu koju inkrementujes i tako mozes da baratas prakticno kojim god hoces vremenom duzim od vremena interapta (kracim je nemoguce).
Tu ti ostaje glavna petlja slobodna da u njoj radis sta god zelis.
Reply
#16
(10-23-2015, 05:50 PM)mikikg Wrote: posle ce ti biti dosta lakse preci i npr na ovu temu:
http://forum.yu3ma.net/showthread.php?tid=704

Mikikg,

Svaka čast na projektu pretvarača !!!

Pozz
Reply
#17
(10-23-2015, 07:22 PM)Želja Wrote:
(10-23-2015, 05:50 PM)mikikg Wrote: posle ce ti biti dosta lakse preci i npr na ovu temu:
http://forum.yu3ma.net/showthread.php?tid=704

Mikikg,

Svaka čast na projektu pretvarača !!!

Pozz

Nema na cemu.
Na zalost projekt nije finalizovan mada sam dao pocetnu osnovu, pokrenuo prototip, i cela tema je vise u fazonu "gde ja stadoh ti produzi" Smile
Voljan sam da pomognem oko toga koliko mogu, znam sta sve i kako treba da se odradi ali sam vrlo slab sa slobodnim vremenom …

Zato malo "forsiram" temu oko PWM da to savlada jos neko kako bi mogao i taj sinusni pretvarac da se privede kraju.
Reply
#18
Evo ti još jedan dobar dokument:
http://ww1.microchip.com/downloads/cn/Ap...561389.pdf
Reply
#19
Uspeo sam da resim Softverski PWM tako sto sam podesio da Timer0 pravi interrupt na 2ms i u potprogramu za obradu prekida imam Brojac koji se uvecava svakim prekidom za 2ms dalje u tom programu imam uslove i upravljanje RB0 i RB1 pinovima kada je: 
 
brojac=8 iskljuci RB0 , 
brojac=10 ukljuci RB1 , 
brojac=18 iskljuci RB1 ,
brojac=20 ukljuci RB0 i reset brojac na 0.

Ovo super radi ali kada stavim nesto u glavnoj petlji recimo jedna led da blinka jedne sekunde onda pauza jedna sekunda i tako redom onda se javi problem sa kontrolom RB0 i RB1 koji tada menjaju svoje stanje u ritmu led diode svake sekunde.

Da li Timer0 generise prekid kada je u glavnoj petlji kontroler na izvrsenju pauze mislim da bih trebao da obustavi izvrsenje te pauze i ode na interrupt potprogram i kada to zavrsi da se vrati u glavnoj petlji de je stao ali ovde kod mene nije taj slucaj.
Reply
#20
Milane,

Moraš biti odredjeniji da bi dobio pomoć, koliko se ja sećam ti koristiš PicBasic a ti nigde u ovoj temi to nisi naveo !
Dalje, kako si napisao interapt rutine u PBP ili ASM ?

Ja sam odabno imao nekih dečijih bolesti kada sam u PBP koristio "ON INTERRUPT"
To nije baš najsretnije radilo i sudaralo se sa svim i svačim.
Od toga sam naravno odustao, i napisao ceo interapt u asembleru i smestio ga u PBP
- Odmah druga priča !

Dok sam u ASM interaptu i obradjujem nastale dogadjaje NEMA ŠANSE da on odatle izadje dok
mu to ne dozvolim, a sa "ON INTERRUPT" nikad ne znaš na čemu si !
U interaptu naravno boraviš što kraće, samo najosnovnije a kasnije kroz potprograme radiš šta ti treba.

Osnovni primer za to imaš na: http://melabs.com/resources/pbpmanual/9_0.htm

Kada imaš ASM interapt PC mora napustiti bilo šta u glavnoj ili nekoj drugoj petlji ili potprogramu i otići na "myint" u ASM interaptu.

Opet ti kažem, ja nisam neki veliki stručnjak za mikrokontrolere i ne mogu baš previše pomoći ...
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)