DIY Electronic projects

Full Version: PIC16F1827 HPWM Push-pull
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3 4 5 6
Skoro ceo dan se mucim da dobijem sinusoidu i evo sta sam uspeo neznam da li to tako treba.

Signal je sa pina filtriran preko dva RC filtera 1k , 220n ovo je na jednom pinu generisana sinusioda ali mi nesto neizglda da je sinusioida Smile .


[attachment=23368][attachment=23369]
Aj okači ovde kod i hex pa da gledamo. Nešto si omašio.. Ni meni ne liči na sinus. Jeste da ima neke elemente Big Grin al mi liči i na dva zeca između tri sise Big Grin
Evo kod jeste u PicBasic ali nije tesko razumeti


Code:
#CONFIG
__config _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
__config _CONFIG2, _WRT_ALL & _PLLEN_ON & _STVREN_OFF & _BORV_19 & _LVP_OFF
#ENDCONFIG

;PIC16F1827

define OSC 32

OSCCON=%11110000  ' Interni oscilator 32MHz
CCP1CON=%00001100
CCPTMRS=%11111100
T2CON=%00000101      ; prescaler 1:4 TMR2
PR2=99               ; frekvencija PWM 20kHz
APFCON0 = %00000001
ANSELA = %00000000   ; Port A je digitalni
ANSELB = %00000000   ; Port B je digitalni
PORTA = %00000000
PORTB = %00000000
TRISA = %00100000    ; port A je izlazni osim RA5
TRISB = %00000000    ; port B je izlazni

INCLUDE "DT_INTS-14.bas"     ' Base Interrupt System
INCLUDE "ReEnterPBP.bas"     ' Include if using PBP interrupts

DUTY var word
i var word
vrednost var word
i = 0

ASM
INT_LIST  macro    ; IntSource,     Label,  Type, ResetFlag?
       INT_Handler   TMR0_INT,  _Int_Sub,   PBP,  yes
   endm
   INT_CREATE                ; Creates the interrupt processor
ENDASM

    
    
OPTION_REG = %10000010    '010 preskaler postavi u odnos    1:8

TMR0=6                    'Postavi vrednost TMR0 (250us)

@ INT_ENABLE  TMR0_INT     ; enable Timer 0 interrupts

Pocetak:





Goto Pocetak

Int_Sub:




i = i + 1
if i >= 40 then
i = 0
endif
gosub uzmi_char



CCP1CON.4 = DUTY.0
CCP1CON.5 = DUTY.1
CCPR1L = Duty >>2


@ INT_RETURN

uzmi_char:

lookup i, [5, 30, 59, 89, 117, 145, 173, 199, 223, 247, 269, 289, 307, 324, 339, 351, 361, 370, 375, 379, 380, 379, 375, 370, 361, 351, 339, 324, 307, 289, 269, 247, 223, 199, 173, 145, 117, 89, 59, 30], DUTY
return
Ovo mi nije jasno

Code:
CCP1CON.4 = DUTY.0
CCP1CON.5 = DUTY.1
CCPR1L = Duty >>2

Prvo sta znaci ovo .0 i .1 i sta je "Duty" ?
Pronasao sam de je problem trebao sam kod tajmer2 preskaler da podesim 1:16 i PR2=24 tada se vrednost duti krece u granicama od 0-100% i vrednosti u tabeli se izmene 0-100.

[attachment=23370]
(04-29-2017, 12:35 AM)mikikg Wrote: [ -> ]Ovo mi nije jasno

Code:
CCP1CON.4 = DUTY.0
CCP1CON.5 = DUTY.1
CCPR1L = Duty >>2

Prvo sta znaci ovo .0 i .1 i sta je "Duty" ?

To su dva najniza bita koji se smestaju u CCP1CON <5:4 > dok se preostalih 8 smestaju CCPR1L i tako se dobija 10bit redolucije.
Heh, dobro radi program, pogledajte "zeke" malo bolje Smile
Overflow se desi za brojac posto je 8 bitni a koliko vidim u tablici za sinus si isao do 380, moze samo 0 - 255!
Milane, da li su ti ovo u tabeli vrednosti od jednog ili dva bajta (character ili integer)?
Znaci to je bio problem tacno da je tajmer2 8bit ja video moze da se podesi preskaler 1:4 i dobijam zeljeno vreme a upisom  PR2=99 za maksimalni duty iznosi vrednost 400 zato sam u tabeli podsio 0-380 uopste nisam ramisljao da imam tajmer2 8bit.

