Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Pitanje u vezi sa Microchipovim PIC18F23k20, enhanced pwm
#1
Poštovana ekipo,
Konstruisao sam solidan DC servo driver sa PIC18F23K20, međutim ostao mi je jedan problemčić koji ne mogu da rešim (tačnije mogu ali nije elegantno rešenje) a on se tiče enhanced PWM-a na pomenutom mikrokontroleru. Evo o čemu se radi, meni je DC motor vezan u full bridge koji se kontroliše pomoću dva IR2110 high side low side drivera gde je napajanje drivera gornjeg mosfeta urađeno tipičnim bootstrapingom kao u app.noti drivera. Ovo uslovljava da PWM ne moze da bude 0 i 100%, i u trenutnoj aplikaciji gde mi je PWM frekvencija 7.8kHz, dozvoljavam PWM od nesto manje od 2% do nešto više od 98%. Na 50% pwm motor je u aktivnom kočenju kako se pwm smanjuje motor ide sve brže 'u levo' odnosno kako raste ide sve brže 'u desno'. Neutralisanje viška KEMS iz motora se vrši kočionim otpornikom koji se uključuje malim histerezisnim komparatorom u MCU. Ovo je sve standardno. Driveri su vezani tako da su 'gornji levi' i 'donji desni' MOSFET odnosno 'donji levi' i 'gornji desni' MOSFET uključeni istovremeno, tj. ceo H most se pogoni sa dva PWM kanala koji su u fazi poput asimetričnog half-bridgea, naravno sa dead time-om kako bi se sprečilo uzdužno provođenje. Trenutno PIC generiše jedan pwm kanal koji se hardverski invertuje i pravi se dead time sto troši jedan TTL cip (74HC132) i prilično me nervira jer je divljačko rešenje, posebno ako uzmemo u obzir da PIC18F23k20 im tzv enhanced pwm modul koji moze da se konfigurise kao single pwm, half bridge pwm ili full bridge pwm u različitim konfiguracijama i plus ima dead time modul u sastavu enhanced pwma. Međutim kao za baksuza nema ni jednu opciju da generiše drive za asimetrični half bridge. Da li neko ima ideju kako ovo može da se reši u firmware-u? 

Puno hvala!
Reply
#2
Milan94 je radio motalicu a ja sam pisao firmware za PIC18F4431.
Ako me dobro sećanje služi, hardver je realizovan slično kao kod tebe. Možda su drajveri drugi.
Neka me Milan94 ispravi ako negde grešim, ali mi smo potrebni PWM generisali sa 4 pina i dead time iz MCU. On je negde i pokazivao kako ta motalica radi.
Evo inicijalizacija PWM za PIC18F4431:

Code:
void InitPCPWM(void)
{
    OVDCOND = 0xFF;         // Output on PWM I/O pin is controlled by the value in the Duty Cycle register and the PWM time base
    OVDCONS = 0x00;            // Output on PWM I/O pin is inactive when the corresponding PWM output override bit is cleared
//    QEICON = 0x00;            // QEI Disabled
    PTCON1 = 0x00;            // PWM time base is OFF and counts up.
    PTCON0 = 0x00;            // PWM time base PS=1:1, input clock is FOSC/4 and operates in a Free-Running mode
    PWMCON0 = 0x30;         // PWM0 - PWM3 I/O pins are enabled for PWM output in complementary mode
//    PWMCON0 = 0x33;         // PWM0 - PWM3 I/O pins are enabled for PWM output in independent mode   
//     PWMCON0 = 0x63;         // PWM1, PWM3 pins enabled for PWM output in independent mode                   
//     PWMCON0 = 0x11;         // PWM1 I/O pin is enabled for PWM output in independent mode            
//  PWMCON0 = 0x20;         // PWM0 and PWM1 pins are enabled for PWM output in complementary mode                       
    PWMCON1 = 0x00;            // Updates from Duty Cycle and Period Buffer registers are enabled
    FLTCONFIG = 0b00000001; // FLTB disabled, FLTA enabled in Inactive mode (Pins are deactivated (catastrophic failure) until FLTA is deasserted)
//    FLTCONFIG = 0b00000000; // FLTB disabled, FLTA enabled in Inactive mode (Pins are deactivated (catastrophic failure) until FLTA is deasserted)   
    SEVTCMPL = 0x00;        // Clear special event compare value
    SEVTCMPH = 0x00;
    PDC0L = 0x00;        
    PDC0H    = 0x00;
    PDC1L    = 0x00;
    PDC1H    = 0x00;
    DTCON = 0x45;           // 1us dead time, Clock source for Dead Time Unit is FOSC/4.
    PTMRL = 0x00;
    PTMRH = 0x00;
    PTPERL = 0xFF;          // 19.5KHz at 40MHz oscillator
    PTPERH = 0x01;
}

