Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 52 odgovora
  • 15.154 pregleda

Najnovija ↓

U/f kontrola motora dsPIC30F4011 12.07.2011. u 21:39 · pre 186 meseci #1
Pozdrav svima,
interesuje me kako isprogramirati U/f kontrolu AC motora na navedenom dsPIC-u? Konkretnu kako izgleda tabela sinusa, kako menjati vrednost amplitude izlaznog napona, kako menjati frekvenciju i kako racunati duty za PWM (kojom formulom)?
Ako moze za pocetak objasnjenje postupka rada programa pa cu pokusati sam nesto napisati...
Hvala unapred.
Re: U/f kontrola motora dsPIC30F4011 17.07.2011. u 19:20 · pre 186 meseci #3
Pregledao sam ovo i jos neke fajlove ali mi treba pomoc.... Video sam da postoji tabela sinusa ona se uporedjuje sa trougaonim signalom iz ptper-a i na osnovu toga se dobija vrednost duty-ja... Imam sledeca pitanja: kako izgleda tabela sinusa, koji su to brojevi, koliko tacaka definise sinus, kojom formulo se uporedjuje vrednost sinusa i trougla i dodeljuje PDC-u? Da li bih mogao sam napraviti tu tabelu?
Jel bi mogli da zapocnemo sa nekim programom, pa polako da dodjemo do resenja...?
Hvala unapred!
Re: U/f kontrola motora dsPIC30F4011 19.07.2011. u 03:00 · pre 186 meseci #4
Da li drajvuješ AC motor sa kaveznim rotorom ili BLDC motor? Kolika je snaga?

Ono što je u vezi sa sinusom je prosto, tu ima više drugih težih problema.

Prvo odredi koja će frekvencija PWM signala biti. U okvru svake periode treba da je Ton/T = sin(ugla). Obično AC motori sa kaveznim rotorom idu od par Hz do 50..60Hz AC napajanja. Često je frekvencija PWM par kHz, recimo 3kHz. Ako je najniža pobuda motora 3 Hz onda u tome imaš 1000 perioda PWM-a i treba ti toliko tabelarnih vrednosti za sin. Ali to svedeš samo na 45 stepeni, što je 1/8 dakle 125 vrednosti, a ostale dobijaš prostim trigonomertijskim transformacijama samo sa sabiranjem i ili oduzimanjem.

Ono što je važnije to je da se napon (struja) mora povećavati sa smanjenjem broja obrtaja motora. To povećanje je poznato, ali sada ne mogu da se setim zavisnosti od broja obrtaja.

Za svaku fazu ćeš imati potpuni most sa tranzistorima, moraš obeznediti da u PWM signalu postoji takozvano mrtvo vreme kada ni jedan tranzistor mosta ne provodi. Tranzistor koji ide u zasičenje ima kraće vreme uključenja nego isključenja, pa pri promeni stanja, ako nema pomenutog vremena, most kratkospaja na trenutak napajanje.

Ima još problema koji mogu da se ispreče, sve do nivoa smetnji koje će zračiti ceo regulator. Ako ti je PWM centralno podesiv nivo smetnji će biti niži.

Pozdrav.
Sviđa mi se1
Re: U/f kontrola motora dsPIC30F4011 19.07.2011. u 11:06 · pre 186 meseci #5
Imas kompletan sors kod u asembleru na microchip sajtu. Na:
http://www.microchip.com/stell...29&page=wwwdevMotorControl
mozes naci Development Tool koji odgovara tvojoj aplikaciji. Date su i seme pa po njima mozes uraditi sopstveni razvojni alat. Jeftinije je, usput nesto naucis ali zahteva malo vremena.
Inace, Texsas Instruments, Freescale, ST ... imaju takodje razvojne alate za ove namene. Uporedi ih sa microchipom. Predlazem ti da napravis jednu plocu za napajanje, drugu na kojoj ce ti biti mcu i pratece okruzenje (optokapleri, potenciometri, tasteri i serijska veza ka PC) i na trecoj ploci drajver za motor. Lakse i brze ces raditi izmene a i popravke kad nesto ode (spremi vise tranzistora za drajver :)).
Potpis
gorankg
Re: U/f kontrola motora dsPIC30F4011 19.07.2011. u 22:09 · pre 186 meseci #6
Upravljam kaveznim asinhronim motorom...Opseg frekvencije sam hteo da bude 10-50 Hz...
Da li mi mozes malo pojasniti deo koji se tice vrednosti PWM duty-ja i frekvencija? (ja probati da objasnim kako sam ja razumeo)
Sto si pomenuo odnos napona i broja obrtaja, mislim da bi se napon trebao smanjivati sa smanjivanjem frekvencije (U/f=const)
Predlog za izradu elektronike cu svakako primeniti, jer sam tako nesto i planirao.
A o mrtvom vremenu cemo kasnije dok ovo resimo.

