Fórum témák

» Több friss téma
Fórum » PWM mikrokontrollerrel
 
Témaindító: Magor, idő: Nov 5, 2006
Témakörök:
Lapozás: OK   5 / 9
(#) watt válasza kameleon2 hozzászólására (») Feb 6, 2013 /
 
Akkor röviden: Triak + olyan OPTO ami nem nullátmenetes(MOC3021). Ezt adatlap szerint bekötni, kiegészítve egy fényerőszabályzókban található toroid fojtóval, hogy ne zizegjen annyira. A PIC komparátor bemenetére illeszteni kell egy pici trafó független(!) tekercsét ellenállás osztóval. Nekem a trafó 12V-os, 10k/120ohm osztóval +-130mV körüli feszt kapok. Az adatlap szerint a bemenetekre max -300mV mehet, tehát ez belefér. A -comp bemenet 0-ra megy a +ra az osztó. Kapunk egy 100Hz-es megszakítás a nullátmeneteknél. A megszakításkor nullázunk egy számlálót, amit egy timer megszakításban léptetünk. Nekem ez 5859Hz-es léptetést jelent. A számlálót összehasonlitjuk a kívánt teljesítményt tároló értékkel és ha meghaladja, bekapcsoljuk a triakot, majd kis idő múlva ki(ha így járunk el, akkor a nagyobb érték lesz a kisebb teljesítmény. Ezen könnyen lehet változtatni). A triak csak a nullátmenetnél fog kikapcsolni, tehát a vezérlő jel elvétele nem kritikus, szinte azonnal megtörténhet. Csak akkora impulzust kell kiadni, ami belöki.
kb. ennyi.
(#) hepi02 hozzászólása Feb 16, 2013 /
 
Sziasztok!

A 16f628-ban szeretném bekapcsolni a hardveres PWM-et c nyelven. Tudnátok ebben segíteni? ASM-ben van egy példaprogramom, ami remekül működik, csak ahhoz sajna nem tudok hozzászagolni sem. CCS-C illetve MikroC áll a rendelkezésemre. Sajnos sehol nem találtam leírást hozzá.

Előre is köszönöm.
(#) hepi02 válasza hepi02 hozzászólására (») Feb 17, 2013 /
 
Időközben megtaláltam a megoldást. Lecsupaszítva ez:
  1. #include <16F628A.h>
  2. #FUSES NOWDT, INTRC_IO, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD
  3. #use delay(clock=4000000)
  4. #ZERO_RAM
  5. void main(void)
  6. {
  7.         set_tris_b(0b00000000);
  8.         setup_ccp1(CCP_PWM);  
  9.         setup_timer_2(T2_DIV_BY_16, 128, 1);
  10.         set_pwm1_duty(64);      //50% kitöltési tényező
  11. }


Van egy négyszögjel generátorom és az arról érkező jelek alapján szeretném állítani a kitöltési tényezőjét a PWM jelnek.

A célom az lenne, hogy egy tengely fordulatszáma alapján vezérelnék egy DC motort.

Minden segítséget elfogadok.
Előre is köszönöm.
(#) tibiiii00 hozzászólása Ápr 22, 2013 /
 
Helló mindenki!

Segítséget szeretnék kérni.
Egy olyan problémába ütköztem, hogy 100-150Hz körüli PWM jelet szeretnék előállítani
18F-es PIC-el, ami 16MHz-es belső kvarcról megy.
Hogy lehet ezt megoldani? Szoftveresen? Vagy csak Hardveresen?
A PIC frekvenciája 16MHz és az kell is szóval azon nem tudok változtatni.

Előre is köszi a segítséget.
Üdv.:Tibi
(#) _vl_ válasza tibiiii00 hozzászólására (») Ápr 22, 2013 /
 
A kérdés, hogy mekkora felbontást akarsz. Ha elég mondjuk 1/100, akkor ez 10-15kHz-es interrupt sűrűség mellett teljesen szoftverből megcsinálható, és azt még bírni is fogja a PIC.
(#) tibiiii00 válasza _vl_ hozzászólására (») Ápr 22, 2013 /
 
Köszi a gyors választ

8 bit felbontás lenne nekem a legjobb, és 4db hardveres PWM-et szaretnék használni.
Az is megoldható ezzel az interruptos dologgal?
És ha nem megy akkor hardveresen van valami megoldás?
Nem nagyon találtam erre semmit sajnos.
(#) _vl_ válasza tibiiii00 hozzászólására (») Ápr 22, 2013 / 1
 
8-bit még talán belefér. az 26..38kHz-es órajelet jelent, 100..150 utasítás interruptonként, határeset, de biztosan assemblyben kell összeraknod a kódot, mert minden egyes utasítás számít. És persze a CPU-d mást nagyon nem fog ezen kívül csinálni. A 4 valószínűleg belefér, bár akkor inkább a 150 utasítás -> 100Hz lesz a realitás.
Hardveres megoldás is van: másik CPU, vagy külső IC.
A hozzászólás módosítva: Ápr 22, 2013
(#) tibiiii00 válasza _vl_ hozzászólására (») Ápr 22, 2013 /
 
Mást is kellene még csinálni, szóval az interruptos dolog nem használható.
Milyen másik CPU-van amivel meg tudnám oldani?
(#) _vl_ válasza tibiiii00 hozzászólására (») Ápr 22, 2013 /
 
Inkább az a kérdés, hogy melyikkel nem... A 16-bites PIC-eket nem ismerem, de valószínűleg azoknak okosabb PWM-jük van. A 32-biteseket ismerem, azok biztosan tudják hardverből.
(#) bankimajki válasza tibiiii00 hozzászólására (») Ápr 22, 2013 / 1
 
Keress olyan PIC-et ami hardveresen rendelkezik 4 db PWM kimenettel. Pl. 18F8520. Én is azt használom a motorvezérlőmben. De 16MHz-es órajel mellett nem fog tudni ilyen kis PWM frekire lemenni. 1kHz körül lesz a legalja. Amúgy mi a cél? Mert ha mást nem csinál az MCU akkor tényleg kézenfekvő ehet az assemblyben megírt szoftveres megszakításos PWM. Esetleg egy RB megszakításra tolni egy külső frekit. (Ez lenne a PWM indító. És csak a kitöltés tényezőt csinálni meg timeres megszakítással. Akkor le tudsz menni bármekkora frekire és az MCU-nak is marad még szabad hasznos műveletvégző ideje.) Utóirat: a 18F8520-nak nincs belső oszcija.
(#) tibiiii00 válasza bankimajki hozzászólására (») Ápr 23, 2013 /
 
Sajnos még nem tudtam megoldani a problémámat, olyan kérdésem lenne hogy külső alkatrészekkel hogy tudnám megvalósítani a 100-150Hz-es PWM-et?
Mivel a PIC-nek 16MHz-en kell mennie. És nem csak PWM-re használnám.
Remélem van valami megoldás....

üdv.: Tibi
(#) _vl_ válasza tibiiii00 hozzászólására (») Ápr 23, 2013 /
 
Mi a célszempont? Ár? Méret? Komplexitás? Meglevő őskövület alkatrészbázis hasznosítása? Mert ezt sokféleképpen meg lehet csinálni.
(#) tibiiii00 válasza _vl_ hozzászólására (») Ápr 23, 2013 /
 
Az ár persze számít de nem a legfontosabb, méret nem számít, és új alkatrészből lenne.
A hozzászólás módosítva: Ápr 23, 2013
(#) _vl_ válasza tibiiii00 hozzászólására (») Ápr 23, 2013 /
 
Milyen PIC van most benne? Milyen funkcióit használod?
(#) tibiiii00 válasza _vl_ hozzászólására (») Ápr 23, 2013 /
 
Ez egy új áramkör lesz szóval a PIC-en lehet változtatni.
PIC16F1938 van egy előző változatban ahol jó volt az 1KHz-es freki.
Ebbe van 5 PWM azt használom és az UART-ot használom 250.000 boud al.
(#) _vl_ válasza tibiiii00 hozzászólására (») Ápr 23, 2013 /
 
PIC32MX120F032B, ez kb. mindent tud, amire szükséged lehet, feltéve, hogy nem gond a 3.3V-ról üzemelés. Árban se sokkal kerül többe.
A hozzászólás módosítva: Ápr 23, 2013
(#) tibiiii00 válasza _vl_ hozzászólására (») Ápr 23, 2013 /
 
Meg fogom nézni köszönöm, de még biztos lesz kérdésem sajnos most mennem kell.
Köszi a segítséget.
(#) mrobi válasza _vl_ hozzászólására (») Ápr 23, 2013 /
 
Szerintem el lehet érni a 100Hz, 8bit-et. Csak kicsit számolni kell.
100Hz, 8bit-es szoftveres pwm-hez 40us-onként kellene megszakításnak jönnie. 16MHz 8 bit-es timer esetén 64us-onként jön megszakítás. Egy utasítás ciklus 0,25us. Ebből kijön, hogy ha a timer nem 256-nál csordulna túl, hanem 160-nál akkor már jó is lenne. A megszakításban durván 30 utasítás van. (Én ezt a megoldást használnám pwm-nek: ezt.) Tehát a megszakítás végén, de még a regiszterek visszaállítása előtt a timer-hez tartozó számlálóba 121-et töltünk be, akkor pont 160 utasítás ciklusonként jön megszakítás.
(#) gaspar_zsolt hozzászólása Jún 5, 2013 /
 
Szervusztok!

Próbálok egy 12F683-as PIC PWM modulját életre kelteni, de egyszerűen nem értem mi lehet a gond. Kérek egy rutinos kollégát, aki rápillant az alap beállításokra és elmondja nekem mit hagytam ki.

Egy érdekes dolgot vettem észre, ha az xx helyére 11-et írok, akkor a kimeneten folyamatosan világít a teszt LED.
MOVLW B'000011xx' ;PWM mode set
MOVWF CCP1CON ;a CCP modul bekapcsolása


Köszönöm.
(#) Hp41C válasza gaspar_zsolt hozzászólására (») Jún 6, 2013 /
 
A PR2 a Ban1 -ben van.
(#) gaspar_zsolt válasza Hp41C hozzászólására (») Jún 6, 2013 /
 
Igen abban.
De, közben rájöttem mit rontottam el.

A config_word-ben lehet az oszcillátort beállítani egyrész, másrész meg az OSCCON regiszterben is. Az utolsó biten múlik, hogy melyik kellene figyelembevenni.

OSCCON:
bit 0 SCS: System Clock Select bit:

1 = Internal oscillator is used for system clock
0 = Clock source defined by FOSC<2:0>

Én azt gondoltam, hogy beállítom az 1-est és megadom és köszi-viszlát.
Csak hogy erre nem csinált semmit.
Amint beállítottam a config_wordben az utolsó tagot, azonnal működni kezdett!
__CONFIG _FCMEN_ON & _IESO_OFF & _CP_OFF & _CPD_OFF & _BOD_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_OFF & _INTRC_OSC_NOCLKOUT

Köszönöm, hogy ránéztetek!
Üdv
Zsolt
(#) proba válasza gaspar_zsolt hozzászólására (») Jún 6, 2013 /
 
A timmer 2-be próbálj kisebb értéket írni. Szerintem a 255 nem egy jó érték.
(#) gaspar_zsolt válasza proba hozzászólására (») Jún 6, 2013 /
 
Az első változatban 500kHz-el és 127-es PR2-vel meglett a 61Hz, amivel már barátságos a szervo vezérlése.
A végső változatban 1Mhz-ről megy majd és PR2-ben 255-tel feltöltve.
A PR2 értékkel nem árt óvatosan bánni, mivel ez egy szorzat tagjaként adja a PWM szélességet, míg a kitöltést egy másik byte-ba írt számmal kapjuk. Ha nagyobb a CCPR1L mint a PR2, akkor nem lesz jó megint, mert a kitöltés nem lehet nagyobb mint a periódus.

PWM Period = [PR2 + 1]*4*Tosc*T2CKPS
PWMDutyCycle=(CCPR1L:CCP1CON<5:4>)*Tosc*T2CPKS


Egyébként működik a rendszer! A hiba az órajel megadása volt a config word-ben.
(#) GeeBacsi hozzászólása Jún 25, 2013 /
 
Hello

Szeretnek egy kis segitseget kerni apbszolut kezdo vagyok.Valami olyasmira lenne szuksegem egy piccel hogy egy adott jelre kapok vissza egy pwm jelet aminek a kitoltese poti ellenalasaval no vagy csolkken.Egy motorra raknam a gyari efi helyet mert iden mar kettot vettem es az injektor vezerlest oldanam meg vele a cdi mar kesz de karbit nem akarok ra semmi keppen.Nem talaltam jobb topikot erre sajnos.Bocsanat az ekezetek miadt de nem magyar a gepem,
(#) mrobi válasza GeeBacsi hozzászólására (») Jún 25, 2013 /
 
Pic programozáshoz mennyire értesz? Mert ha semennyire és csak ezt akarod megcsinálni akkor felesleges belekezdeni (égető áramkör, stb.). Ha értesz hozzá valamennyire akkor pedig keresni kell egy olyan pic-et amiben van PWM és ADC.
(#) gaspar_zsolt válasza GeeBacsi hozzászólására (») Jún 25, 2013 /
 
PIC12F683 tökéletes a célra. Én ezzel oldottam meg a szervo vezérlését.
Potméterről érkező feszültséget az AD konverter átalakítja és PWM jelet generál a szervo működtetéséhez.
A hozzászólás módosítva: Jún 25, 2013
(#) GeeBacsi hozzászólása Jún 26, 2013 /
 
Hello A cdit magannak csinaltam PIC a lelke.Bar az otletet internetrol vettem a panelt megcsinalom az nem gond es van pickit programozom is.Alapdolgokat megtudom csinalni piccel de sajna nagyon szegenyes a magyar dokumentacio a komolyabb dolgokhoz.Volna egy csomo otletem de javareszt eddig full analog dolgokat csinaltam.Most ez foglakoztat.Megnezem azt a picet koszonom
(#) pok31 hozzászólása Júl 1, 2013 /
 
Helló
Egy segítőkész kollégátok az akváriumomhoz készített egy "napfelkelte-napnyugta" +fényerőszabályozás LED kapcsolást. Az egészet egy 16F628A vezérelné. A gondom, hogy nem tudom milyen mosfet-et tegyek a végére, mert változott az eredetihez képest a fogyasztás. 12V, max. 80W LED szalagot vezérelne PWM-mel.
Ahogy összecsipegettem az információkat
-Logic-Level Gate Drive kellene
-minnél kisebb max. V érték
-kapu küszöb feszültség mindegyik adatlapon min. 1V - max. 2V, de a PIC lába mintha 5V-t adna ki
-FET meghajtó IC kell
-melegszik, nem melegszik
Tiszta káosz vagyok már.
Segítsetek légyszi, hogy a következők megfelelőek lennének-e (IRLZ44N, IRL540N, IRL3705N), tudná-e őket vezérelni a PIC, vagy mást ajánlotok.
Köszi.
A hozzászólás módosítva: Júl 1, 2013

mosfet2.png
    
(#) _vl_ válasza pok31 hozzászólására (») Júl 2, 2013 /
 
A PIC nagyon kis árammal tudja csak meghajtani a kimenetét, az 5V-os táp miatt pedig a tranzisztoros bikázás nem lesz igazán nyerő. Emiatt én mindenképpen valami meghajtót raknék oda. A legegyszerűbb meghajtó az NE555, amit lehet a 12V-ról táplálni, és akkor lehet sima FET-eket használni, amiket sokkal egyszerűbb beszerezni, és a választék is sokkal nagyobb belőlük. Jelen helyre már akár egy IRFZ44N is elég lehet, de egy IRFZ48N már hűtőbordát sem fog igényelni, és ezeket az NE555 kényelmesen meg is tudja hajtani alapból. Érdemes a kapcsolást egy szimulátorban tesztelni (pl. TI TINA), a grafikonról pedig lehet nézni, hogy mennyire gyorsan-lassan tud kapcsolni a FET, bár a LED-ek frekijén (max. 1kHz) ez amúgy sem annyira kritikus. A szimulátorral az is kiszámoltatható, hogy kb. mennyi veszteséget fog termelni a FET.
Lásd a mellékelt ábrákat. Az R3 jelképezi a 12V/6.67A-es fogyasztót, a VG1 pedig a PIC kimenetét (itt 1kHz-es 50%-os PWM jelet ad). A P a FET vesztesége (AM1 * VM3).
(#) Peter65 válasza pok31 hozzászólására (») Júl 2, 2013 /
 
Ilyen nagy teljesítményhez szerintem is fet meghajtót kéne használni, akár a _vl_ által ajánlott 555-tel, vagy más IC-t. Ilyen esetben, mivel a fet meghajtó kimenetén már 12V körüli feszültségű a kapcsoló jel, nem kell Logic-Level Gate-ű fet.
Következő: »»   5 / 9
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem