www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Šofiranje brezkrtačnika s CPLD

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> FPGA in CPLD programabilna vezja
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
.
Član
Član



Pridružen-a: Pon 23 Avg 2004 16:16
Prispevkov: 16777190
Aktiv.: 70821.69

PrispevekObjavljeno: Sre Avg 22, 2007 8:09 pm    Naslov sporočila:  Šofiranje brezkrtačnika s CPLD Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Sre Avg 22, 2007 8:40 pm    Naslov sporočila:   Odgovori s citatom

Zakaj pa mora biti ravno CPLD in ne MCU ? En ARM bi moral biti cez glavo dovolj za to, pa se cenejsi je kot katerikoli CPLD.

Kakorkoli ze, jaz sem se zadnjic (ko sem spraseval o tej tematiki), dokopal do sledecega:

1: Zagon je najbolj komplicirana stvar, ker ne ves kje tocno se rotor nahaja, zato ga najprej pritegnes na doloceno pozicijo (za kratek cas vkljucis eno fazo). Potem pozenes torej "na blef" in upas, da bo delovalo, pri dovolj obratih pa zacnes preverjati ali odcitas BEMF. Ce ne, zacnes startno sekvenco znova Confused

2: Ko enkrat dobis povratno informacijo o BEMF (od komparatorja, ki sporoci kdaj pride do zero crossinga), je stvar relativno preprosta. Izvedes komutacijo po vnaprej pripravljeni tabeli, pozenes stevec in cakas na zero crossing (interrupt). Ko pride do interrupta ustavis stevec, mu obrnes smer stetja (ali odstejes takratno vrednost stevca od maksimalne mozne, preden pride do rolloverja) in cakas, da pride stevec spet do 0. Ko pride do 0, opravis naslednjo komutacijo.

To se ponavlja v neskoncnost, dokler nekaj ne prekine delovanja (npr. pritisk na tipko) oz. dokler ne pride do nepredvidenega overflowa stevca, ki ga uporablajs za merjenje casa med komutacijami. ~1000 rpm bi moralo biti dovolj za pojav dovolj velike BEMF, iz frekvence MCUja in prescalerja stevca bos pa izracunal koliko casa pretece, preden pride do overflowa, iz tega pa izracunas hitrost (rpm), pri kateri najprej pride do overflowa. Ob tem upostevaj, da stevec meri samo polovico komutacije preden se prekotali naokoli in da je za vsak poln obrat motorja potrebnih kar nekaj komutacij (v mojem primeru jih je bilo recimo 6).

3: PWM regulira hitrost. MOSFET driverji a'la TC4468 in sorodstvo od Microchipa ima dva vhoda za vsak tranzistor in zmore krmiliti stiri tranzistorje. PWM pride na en, krmilni signal iz MCUja pa na drugi vhod za vsak tranzistor, vmes se izvrsi logicni AND, NAND ali AND z enim vhodom invertiranim.

Zakaj bi to sploh tlacil v CPLD ? Tezje je izvedljivo, stane vec, ne vsebuje analogne periferije (komparatorjev) pa se manj je fleksibilno Shocked

_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
bungee
Član
Član



Pridružen-a: Pon 07 Mar 2005 18:49
Prispevkov: 1479
Aktiv.: 6.24
Kraj: Ljubljana

PrispevekObjavljeno: Sre Avg 22, 2007 10:11 pm    Naslov sporočila:   Odgovori s citatom

Mare vem, da iščeš rešitev z logiko. Vendar pa je tu nekaj napisanega s PIC-i pa ti mogoče pomaga, če ne drugega je noter dobro opisan algoritem:
AN1083
AN901

Upam, da kaj pride prav. Wink
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
NeoTO
Član
Član



Pridružen-a: Pon 28 Mar 2005 19:19
Prispevkov: 2752
Aktiv.: 11.62
Kraj: Trzic

PrispevekObjavljeno: Sre Avg 22, 2007 10:18 pm    Naslov sporočila:   Odgovori s citatom

Ja no... razlogov je lahko več. Brushless motorji se lahko vrtijo tudi precej nad 30k obratov, nekateri krmilniki pa zmorejo preklapljati po fazah tudi čez 100 kHz. Če želiš vmes imeti še PWM, ti v mikroprocesorju ostane zelo malo časa še za kaj drugega.
EMF pa lahko odčitavaš že pri nižjih frekvencah kot 1000rpm, obstaja pa precej različnih variant za to. V elektorju Feb 2006 je prav lepo opisana teorija za brezkrtačniki brez senzorjev.

Mare, žal nimam nobenega linka.

_________________
Lp,
Matevž
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Sre Avg 22, 2007 10:57 pm    Naslov sporočila:   Odgovori s citatom

PWM je lahko v HW in ne zahteva nic dodatnih resursov; zahteva jih samo spreminjanje nastavitev PWM, kar se dogaja med komutacijami (medtem ko MCU caka in strika v prazno, dokler ne pride do interrupta od komparatorja ali od tega, ker se stevec iztece - in to zna kar traaaajati).

"Precej nad 30k rpm" pomeni konkretno 30k * 6 * 2 interruptov / minuto, kar pri enem najbolj pocasnem PICu z internim oscilatorjem (z zunanjih grejo bistveno hitreje ...) z 1 MIPS pomeni, da ima MCU na voljo "samo" 333333 (ja, tristotriintrideset tisoc tristotriintrideset) ciklov na interrupt. Mislim, da lahko v tem casu precej postori ... kaj bi sele bilo, ce bi zadevo izvajal MCU z 10+x vecjo zmogljivostjo Wink