Ako sam dobro razumeo, treba da imam tabelu sinusa definisanu odredjenim brojem tacaka n, a taj broj tacaka je definisan ovakvom formulom: n=fmin/fpmw; gde je fmin - minimalna frekvencija motora, a fpwm - frekvencija pwm modula. Interesuje me kolika je amplituda sinusa? Nakon toga trebao bi mi jedan tajmer koji ce mi definisati vreme odabiranja tacaka i dodeljivanje pwm signalu. Evo kao primer, recimo da mi je sinus definisan sa 20 tacaka, i da pogonim motor sa 50Hz, to znaci da bih trebao postaviti tajmer na 1 ms i na svaku ms vrednost duty-ja ce biti vrednost te tacke (Ton/T), jel? Naravno sa vise tacaka vrednost tajmera bi bila manja pa bi se korigovalo za druge frekvencije. Ovako sam razumeo za frekvenciju. Interesuje me sledece: ako zelim frekvenciju od recimo 25Hz, to znaci da bi vrednost napona na motoru trebala da bude upola manja, sto znaci da bi vrednost duty-ja trebala da se promeni u odnosu na malopre. Kako sada definisati sinus a da se mogu primeniti gornje formule?

Kada razjasnimo algoritam programa i ovu matematicku pozadinu, hteo bih da probamo konkretno i da napisemo program.

Gorane, hvala na linku pogledao sam, ali posto sam, moze se reci, pocetnik u programiranju imam poteskoce da tumacim kod u asm, ovako mi je lakse, a shvaticu bolje. Nadam se da ce i drugima ovo pomoci.

Hvala svima na pomoci.
Re: U/f kontrola motora dsPIC30F4011 23.07.2011. u 21:46 · pre 186 meseci #7
Da li moze neko da prokomentarise nesto o ovome sto sam napisao, cisto da znam da li razmisljam u dobrom smeru.
Hvala unapred
Re: U/f kontrola motora dsPIC30F4011 24.07.2011. u 13:03 · pre 185 meseci #8
Zivadine,
koliko vidim imas malo zbrke u glavi. Pomijesano ti je sve, jer unaprijed vodis racuna o mnogo faktora i dvije frekvencije i jos par amplituda.
Ajde ovako,
zaboravi na cas da ti treba sinus frekvencije npr 25Hz. Zamisli da ti u nekom trenutku vremena treba izlazni napon od npr 108V ( zamrzni taj trenutak u glavi). E sad imas izvor jednosmjernog napona od 300V, da bi dobio tih 108V treba da imas PWM sa signalom od 108/300. Pauza je dakle 1-108/300. Sve to skalirano na period PWM-a.
Sada si rijesio pola problema.
U iducem trenutku ti treba 127 V, opet matematika 127/300 i 1-127/300.
Napravis n tih tacaka ( sto vece n bolja aproksimacija sinusa), ali ne treba pretjerivati sa brojem tacaka, jer ces imati neki NF filter iza.


Re: U/f kontrola motora dsPIC30F4011 24.07.2011. u 16:38 · pre 185 meseci #9
Evo ovako...Recimo da imam n tacaka za definisanje sinusa, imam izvor od 300VDC i recimo da je frekvencija motora takva da mi treba napon od 150V (amplituda). PWM modul je 8mo bitan (0-255). da bih dobio napon od 150V potreban duty (Ton/T) za PWM je 50%, priblizno 127. Da bih dobio sinus sa ovom amplitudom, potrebno je da su tacke definisane sa amplitudom 127, pa cu u vremenu vrednost duty-ja menjati tako sto cu racunati sinus sa ovom amplitudom, pa tako za 90 stepeni vrednost duty-ja ce biti 127 to, vracajuci se unazad, dobijam napon od 150V.