Da nisam postavio sliku tesko da bih mogao da odgonetnem zasto imam ovo umesto sinusoide Smile ovo je za mene bilo novo iskustvo jer do sada nisam koristio PWM modul.

Hvala vam puno
(04-29-2017, 12:49 AM)gorankg Wrote: [ -> ]Milane, da li su ti ovo u tabeli vrednosti od jednog ili dva bajta (character ili integer)?

Ja sam ih pisao kao dva bajta jer jedan sadrzi 256 a u tabeli prelazi ta vrednost u PicBasic promenljiva od dva bajta je Word.
Testiranje sinusnog invertora je proslo ok sada se trebam malo igrati sa vrednostima LC filtera na izlazu kako bih dobio lepsi signal.
Trenutno imam 2uF kao filter i nije toliko losa sinusioda mada verujem da bi sa redno vezanom L dobio bolje rezultate.

Kakvo jezgro treba koristiti za zavojnicu da li feritno ili gvozdeno od limova i da li to jezgro treba imati Gap ili ne.Noseca frekvencija je 20Khz pa predpostavljam da bih tu trebalo feritno ali nisam siguran.
Trebalo bi da bude gapovano feritno jezgro u L/C filteru, tj vaze ista pravila kao i kod sinhronog Buck, mogu se koristiti "zuti" torusi iz ATX koji imaju distribuirani gap ili druga klasicna jezgra poput ETD gde sam ostavis gap izmedju polutki.
Miki ti je savršeno tačno odgovorio na pitanje.

Ja ću malo šire da objasnim poreklo potrebe za gapovanim jezgrom.

Ti ćeš za full-bridge računati zavojnicu kao za bilo koji sinhroni buck, s tim što full-bridge dodatno ima sposobnost da menja polaritet izlaza. Sve ostalo je isto.

Kod noseće frekvencije od 20KHz, proračun ćeš napraviti prema željenoj I_ripple, kao i kod bilo kog buck.
Spora promena za tih 10mS jednog mrežnog polutalasa je praktično skoro DC u odnosu na 20KHz.

Bolje je staviti dva manja kalema iza full_bridge, pa tri konda iza njih, dva ka masi jedan između izlaza, jer onda imaš istovremeno potiskivanje i common mode smetnji.

Isto se radi kao i za bilo koji full-bridge class-D pojačavač, samo se računa za nosilac od tvojih 20KHz.

Dakle, možeš očekivati DC bias izlaznih kalemova i njegov iznos je određen maksimalnom očekivanom amplitudom (ne rms!) struje u jednom polutalasu. Tj. ako na primer praviš pretvarač za sinusnih 230Vac, 50Hz, tebi je amplituda napona oko 325Vpk. Ako ti najgori slučaj potrošača ima recimo 100R otpora, amplituda struje će ti dostići 3,25Apk i to je iznos struje koji još uvek ne sme zasititi izlazne kalemove, ako misliš da kalemovi imaju svoju svrhu.
Filter je posebno koristan kod onih potrošača koji nisu termogenog karaktera i to posebno onih koji su kapacitativnog karaktera.
Kod termogenih i induktivnih potrošača nećeš imati posebnih problema sa full-bridge jer struja je dimenzionisana: u prvom slučaju otporom potrošača i ima poznatu vrednost, dok kod induktivnog u svakom periodu pwm bude mala pa raste monotono.

Kada na primer pogoniš neki motor koji ima pomoćni kondenzator, ili možda neki uređej koji ima sopstveni EMI filter, onda ti je opterećenje mosta kapacitativno i odlikuje se velikim udarnm strujama zbog strmih ivica pwm.
To će filter svesti na optimalnu meru, ma koji potrošač bio iza...

Kod onih žuto-belih toroida, iz starih ATX, možeš računati na od 150-do 300 amper navoja mogućeg DC bias, što jako zavisi od proizvođača jezgra.
Opterećuješ polako pretvarač i osciloskopom pratiš struju mosta (preko nekog šenta ili preko strujnog trafoa koji sam napraviš) i ako vidiš jedan specifičan nagli porast struje pri kraju pwm impulsa u okolini maksimalnog pka izlazne veličine, onda ipak zasićuješ jezgro. Onda treba ili povećati jezgro, ili smanjiti broj ampernavoja na štetu veće I_ripple.

