PIC16F1827 HPWM Push-pull - Printable Version +- DIY Electronic projects (https://forum.yu3ma.net) +-- Forum: Mikrokontroleri (https://forum.yu3ma.net/forumdisplay.php?fid=52) +--- Forum: Microchip PIC (https://forum.yu3ma.net/forumdisplay.php?fid=53) +--- Thread: PIC16F1827 HPWM Push-pull (/showthread.php?tid=1090) |
RE: PIC16F1827 HPWM Push-pull - Želja - 11-29-2015 (11-29-2015, 12:12 AM)Želja Wrote: Kada se obraćaš direktno pinu koristi LOW ili HIGH taj pin, (11-29-2015, 12:12 AM)Milan94 Wrote: Posto sam port B postavio u digitalnom modu zato sam pisao nule i jedinice za njihova stanja. Hajde ponovo pročitaj šta si napisao .... Pročitaj lepu temu na : http://www.elitesecurity.org/t453500-TUTORIJAL-PicBasic-Pro-PICF Kupi knjigu - nije skupa : http://milan.milanovic.org/skola/knjiga02.htm Hoću da pomognem, ali da bih mogao MORAŠ naučiti nešto iz literature koje ima još osim gore nevedene ! Pozz RE: PIC16F1827 HPWM Push-pull - Milan94 - 11-29-2015 Knjigu imam a ako se postavi neki pin ili ceo port u digotalnom modu onda se njihovo stanje odredjuje sa o (Low) ili 1 (High) tako bi bar trebalo ali moze i samo Low i High. Zaboravih da napomenem da programe testiram na Razvojnom sistemu koji je napravio Radanocevic Sinisa evo u ovoj temi mozete videti o kom hardveru je rec. RE: PIC16F1827 HPWM Push-pull - Želja - 11-29-2015 (11-29-2015, 12:28 AM)Milan94 Wrote: Knjigu imam a ako se postavi neki pin ili ceo port u digotalnom modu onda se njihovo stanje odredjuje sa o (Low) ili 1 (High) tako bi bar trebalo ali moze i samo Low i High. Da Milane, ako su u dig.modu onda ne može drugačije nego 0 ili 1. Ja sam ti pokušao skrenuti pažnju kako da koristiš benefite PBP kroz obraćaanje oslovljenim pinovima sa High ili Low a ti si odgovoriuo tako da ispadne da si MORAO koristiti 0 ili 1 zato što su u dig.modu. Kakva je svrha upotrebe PBP-a ili bilo kog drugog kompajlera ako nećeš koristiti njegove sintakse. ? Pozz RE: PIC16F1827 HPWM Push-pull - mikikg - 11-29-2015 Kompajler bi trebao da bude dovoljno pametan da uradi casting variable u compile-time iz bilo kog dostupnog formata. Ako se trazi digitalno stanje, ukucali 1 ili 0x01 ili 0xFF ili "miki" ili true ili … to sve mora da pretvori/evaluira u logicku informaciju "tacno" … Nisam nikad radio sa tim PBP inace bih vam rado pomogao … Ja uglavnom koristim C/C++, konkretno za Microchip MPLAB X, besplatan software. RE: PIC16F1827 HPWM Push-pull - Želja - 11-29-2015 PicBasic nije previše moćan kompajler. Ja ga koristim 10 - 12 godina i imam dosta uredjenih stvari u njemu, tako da mi se sada ne menja. Da sam zano ono što sada znam o njemu, sigurno bih ga zaobišao kada sam počinjao - ali sad mi se ne da. Može dosta toga da se uradi u njemu, ali traži poznavanje svojih slabosti. Ono što je kod drugih normalno, to ovde nekad mora biti izričito ispoštovano po njegovim pravilima. Ima tu bubica i problema, jedan je sigurno i ON INTERRUPT koji je dosta ograničen. Pogledajte po stranim forumima o tome, svi koriste ASM interapt za bilo šta ozbiljnije u PBP. Zato i pokušavam da objasnim ono što znam, i prenesem neke cake koje su meni odnosile po par dana češanja po glavi .. Mogu pomoći i hoću , ali da ne ispadne ono : Baba šumom a Dida drumom ... Veliki pozdrav svim kolegama ! RE: PIC16F1827 HPWM Push-pull - sax778 - 11-29-2015 Ranije dok sam koristio PBP interapte sam radio sa ovim include files pogledati i primere na ovom linku radi razumevanja kako se koriste http://www.dt-ints.com/DT_INTS-14/intro.html primer http://www.dt-ints.com/DT_INTS-14/blinky.html pogledati i ostale primere RE: PIC16F1827 HPWM Push-pull - Milan94 - 11-29-2015 Skinuo sam include file ali de to treba da raspakuje da bih kompajler mogao to da pronadje prilikom prevodjenja. RE: PIC16F1827 HPWM Push-pull - sax778 - 11-29-2015 Raspakuj i kopiraj u tvoj pbp kompajler u include RE: PIC16F1827 HPWM Push-pull - Milan94 - 04-27-2017 Posto sam savladao tehniku generisanja PWM 50Hz uz pomoc interrupta sada planiram da iskoristim hardverske PWM module koje poseduje ovaj MCU 2 standardna CCP modula i dva Enhanced CCP (ECCP). Enhanced PWM, Full - Bridge Enhanced PWM, Half - Bridge Sa standardnim CCP pwm koji generise signal na jednom pinu znam kako da menjam u petlji Duty (iscitavam vrednost iz sine tabele) i time dobijem jednu poluperiodu ali meni treba signal na jos jednom punu za generisanje druge poluperiode. Uradio sam transformator u Push-pull (2x12v) znaci meni bi odgovarala varijanta Enhanced PWM, Half - Bridge ali mi nije jasno kako tu da menjam Duty jer trebam prvo na jednom pinu da izgenerisem celu poluperiodu dok na drugom pinu netreba da imam signal i obrnuto. Kada postavim neku vrednos Duty u Half - Bridge modu dobicu tu vrednost na oba pina. Da li mora bas da se koristi Full - Bridge mod u kom bi kada izgenerisem jednu poluperiodu Sinus (izcitam celu tabelu) tada u CCPxCON podesim reverse mod i opet ispocetka krene iscitavanje tabele. RE: PIC16F1827 HPWM Push-pull - gorankg - 04-27-2017 Pogledaj steering mod kod tvog kontrolera. Možeš da generišeš PWM na jednom pinu koji vozi recimo gornji mosfet dok ti je drugi PWM pin konfigurisan kao gpio i on vozi donji mosfet. Za drugu poluperiodu im samo obrneš uloge. Na taj način ovim kontrolerom možeš da generišeš max. dva sinusna signala sa dva half-bridge. Biće u fazi ili pomereni za 180 stepeni. RE: PIC16F1827 HPWM Push-pull - Milan94 - 04-27-2017 Hvala puno nisam ni obratio paznju cemu sluzi Steering mod pa ovo je super kada se dodje do zadnje vrednosti u sinus tabeli samo zamenim stanja BIT 0, Bit 1 u PSTRxCON regustru i krenem ponovo ispocetka tabelu. RE: PIC16F1827 HPWM Push-pull - gorankg - 04-27-2017 Baš tako. Baci pogled na PIC16F1783 da vidiš šta taj malac ima. RE: PIC16F1827 HPWM Push-pull - Milan94 - 04-27-2017 Pic16f1783 imam na legeru nekoliko komada kupljenih zbog 12bit/AD znam da imaju 16bit rezoluciju PWM ali mi je malo komplikovano podesavanje registra veznih za PWM i zato sam ga u ovom trenutku zobisao i resio da urdim sa mojim omiljenim PIC16f1827 . Imam jos jedno pitanje glavna noseca frekvencija je 20Khz (50us) pwm-u je dodeljen tajmer2 u tabeli imam 40 vrednosti za generisanje sinusa e sada drugim tajmerom (timer 0) pravim prekide na 250us i u interapt rutini dodeljujem vrednost duty iz tabele da li to moze ovako da radi sobzirom da nije sinhronizovan tajmer0 i tajmer2 ili bi trebalo da bude sinhronizovano kada noseci PWM uradi 5 inpulsa tada se dodeli nova vrednost duty za narednih 5 inpulsa. RE: PIC16F1827 HPWM Push-pull - gorankg - 04-27-2017 Imaš onaj tool od microchip-a zove se PSMC Designer. Probaj sa njim. RE: PIC16F1827 HPWM Push-pull - Milan94 - 04-27-2017 (04-27-2017, 07:32 PM)gorankg Wrote: Imaš onaj tool od microchip-a zove se PSMC Designer. Probaj sa njim. Kada savladam ovo generisanje sinusa mozda i resim da probam kako radi na pic16f1783 ili pic18fx431. Da li nam veca rezolucija daje mogucnos finije podesavanje duty . RE: PIC16F1827 HPWM Push-pull - gorankg - 04-27-2017 (04-27-2017, 07:49 PM)Milan94 Wrote: [quote pid='71693' dateline='1493317967'] [/quote] Da. RE: PIC16F1827 HPWM Push-pull - Macola - 04-28-2017 Milan94, Evo ti nešto korisno... http://www.daycounter.com/Calculators/Sine-Generator-Calculator.phtml P.S. Naravno, to nije jedino na raspolaganju: http://www.daycounter.com/Calculators/ RE: PIC16F1827 HPWM Push-pull - Milan94 - 04-28-2017 Kalkulator za vrednost sinusoide koristim sa ove stranice Smart Sine . Interesuje me da li se ovo ovako radi sa dva tajmera ili treba da uvecavam duty preko tamera koji je dodeljen pwm-u kojim cu uvecavati neku promenljivu do 250us i tada da unesem novu vrednost u duty. Quote:Glavna noseca frekvencija je 20Khz (50us) pwm-u je dodeljen tajmer2 u tabeli imam 40 vrednosti za generisanje sinusa e sada drugim tajmerom (timer 0) pravim prekide na 250us i u interapt rutini dodeljujem vrednost duty iz tabele da li to moze ovako da radi sobzirom da nije sinhronizovan tajmer0 i tajmer2 ili bi trebalo da bude sinhronizovano kada noseci PWM uradi 5 inpulsa tada se dodeli nova vrednost duty za narednih 5 inpulsa. RE: PIC16F1827 HPWM Push-pull - Macola - 04-28-2017 Nisam dovoljno ispratio temu, zbog nedostatka vremena, Milane. Odavno nisam pisao u Pic Basic i odavno sam ga napustio zbog dosta njegovih mana, kako Želja reče upravo zbog mana sa ISR. Ne znam koji Pic trenutno upotrebljavaš, ali svi koji imaju hardverski PWM modul (CCP) se koriste tako što se konfiguriše taj modul kao PWM, potom se samo u jednoj ili najviše nekoliko instrukcija (zavisno da li radiš pwm sa 8 ili više bita) upisuje vrednost u registre pwm modula. Upisivanje je na nivou asm, bez obzira u kom jeziku pišeš. Na primer, ako je osmobitna vrednost nekog pwm za modul CCPR1, onda upisuješ u njegov donji bajt tu vrednost. Ovako to izgleda u Pic Basic, ako se dobro sećam sintakse (nisam ga koristio bar 12 godina): Code: CCPR1L = neka_vrednost U C to izgleda skoro isto: Code: CCPR1L = neka_vrednost; Code: // pwm1_val je 16bit varijabla Konfiguracija PWM modula je takođe istovetna u oba jezika (pošto je asm) i najpametnije je da je direktno uradiš a ne preko nekih biblioteka koje su ti "nevidljive". Na primer, za 18F seriju na 40MHz (i većinu 16F) i na primer CCP1 modul, konfiguracija kao PWM za na primer od 0-100% i na primer frekvenciju 6,25KHz (/* je takođe komentar u C, samo važi od /* do */ bez obzira na broj linija): Code: // pwm 1 i/ili 2 , za 8bita(0-100%) 6.25KHz To vrlo beznačajno opterećuje interrupt pa naravno možeš vršiti modifikaciju pwm u okviru interrupta. PWM će kod Pic MCU prihvatiti novu vrednost trenutno po isteku prethodnog pwm perioda (u ovom slučaju 1/6.25KHz). Ukoliko taktuješ te događaje na primer nekim tajmerom, poput TMR0, i ako želiš rezoluciju sinusa od na primer 100 vrednosti, onda konfigurišeš TMR0 da ti izaziva prekid na 100uS i brojiš svaki put do 100, tako da ti se sve vrti na 10mS tačno, da bi imao jedan polutalas događaja. Mora se iskontrolisati i izvor takta za TMR0 kao interni i preskaler da bi dobio željeno vreme. Code: RCON = neka vrednost; /* Compatibility mode. Priority. interapti */ Ovako bi na primer to osvežavanje pwm izgledalo u C (a ti prevedi u Basic jer je veoma slično, da se sad ne bavim time): Code: void interrupt int_hand (void) //funkcija koja se bavi interruptom, kod Basic je to labela koja se malo drugacije zove Ti sa 100uS u jednoj iteraciji tajmera TMR0, imaš na raspolaganju prostora za SKORO 800 instrukcija u okviru samog događaja, sa na primer PIC16F1783 na 32MHz ! Nije isr toliko tesan koliko se misli, ako u njemu ništa drugo ne obavljaš. Resurse mu troše komunikacije na primer, poput RS232, I2C, SPI i slično, i naravno blokiraju ga loše napisane delay funkcije, koje ako su loše napisane okupiraju potpuno MCU za vreme svog trajanja. Za to je na primer pametnije koristiti jednu varijablu koja se stalno uvećava u isr (nazvao sam je int_timer u prethodnom kodu) i neko merenje vremena bi izgledalo ovako: Code: neka petlja u main programu Ovo je način merenja vremena koji ne opterećuje glavni program, a isr ti radi pa radi ono što mora... Ako ti treba vise tajmera paralelno onda napraviš više varijabli koje se inkrementuju u isr. Svega desetak instrukcija će ti oduzeti na primer "motanje" long (32 bit varijable) u isr, što ti može obezbediti timer od koju stotinu uS pa do oko skoro 120 časova, i da ti ne pravi frku u glavnom programu.... Na primer word varijabla (16bit) ti oduzima samo dve instrukcije u isr a omogućava merenje od 100uS do 65535 x 100uS, tj. do 6.5 sekundi... Možeš na primer resetovati int_timer na svakih 10000 i u tom trenutku uvećati neku treću varijablu kao referencu za 1 sekundu, i tako dalje i tako dalje... Nadam se da sam pomogao... RE: PIC16F1827 HPWM Push-pull - gorankg - 04-28-2017 (04-28-2017, 09:43 AM)Milan94 Wrote: Interesuje me da li se ovo ovako radi sa dva tajmera ili treba da uvecavam duty preko tamera koji je dodeljen pwm-u kojim cu uvecavati neku promenljivu do 250us i tada da unesem novu vrednost u duty. Taj PIC nema prekide višeg i nižeg prioriteta tako da u slučaju da ih imaš više, može da se dogodi da ti tajmeri budu više ili manje nesinhronizovani. Ne znam koliko ovo može da utiče na krajnji rezultat (možda više softver naraste pa imaš više prekida). |