_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
.
Član
Član



Pridružen-a: Pon 23 Avg 2004 16:16
Prispevkov: 16777190
Aktiv.: 70821.69

PrispevekObjavljeno: Čet Avg 23, 2007 12:24 am    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Čet Avg 23, 2007 12:52 am    Naslov sporočila:   Odgovori s citatom

Poraba kontrolerja (merjeno v miliamperih pri nizji napetosti - switching buck converter za napajanje) je proti porabi motorja (merjeno v amperih in najbrz pri bistveno visji napetosti) zanemarljiva.

Ne kompliciraj, vzemi en ARM (oz. kar ti pac najbolj ustreza) s PWM modulom in tremi komparatorji, dodaj eksterne MOSFET driverje in to je vse. 75k rpm je prakticno isto kot 30k rpm, kar se tice casovne zahtevnosti - tudi en PIC bi to zmogel (recimo PIC18LF1230 ima tri komparatorje in PWM, ter da od sebe 8 MIPSov z internim oscilatorjem+PLL, pri cemer porabi ~20 mA pri 3V; poraba je bistveno manjsa brez uporabe PLL, pod 3 mA). Potem rabis samo se dovolj domislije pri pisanju funkcije za zagon motorja Wink

_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
NeoTO
Član
Član



Pridružen-a: Pon 28 Mar 2005 19:19
Prispevkov: 2752
Aktiv.: 11.62
Kraj: Trzic

PrispevekObjavljeno: Čet Avg 23, 2007 1:08 pm    Naslov sporočila:   Odgovori s citatom

Sokrat, ti govoriš to iz izkušenj ali kar tako?
Ker v Elektorju, ki sem ga omenil, je bila predstavljena malo bolj napredna metoda zero-crossing detekcije, kot samo komparator. Tisti del kode je gledal dogajanje med preklapljanjem PWMja, kar bi pri hardware-ski verziji bolj težko naredil... ali pač?

_________________
Lp,
Matevž
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
bungee
Član
Član



Pridružen-a: Pon 07 Mar 2005 18:49
Prispevkov: 1479
Aktiv.: 6.24
Kraj: Ljubljana

PrispevekObjavljeno: Čet Avg 23, 2007 2:04 pm    Naslov sporočila:   Odgovori s citatom

NeoTO poglej AN-je od Microchipa. Wink
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Čet Avg 23, 2007 2:09 pm    Naslov sporočila:   Odgovori s citatom

Moj je bil narejen z Atmelovim 89C2051, PWM je generiral z autoreload nacinom timerja (interrupt handler je alternirajoce spreminjal autoreload vrednosti, posledica uporabe SW PWM je bila, da je bil minimalni duty cycle nekje med 25-30%, sem ze malo pozabil konkretne stevilke ...), a je imel kontroler tezave z zagonom motorcka. MCU je bil dalec od primerne izbire za tako pocetje, ce bi delal se enkrat, bi vzel kaj primernejsega (hitrejsega, HW PWM, vec internih komparatorjev, namesto da sem tlacil zunaj LM339 Rolling Eyes ).

"Izboljsava", katero si omenil, je samo v tem, da je malo poenostavljena elektronika, ce je kontroler zelo neumen. Ce namrec zelis meriti BEMF kadarkoli (ob kateremkoli stanju PWM izhoda), potem potrebujes navidezno ali dejansko sredisce motorja (tam, kjer pridejo vse tri faze zdruzene skupaj; motorji s samo tremi prikljucki zato potrebujejo zunanje uporovne delilnike, s katerimi dobis to referenco).

Ta "izboljsava" ima za posledico tudi to, da duty cycle nikoli ne more iti od 0 do 100%. Nacelno to ni taka tezava, a obstaja meja, katere ni mogoce preseci, ker mine doloceno stevilo ciklov zaradi izvajanja programa; hitrejsi MCU bo raztegnil interval (recimo namesto 28-100% bos imel 5-100%). Logicno je, da zelis kar najvec moci, pod doloceno mejo pa PWM tako ali tako ne sme nikoli pasti, sicer se bo hitrost zmanjsala toliko, da ne bo vec dovolj BEMF.

Mikrokontrolerji s HW PWM pa le-tega generirajo s pomocjo timerjev, ob overflowu katerih lahko generirajo interrupt. Ko je PWM v stanju 1 recimo preveris relevantni komparator in primerjas odcitek s prejsnjim stanjem ali s predpripravljeno tabelo (trije komparatorji krat dve smeri prehodov je 6 kombinacij, kolikor je tudi komutacij na krog pri takem motorcku, kot je bil moj). Ce torej res zelis komplicirati z "izboljsavo" in tako prihraniti tistih 10 centov za 6 uporov, potem lahko naredis na zgoraj opisan nacin. Ob tem menda lahko zrtvujes tudi malce nenatancnosti ob komutaciji in stevec preverjas kar znotraj rutiine od interrupt handlerja od PWMja (gre za minimalen odmik).

Zakaj bi bil torej to problem pri HW PWM ? Vzemi kalkulator v roke in videl bos, da ostane frekvenci PWM 20-25 KHz ogromno ciklov za preverjanje komparatorja in stanja stevca ter morebitno prenastavljanje stevca ob zero crossingu (ali spreminjanje smeri delovanja, ce to stevec omogoca) ter za komutacijo, ko stevec spet pride do 0. Ce je MCU z 1 MIPS to lahko pocel, bi tak z 10x vec MIPS moral to poceti se toliko lazje Wink

_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> FPGA in CPLD programabilna vezja Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 493 dni


Powered by phpBB © 2001, 2005 phpBB Group