Merenje DC bias je priča sama za sebe, prilično nezgodna oblast koja zahteva opreme u rangu cene dvospratne kuće.
Na primer:
https://www.google.rs/url?sa=t&rct=j&q=&...82hZAi6XxA

Ima i jednostavnijih metoda za koje bi se uslovno reklo da mogu "završiti posao" bar u pristojnim granicama tolerancije, samo bi trebalo jezgra držati na 100*C tokom merenja:

http://www.vk2zay.net/article/200

Najlakše je to ipak ispitati sa tim uređajem koji praviš, pod uslovom da jezgra nekim fenom dovedeš na možda 100*C temperature, sa najgorim uslovima potrošnje na izlazu. To će biti realni uslovi za kasniji trajni pogon.
Imaš ti pravo taj full-bridge pokrenuti i fiksnim pwm sa samo jednim polaritetom, gde mu polako, korak po korak povećavaš pwm gde na maksimalnom opterećenju težiš da dostigneš amplitudu od 325V.
Pratiš promenu nagiba struje u pojedinačnom impulsu pwm. Ukoliko se nagib naglo počne povećavati, to je prag saturacije jezgra.



Pozdrav
Evo i jednog teksta kog više nećete moći da nađete na netu:

[attachment=23403]
Pozdrav.Macola je u jos nekoj temi pisao oko merenja DC bias ali sad neumem da nadjem gde mi je to pa ako se neko seca neka pise.Imam skoro sve na papiru sto je Macola pisao ali sad da me ubije neko ja ovo za DC Bias nemogu nemogu da nadjem
Macola hvala na detalno objasnjenje sada su stvari jasnije na koji nacin se odredjuje vrednost zavojnise.

Iz ovog teksta sam zakljucio da LC filter ide ispred trafoa a ne iza ukoliko koristimo klasican trafo kojim podizemo napon 12v-220v.
Umom slucaju trafo ima srednji izvod 12v- 0 -12v sekundar 250v planirao sam da koristim push-pull zbog jednostavnosti mosfet drajvera koji sam izveo sa TC427 i 2x2 IRFZ44N ali koliko vidim nece moci to tako da radi. Imam velike gubitke na tranzistorima za vrlo kratko vreme tranzistori dostizu visoku temperaturu sa malim opterecenjem.Na gejtu imam oko 12v proverio osciloskopom znaci TC427 radi svoj posao ali mislim da ce morati da se to potera u Full-Bridge.

Push-pull izgleda da nemoze da se izbori sa modulisanjem signala zato vecina ide na full-bridge jer to provereno radi.

sema izlaznog dela invertora sve je uradjeno kako je na semi

[attachment=23408]
Pa Milane, dovoljan je opis koji sam u prethodnom tekstu dao da te uputi na dalje pretraživanje.

Na žalost, nauka o ponašanju feritnih i praškastih jezgara, pod DC bias, gde je superponirana neka relativno visoka učestanost (ono tipično za SMPS), je tako kompleksna da te mozak zaboli, a merenje sa vrlo pouzdanim rezultatima ništa manje gadno.

Prvo, sve veoma zavisi od temperature, onda gubici zavise i od temperature, od samog DC bias, te od frekvencije nosioca.
Sama granica DC bias zavisi i od geometrije namotaja i jezgra.
I tako dalje i tako dalje...

Za naše amaterske potrebe i potrebe nižih serija, bolje je naći okvirne vrednosti pa onda preterati sa performansama u izvesnim granicama.

Opšte pravilo bi bilo da uvek računaš na kondicione uslove pri 100*C, što je inače i prilično uobičajen slučaj.