A frekvenciju bih podesava brzinom odabiranja tacaka.

Da li sam dobro shvatio deo oko podesavanja napona? Ako nisam dobro objasnio sta sam mislio, pokusacu ponovo...
Hvala na pomoci
Re: U/f kontrola motora dsPIC30F4011 24.07.2011. u 21:42 · pre 185 meseci #10
Tako nekako.
Pri uglu od 90 stepeni PWM ce biti 127.
Na 0 stepeni ce biti 0, na 180 opet 0.
E sad trebas uzeti recimo 20 tacaka sinusa izmedju 0 i 90 stepeni i izracunati vrijednost za PWM.
Od 9- do 180 lako izracunas, i eto.
Narednu poluperiodu isto, samo palis drugu granu H mosta.
Re: U/f kontrola motora dsPIC30F4011 25.07.2011. u 12:26 · pre 185 meseci
izmenjeno 1 put, poslednji put zivadin_despot 25.07.2011. u 13:19
  1. zivadin_despot25.07.2011. u 13:19zapis iz teksta poruke
#11
Veliko hvala na objasnjenju...pre nego sto pocenm da pisem kod da proverim da li bih ovako mogao podesavati frekvenciju: Ako imam definisan sinus sa 360 tacaka, i hocu frekvenciju od 50Hz da li bih mogao postaviti jedan tajmer koji radi na 1.8ms i na svakih 1.8 ms dodeljujem novu vrednost duty-ju? Da li se to tako inace resava?
Hvala
Re: U/f kontrola motora dsPIC30F4011 25.07.2011. u 14:58 · pre 185 meseci #12
Da ne cjepidlacim, ali ne treba ti 360 tacaka, jer je sinus simatricna funkcija dakle 180 tacaka. Ali posto je sinus za alfa, pri cemu je 90<alfa<180 jednak :
beta=alfa -90
uvedes gama=90-beta
pa slijedi
sin(alfa)=sin (gama ).
Ispada da treba samo 90 tacaka.
E sad ti si isao sa vrlo preciznim sinusom ( step po 1 stepen), a mislim da je to pretjerano za pogon motora. Pitanje hoce li 8-bitni PWM moci to odraditi.
Idi na 10 -tak tacaka za 0-*90 stepeni. NF filter ce se pobrinuti za ostalo.
Cak je moyda bolji pristup ici semplovanje po amplitudi , a ne po vremenu.
Elem matematika je sledeca.
Drzis PWM=0 10 klokova
Onda dignes na PWM =10 i to drzis n klokova
pa PWM=20 i to drzis m klokova....
Samo treba odrediti n, m, i, j ,k,l....

Re: U/f kontrola motora dsPIC30F4011 25.07.2011. u 15:32 · pre 185 meseci #13
OK za tacke sinusa, korigovacu to...
Ako sam dobro razumeo pocetni PWM je 0 pa nakon 10 klokova PWM povecam duty na vrednost prve tacke kako je u prethodnim porukama definisana, i tako nakon svakih 10 klokova menjam vrednost duty... Za neku drugu frekvenciju, bicu druga vrednost klokova, a to se peracuna, jel?
Hvala
Re: U/f kontrola motora dsPIC30F4011 25.07.2011. u 17:49 · pre 185 meseci
izmenjeno 1 put, poslednji put veselinovic 25.07.2011. u 18:06
  1. veselinovic25.07.2011. u 18:06zapis iz teksta poruke