Treba da je to neka poslednja verzija mogu i da proverim...

Evo ovde je snimak:
https://www.youtube.com/watch?v=dPGYK2v52Eo

Sad ću da bacim pogled na ovaj tvoj PIC18F23k20
Reply
#3
Jel tebi odgovara ovaj mod rada:


Attached Files Thumbnail(s)

Reply
#4
@gorankg

Da, meni je shema upravo takva, ali pwm stav nije odgovarajući. Čip generiše pwm za pravi HB, samo ga rasporedjujes na 4 mesto na 2 mosfeta cime se smanjuje disipacija. Meni bi tehnički odgovarali ona dva moda 'forward' i 'reversed' full bridge, ali kod njih je problem sto onda jedna grana mosta ne pulsira pa samim tim ne radi bootstrap od tog drivera, i izgubi se napajanje gate-a za gornji mosfet. PWM za AHB (assymetric half bridge) možeš najlakše da zamislis kao jedan pwm i njegovu inverziju, samo između svakog ON ciklusa PWMa imas dead time (da izbegnes uzduzno provodjenje).

Sad cu da pogledam ovaj kod koji si poslao, (ovo kucam sa telefona pa mi nije preterano prakticno) moguće je da ste vi primenili neko drugo rešenje koje meni zapravo odgovara. Smile

P.S. Hvala u svakom slučaju, za pola h izvestavam sta sam uradio!
Reply
#5
Nisam bas dobro shvatio sta je problem koristiti half-Bridge PWM i povezati po semi koju je dao Gorankg.

U Full-Bridge modu PWM ima na jednom pinu modulaciju dok njegov drugi dijagonalni pin je na visokom .

E sad te pinove na kojima je modulacija vezes na gornje tranzistore kako bi radio bootstraping.

Ali i ovde neces moci da ides do punih 100% a do nule naravno mozes tada ce motor da se zaustavi ali je onda problem sa kocenjem.

Ja sam te enhanced pwm modove sve dobro razgazio na novijim kontrolerima   Smile
Reply
#6
Papak,
možda iči sa driverima Si8230(3) za "High-side" mosfete u FullBridge-u,
sekcijama napajanima sa svaki svojim Floating napajanjem i svaki svojim inputom,
za donja "low-side" možeš direktno iz MCU ili takodjer driverima serije Si823xx, koji netrebaju onda dodatno Floating napajanje.

Tako si (dodatnim Floating napajanjem) sasvim bezbedan za rad od {0...100PWM - 2xDT}, napajanje imaš konstantno,
bootstraping zafali kod malog/visokog režima rada PWM...
imaš i dodatni DT ulaz na driverima.

https://www.silabs.com/documents/public/...Si823x.pdf
LP
Dragan
Reply
#7
Evo mene opet!
Prvo jedno opšte objašnjenje, pošto vidim da sam napravio zabunu. Dakle meni je potreban takozvani komplementarni pwm sa dead-time. Tačno objašnjenje možete da nađete na netu, tražeći app notu za COG (conplementary otputovao generator) modul na PIC kontrolerima.
@Dragan100 Ne volim da koristim Si drivere iz prostog razloga što su nedostupni u Srbistanu, dok IR driveri mogu da se kupe i na trafici, čak i u ovom šupku od zemlje.
@gorankg Sad sam proučio datasheetove, 18F23K20 nije iste arhitekture pwm modula kao 18F4431 tako da mi je ovaj tvoj kod neupptrebljiv. Štaviše, koliko vidim 23k20 nema COG tako da je apsolutno nemoguće sa njim napraviti ovi što meni treba, bez eksternih TTL kola. Sad blago meni mora da sednem i da redizajniram ceo driver za neki drugi čip.
Reply
#8
Čini mi se da grešiš. Ima i tvoj komplementarni PWM sa dead-time. Pogledaj stranu 166 iz datasheet-a odeljak 16.4.1.
Reply
#9
Au...
1. Sad pročitah šta je mrtvi autocorrect napravio od moje prethodne poruke. Ubedljivo najdebilnija stvar u istoriji telekomunikacija... Daleko bilo.

2. Gorankg, ponovo sam gledao, shemu pwm signala biće da sam ipak ja pogrešio, sutra ću da sednem da rekonfigurišem pwm i da pogledam na osciloskopu.
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)