Ako ti treba pristojno ponašanje sa često očekivanim kratkim spojevima, onda su bolja praškasta toroidna jezgra jer imaju monotonu krivu saturacije i ima se više slobode u projektovanju zaštita ako su sporijeg tipa.
Na žalost, praškasta jezgra obično nemaju nikakvu oznaku osim jedne ili dve boje kojim su presvučena, gde čak i ako naručiš od nekog distributera ne mora da bude ono što je pisalo na sajtu.
Tu se onom buck metodom (buck sa kratko spojenim izlazom, praktično staircase saturacija) koju sam linkovao u nekom od prethodnih postova (Alan's Lab) sa ugrejanim jezgrom, DC bias može proveriti u granicama od okvirno +-10-15%, što je sasvim dovoljno dobro za upotrebu.

Nasuprot njima, obična jezgra iz dve polutke, ako su Epcos ili TDK, dosta lako se mogu koristiti zahvaljujući besplatnom alatu MDT, koji se može skinuti na Epcos sajtu.
Ona imaju daleko strmiju saturacionu krivu, te zaštita od preopterećenja mora biti brza, praktično od impulsa do impulsa.

Neće ti previše pomoći čitanje nekoliko mojih postova o tome jer to nije dovoljno za potpuno savladavanje teme o DC bias, ali ovo što sam napisao i pomenuo od alata je sasvim dovoljno ako ne projektuješ neku veliku seriju gde se mora uštedeti svaki gram jezgra...

Za tvoj slučaj je čini mi se daleko pametnije upotrebiti neko od jevtinih EE ili EI feritnih jezgara, upravo od Epcos, TDK ili možda Kaschke (ima dosta vrlo paralelnih gabarita jezgra i materijala sa paralelnim osobinama, te se može upotrebiti Epcosov MDT).
Tebi su naponi na FB, ukoliko radiš sa 325VDC, toliki da je sasvim nepraktično motati powder toroide, jer ti treba mnogo navojaka i problem je izolacija. Tu su u prednosti EE jezgra, gde motanje bude jednostavno i lako, i gap se lako namesti na potreban. Na primer staro dobro jezgro E42 od N27, koje se može na puno mesta kod nas kupiti (ITC, Retam...), kao prigušnica za tvoj uređaj može operisati sa više od 400VA izlaza.

Ukoliko radiš FB na niskom naponu, kojim pobuđuješ step-up gvozdeni trafo, onda za filter ti bivaju najpraktičniji upravo storage powder toroidi, no tu već nemaš pouzdanih alata za računanje, pošto nemaš pouzdanu oznaku jezgra, osim ako naručiš baš od izvornog proizvođača...

Tu je pametno na primer kupiti neki od gotovih storage kalemova jer uz njih ide i podatak o L i saturacionoj struji na 100*C. Na primer imaš recimo kalem na powder toroidu sa recimo 100uH i deklarisanih 3A dc struje. Takav bude na R27 i ima tipično oko 50-tak navojaka. To ti odmah govori da ti je bezbedno 150 ampernavoja za vrlo pouzdanu upotrebu u kompletnom temperaturnom rasponu.
Ako treba premotaš ih po želji a broj ampernavojaka uvažiš pri tome.
Lako bi to bilo izračunati i za ATX jezgra, da nije težak lažnjak oznaka o strujama i snazi tih napajanja za kompove.
Ti podaci su u najvećem broju slučajeva obično s*anje i možeš računati tek na oko pola napisanog stanja u kontinualnom radu...
Tu se kinezi gađaju sa amperima i vatima, kao mladi auto mehaničari sa konjskim snagama kad budže jugića :-)
Daleko bilo kad bi računar trošio kontinualnih 350-500W! Prvo bi račun za struju bio kao kada bi žena peglala 24h/7d, a drugi izvor grejanja u sobi ne bi bio potreban za zimu :-). He he, seti se da sijalica od 100W odgaji punu kutiju pilića :-)

Tako ti je to sa powder toroidima koji nemaju oznaku. (napraviš ono kao Alan's Lab , izmeriš pa upotrebiš tek onda).

Pozdrav druže,
Macola
Ukoliko uspem da resim problem zasto se prekomerno greju tranzistori da li ovako treba vezati LC fiter kada se radi Push-Pull ili srednju tacki izmedju dva kondenzatora treba povezati sa srednim izvodom trafoa.


[attachment=23409]
Malo smo izmesali stvari, ti si mislio na Push-Pull a Macola i ja na Full-Bridge, ne moze tako da se veze filter, u sustini je tako ali kada imas Full-Bridge, ti sa Push-Pull imas samo pola mosta.
Da li postoji sansa da sinusni invertor pokrenem u push-pull i kako se kod ove topologije vezuje LC filter.
Pages: 1 2 3 4 5 6