#14
Mozes i tako, s tim sto preporucujem sto brzi klok, a mozes i ovako:
ti dizes PWM za recimo 10, ali broj klokova je razlicit.
Re: U/f kontrola motora dsPIC30F4011 24.08.2011. u 16:09 · pre 184 meseca #16
Trebao bi da napraviš trofazni PWM modulator koji, u zavisnosti od zadate amplitude i frekvencije, na svom izlazu daje potrebna vremena vođenja tranzistora u tri grane invertora, za svaki novi PWM period. Ova vremena se mogu direktno upisati u PDC registre Motor Control jedinice, koja generiše šest PWM izlaza (tri komplementarna para) u skladu sa upisanim faktorima ispune. Ovim se reguliše srednja vrednost napona tri grane PWM invertora u svakoj novoj PWM periodi.U svakoj PWM periodi srednja vrednost napona treba da bude jednaka trenutnoj vrednosti prostoperiodičnog signala željene amplitude i frekvencije. Da bi se to ostvarilo, pored PWM nosioca, neophodan ti je referentni prostoperiodični signal koji ćeš modulisati sa PWM nosiocem. Poređenjem ova dva signala dobijaš signal promenjiog vremena vođenja ton, tj promenjive širine impulsa.


Izlazni PWM signal će se automatski generisati u PWM modulatoru (Motor Control Unit) skoro trenutnim (maksimalno brz clock) poređenjem stanja PWM timera i PWM duty cycle registara. Ono što treba da obezbediti u programu, jeste trofazni modulišući prostoperiodični signal. Pre svakog novog PWM perioda program mora da izračuna željenu vrednost izlaznog napona u sve tri faze invertora i da pripremi tri nova faktora ispune koji će odgovarati tim željenim vrednostima, t.j. obezbedi PWM signale sa odgovarajućim srednjim vrednostima u toku tog PWM perioda.

Veza između srednje vrednosti faznog napona u toku jedne PWM periode i vremena uključenja u toku te iste PWM periodi glasi Uasr = ton/Tpwm * Udc

Da bi izračunao nova vremena vođenja treba prvo da prepoznaš u kojoj si tački u vremenu. Za pomenuto ti je potrebna nova vrednost ugla, koju kontrolišeš i čija brzina promene treba da zavisi od zadate frekvencije. Svakom novom PWM periodu odgovara diskretni ugaoni pomeraj, čija se vrednost dobija jednostavnim diskretnim računom.

Možeš koristi aproksimacija sinus funkcije petog stepena. Ulazni argument funkcije je 16-bitni fixed point broj u opsegu ±1 (±32767), što predstavlja ugao u radijanima.Ovu funkciju je potrebno tri puta pozivati u toku jednog PWM perioda.

U glavnom programu treba da se nalazi inicijalizacija periferije, beskonačna while petlja u kojoj proveravaš zadatu vrednost frekvencije (potenciometrom) i na osnovu nje racunaš amplitudu. Potrebno je da napišeš PWM prekidnu rutinu koja će prekidati while petlju odredjenom brzinom ( npr. postaviš da je PWM 16kHz) i u kojoj se izračunavaju vremena vođenja PWM grana na osnovu tenutne preuzete frekvencije i izračunate amplitude. PWM prekid je najvišeg prioriteta.





Re: U/f kontrola motora dsPIC30F4011 26.08.2011. u 20:38 · pre 184 meseca
izmenjeno 2 puta, poslednji put zivadin_despot 26.08.2011. u 20:54
  1. zivadin_despot26.08.2011. u 20:54zapis iz teksta poruke
  2. zivadin_despot26.08.2011. u 20:49zapis iz teksta poruke
#17
Evo da se nakon ovih objasnjenja da pocnemo to da i realizujemo. Evo kod mog programa kako sam ja to zamislio da treba da radi, uz ovaj kod cu ostaviti i semu kao i rezultate simulacije, pa bi svaka pomoc, sugestija, savet dobro dosli.
Hvala na dosadasnjem trudu.
Kontroler je PIC18F4431, kristal je 20MHz....

Code:

int niz[21]={ 2, 293, 558, 768, 903, 950, 904, 769, 559, 295, 2,-292,-557,-767,-903,-950,-904,-770,-561,-296,-3},i=0,j;
int niz_b[21]={ 552, 764, 901, 950, 906, 774, 566, 303, 10,-284,-550,-763,-900,-950,-907,-775,-567,-304,-11, 283, 549};
int niz_c[21]={  898, 950, 909, 779, 572, 310, 18,-277,-544,-758,-898,-950,-909,-779,-574,-312,-19, 275, 542, 757, 897};
unsigned int pom,b,pom2,pom3,cc;

void interrupt(){
     if(PTIF_bit){
                  j++;
                  if(j==6){
                           j=0;
                  if(niz[i]>0){
                               PDC0L=niz[i];
                               PDC0H=(niz[i] & 0b0011111100000000)>>8;
                               i++;
                  }else{
                               pom=952+niz[i];
                               PDC0L=pom;
                               PDC0H=(pom & 0b0011111100000000)>>8;
                               i++;
                  }
                  if(niz_b[b]>0){
                               PDC1L=niz_b[b];
                               PDC1H=(niz_b[b] & 0b0011111100000000)>>8;
                               b++;
                  }else{
                               pom2=952+niz_b[b];
                               PDC1L=pom2;
                               PDC1H=(pom2 & 0b0011111100000000)>>8;
                               b++;
                  }
                  if(niz_c[cc]>0){
                               PDC2L=niz_c[cc];
                               PDC2H=(niz_c[cc] & 0b0011111100000000)>>8;
                               cc++;
                  }else{
                               pom3=952+niz_c[cc];
                               PDC2L=pom3;
                               PDC2H=(pom3 & 0b0011111100000000)>>8;
                               cc++;
                  }
                  if(i==21) i=0;
                  if(b==21) b=0;
                  if(cc==21) cc=0;
                  }
                  PTIF_bit=0;
     }
}
void main() {
     INTCON=0b11000000;
     INTCON2=0;
     PIE3=0b00010000;    // omogucen interrupt base timer-a
     PWMCON0=0b01010000; // svi omoguceni za PWM i rade u paru
     PTCON0=0b00000100; //pres 4 post 0
     PTCON1=0;
     PTPERH=(311&0b0000111100000000)>>8;    //4kHz PWM
     PTPERL=311;
     DTCON=0b01000111;
     TRISB=0;
     PORTB=255;
     Delay_ms(1000);
     PORTB=0;
     TRISD=0;
     PORTD=0;
     PTCON1.B7=1;
     while(1){
     }
}




Na slici 1. se vide 4 signala koja se vode na prve dve grane trofaznog invertora, prva dva signala se vode na prvu granu i rezultuju fazu a. Na slici 2 je uvelican prikaz i tu je ono sto me buni, vidi se da zuti signal prestavlja opadajucu prvu periodu sinusa, a plavi signal prestavlja invertovano to. Problem mi je kod znaka "?" gde mi zuti signal nema maksimalnu vrednost, duty nije priblizno 100%, zbog cega? Na slici 3. je uvelican prikaz slike 2...
Re: U/f kontrola motora dsPIC30F4011 27.08.2011. u 20:25 · pre 184 meseca #18
Jel neko imao iskustva sa ovako necim?
Jos nesto sto mi nije jasno je sto duty registar PDC ako postavim iznad ~950, automacki ga postavi na manje, hocu da kazem sledece ako 8-bitnom PWM-u postavim duty 300 on ne postavlja duty 100% nego manji oko 20%... U datasheet-u ovog kontrolera sam video da mu je registar za duty 14-to bitni ako je prescaler veci od 1, sto je kod mene slucaj, ali nikako nece tako da mi radi...
Ajde prvo da to protumacimo sta je, pa cemo onda gledati sta je sa signalima i ostalim podesavanjima...
Svaki savet je dobro dosao.
Pozdrav
Re: U/f kontrola motora dsPIC30F4011 27.08.2011. u 23:32 · pre 184 meseca #19
Postavi ne na 20% nego na 17.7% jer iz nekog razloga radi na 8 bita.
300-255=45

100*45/255=17.7
Re: U/f kontrola motora dsPIC30F4011 28.08.2011. u 01:08 · pre 184 meseca #20
Da, da jasno mi je to, to sam naveo kao primer kako mi se ponasa u mom slucaju. Hteo sam reci da kada predjem maximalnu vrednost duty-ja da on polazi od nule... U mom slucaju se pokazalo da je maximalna vrednost ~950, ali mi nije jasno kako? trebalo bi da je 16384 (14-to bitni registar)... U cemu je problem? Evo deo datasheet-a koji o tome govori.
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme