Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Podesavanje ECCP dead-time-a (PIC 18F4550/CCS C)

[es] :: Elektronika :: Mikrokontroleri :: Podesavanje ECCP dead-time-a (PIC 18F4550/CCS C)

[ Pregleda: 2631 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

developer94
Nikola Kolevski
Student
Beograd

Član broj: 287813
Poruke: 38
*.dynamic.isp.telekom.rs.



+3 Profil

icon Podesavanje ECCP dead-time-a (PIC 18F4550/CCS C)26.12.2011. u 23:14 - pre 149 meseci
Pozdrav svima!

Sudeci po Microchip-ovoj dokumentaciji (mada moram priznati da nisam bas siguran da li sam dobro razumeo), nakon setup-a ECCP-a u half-bridge rezimu, dovoljno je samo podesiti ECCP1DEL da bi se aktivirao dead-time (dead-band po njihovoj literaturi).
Ako sam dobro razumeo ECCP1DEL treba da sadrzi 7-bitni broj koji definise broj ciklusa koje treba preskociti u toku dead-time-a i auto-restart fleg.

Kod je relativno prost, sa izuzetkom nedostatka komentara i poneke nepodesno nazvane varijable, pa bi mi znacilo ako biste mogli baciti pogled i mozda ugledati bag koji prouzrokuje jedan od dva slucaja:
- dead-time jedva da moze da se primeti (isuvise mali ECCP1DEL)
- duty-cycle komplementarnog PWM-a pravi overflow (preveliki/osrednji ECCP1DEL)

PWM.h:
Code:
#include <18f4550.h>
#fuses HSPLL, PLL4, CPUDIV1, NOWDT, NOPROTECT, NOLVP
#use delay(clock=32000000)
#use timer(TIMER=0,TICK=1ms,BITS=16,NOISR)


PWM.c:
Code:
#include <PWM.h>

int16 pwm_resolution;
int amount = 0;
int left = 1;

int pwm_offset = 0;

void PWM_Run();
void PWM_SetMove(int16 param_amount, int16 time, int direction);
 
#byte ECCP1DEL = 0xFB7

void main(void)
{
   setup_ccp1(CCP_PWM_HALF_BRIDGE | CCP_PWM_H_H);
   ECCP1DEL = 68;
   
   setup_timer_2(T2_DIV_BY_4, 99, 1);
   
   set_pwm1_duty(50);
   
   set_tris_b(0x00);
   set_tris_d(0x00);
   
   set_ticks(0);
   
   pwm_resolution = 1;
   
   PWM_SetMove(40, 5000, 1);
   
   while(1)
   {
      PWM_Run();
   }
}

void PWM_Run()
{
   if(pwm_offset < amount)
   {
      if(get_ticks() > pwm_resolution)
      {
         set_ticks(0);
         if(left)
         {
            set_pwm1_duty(50+pwm_offset);
         }
         else
         {            
            set_pwm1_duty(50-pwm_offset);
         }
         pwm_offset++;
      }
   }
}

void PWM_SetMove(int16 param_amount, int16 time, int direction)
{
   pwm_resolution = time / param_amount;
   
   left = direction;
   
   output_b(pwm_resolution);
   
   pwm_offset = 0;
   amount = param_amount;
}


Hvala unapred!

Pozdrav,
Nikola
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Podesavanje ECCP dead-time-a (PIC 18F4550/CCS C)27.12.2011. u 04:58 - pre 149 meseci
deluje ok, samo proveri koju verziju ccs-a imas, bilo je nekih bagova sa eccp-om u onoj verziji dostupnoj na torentima... ECCP1DEL je 7bita delay + reset enable, ne znam cime gledas izlaz kad kazes da ti je delay mali, posto je delay 4 * Tosc * (ECCP1DEL & 0x7F), dakle ako trcis na 32 MHz onda ti je za ECCP1DEL = 68; dead time = 2.125 μs. Max dead time ti je 3.969 μs. Ako hoces veci dead time moras da spustis klok.

Zasto 18F4550 za eccp? Bolje da uzmes PIC18F4431 mnogo je iskusniji za pwm, ima i prescaler za dead time tako da na 40 MHz mozes da imas 25.2 μs dead time 4 * Tosc *(DTCON & 0x3F) * 2^((DTCON >> 6) + 1)

Takodje zasto CCS za 18F? Bolje ti je mnogo da radis sa C18, osim ako nisi kupio CCS i imas upgrade free posto su ove verzije sa terenta prilicno bagovite a nista im optimizacija ne radi bolje nego C18 free verzija (posebno je 4.013 bagovita kada je eccp u pitanju, 4.120 bese ima ispravljeno vecinu bagova ali i dalje nije 1/1).
Moja preporuka - MPLABX + C18, dzaba a radi 1/1.

 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: Podesavanje ECCP dead-time-a (PIC 18F4550/CCS C)27.12.2011. u 17:01 - pre 149 meseci
Definitivno bolje resenje PIC18F4431. Pored svega navedenog ima i interfejs za kvadraturni enkoder ukoliko budes zeleo da meris brzinu obrtanja ili radis neku regulaciju po brzini.
gorankg
 
Odgovor na temu

developer94
Nikola Kolevski
Student
Beograd

Član broj: 287813
Poruke: 38
*.dynamic.isp.telekom.rs.



+3 Profil

icon Re: Podesavanje ECCP dead-time-a (PIC 18F4550/CCS C)27.12.2011. u 19:13 - pre 149 meseci
Sto se hardvera tice nisam imao pravo glasa (svejedno, nije da bih ista imao da zamerim/promenim zahvaljujuci mom ekstenzivnom poznavanju PIC-ova, hahaha) jer sam tek sad dobio zadatak da dovrsim zapoceto, ali definitivno cu da bacim pogled na 18F4431.
A sto se tice kompajlera, videcu da nabavim neku drugu verziju CCS-a, lako moguce da je zaista to...
C18 sam koristio, medjutim odbilo me je to sto nisam mogao naci adekvatnu dokumentaciju ili primere. Da stvari budu jos i gore, njihova dokumentacija je pretezno netacna ili nedovrsena... Jel moze neko da me uputi ka nekim resursima za ucenje C18-ice?
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Podesavanje ECCP dead-time-a (PIC 18F4550/CCS C)28.12.2011. u 00:15 - pre 149 meseci
http://www.microchip.com/stell...eId=1406&dDocName=en010014

MPLAB C18 C Compiler User's Guide and Release Notes
MPLAB C18 Libraries Documentation

ne treba ti nista drugo. Skines MPLABX i cepas
 
Odgovor na temu

developer94
Nikola Kolevski
Student
Beograd

Član broj: 287813
Poruke: 38
*.dynamic.isp.telekom.rs.



+3 Profil

icon Re: Podesavanje ECCP dead-time-a (PIC 18F4550/CCS C)28.12.2011. u 08:27 - pre 149 meseci
C18 v3.40 radi sa MPLABX-om isprva? Ili mora da se steluje makefile ne bi li se podesili windows-like switchevi? (ili sta vec bese problem dosad...)
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Podesavanje ECCP dead-time-a (PIC 18F4550/CCS C)28.12.2011. u 17:31 - pre 149 meseci
radi. mplabx radi i sa windozom i sa linuxom .. i uz ovaj v1.0 dolazi 3.40 c18
 
Odgovor na temu

developer94
Nikola Kolevski
Student
Beograd

Član broj: 287813
Poruke: 38
*.dynamic.isp.telekom.rs.



+3 Profil

icon Re: Podesavanje ECCP dead-time-a (PIC 18F4550/CCS C)28.12.2011. u 22:34 - pre 149 meseci
Nista, preostaje mi da ovo prekucam za C18 onda... Imam upravo CCS 4.120, ali reklo bi se da mu ne znaci preterano.
Malo smo otisli off-topic, al zaista, hvala na savetima!

Pozdrav,
Nikola
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Podesavanje ECCP dead-time-a (PIC 18F4550/CCS C)28.12.2011. u 23:45 - pre 149 meseci
generalno za 18F generaciju nema smisla koristiti krekovan CCS kompajler posto nije nista mnogo bolji od C18, cak naprotiv, C18 pravi dosta bolji kod. Bibioteke za CCS nije problem prepisati za C18 mada C18 ima dosta svojih. Sve one "zanimljivosti" koje imas u CCS-u generalno imaju smisla na 16F i manjim piconjama, za 18F to sve prilicno nema smisla ..
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Podesavanje ECCP dead-time-a (PIC 18F4550/CCS C)28.12.2011. u 23:46 - pre 149 meseci
elem, nisi rekao na kraju, cime si ti merio dead-time? da li ti je dead time manji od onoga sto ocekujes ili ?
 
Odgovor na temu

developer94
Nikola Kolevski
Student
Beograd

Član broj: 287813
Poruke: 38
*.dynamic.isp.telekom.rs.



+3 Profil

icon Re: Podesavanje ECCP dead-time-a (PIC 18F4550/CCS C)31.12.2011. u 17:47 - pre 149 meseci
Izvini, nisam primetio pitanje! Merio sam osciloskopom, i dead-time nije manji, nego cudniji. Tj prvi izlaz je normalan, a drugi deluje offsetovano, sto na kraju dovodi do overflow-a.
Prekucavam polako u C18 pa cu javim sta se desilo.

Srecna nova godina svima!
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
95.180.61.*

Sajt: mysql.rs


+2377 Profil

icon Re: Podesavanje ECCP dead-time-a (PIC 18F4550/CCS C)01.01.2012. u 06:08 - pre 149 meseci
uh tu nesto nije ok ... aj kad budes merio probaj da snimis taj izlaz i zakacis .. (ne znam dal imas logic analyzer ili osciloskop ume da snimi sliku, ili bar probaj da fotnes skope)
 
Odgovor na temu

developer94
Nikola Kolevski
Student
Beograd

Član broj: 287813
Poruke: 38
*.dynamic.isp.telekom.rs.



+3 Profil

icon Re: Podesavanje ECCP dead-time-a (PIC 18F4550/CCS C)03.01.2012. u 20:34 - pre 148 meseci
E pa zavrsih sa praznicima, a bogami i sa ovime. Prekucao sam sve za C18 (cak sam se resio da ne koristim C18 biblioteke, izuzev p18f4550.h koja sadrzi registre i konfiguracione opcije kolko ja znam), i sad sve radi fenomenalno.
Ovo sa CCS-om je zaista bilo cudno, nezgodno bi bilo uslikati - posto se ti overflow tikovi desavaju u toku promene duty cycle-a. To sam proverio i sa nekim matorim ruskim skopom (koji me do sada nije izneverio), i sa fluke-om za ciju cenu ne smem ni da pitam (na zalost ne znam kako se snima sa tim cudom, samo sam ga na kratko pozajmio).

Sve u svemu, prica ima srecan kraj. A ako nekome nekada zatreba C18 varijanta kao primer il sta vec (mada je skoro ista kao i CCS-ova, te sa nelogicno nazvanim objektima) , evo i nje:

Code:

#include <p18f4550.h>

#pragma config FOSC = HSPLL_HS
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config PLLDIV = 4
#pragma config CPUDIV = OSC1_PLL2

#define T0L 0b10111111
#define T0H 0b11100000

void isr_tmr0(void);
void PWM_Run(void);
void PWM_SetMove(unsigned int param_amount, unsigned int time, int direction);

#pragma code ISR = 0x8
void int_vector(void)
{
    _asm goto isr_tmr0 _endasm
}
#pragma code

/*
 *
 */

unsigned int counter;

unsigned int pwm_resolution;
unsigned int amount = -1;
unsigned int left = 1;

int pwm_offset = 0;

#pragma interrupt isr_tmr0
void isr_tmr0(void)
{
    INTCONbits.GIE = 0;
    if(INTCONbits.TMR0IF)
    {
        INTCONbits.TMR0IF = 0;
        if(counter >= 65535)
            counter = 0;
        counter++;

        TMR0L = T0L;
        TMR0H = T0H;

        PORTBbits.RB6 = ~PORTBbits.RB6;
    }
    INTCONbits.GIE = 1;
}

void main(void)
{
    TRISCbits.TRISC2 = 0;
    TRISDbits.TRISD5 = 0;

    TRISBbits.TRISB6 = 0;

    T0CON = 0b10001000;
    T2CON = 0b00000101;
    PR2 = 99;
    CCP1CON = 0b10001100;
    CCPR1L = 0b00011110;

    ECCP1DEL = 10;

    TMR0L = T0L;
    TMR0H = T0H;
    INTCONbits.TMR0IE = 1;
    INTCONbits.GIE = 1;

    PWM_SetMove(40, 2000, 1);

    while(1)
    {
        PWM_Run();
    }
}

void PWM_Run()
{
   if(pwm_offset < amount && amount != -1)
   {
      if(counter > pwm_resolution)
      {
         counter = 0;
         if(left)
         {
            CCPR1L = 50 + pwm_offset;
         }
         else
         {
            CCPR1L = 50 - pwm_offset;
         }
         pwm_offset++;
      }
   }
}

void PWM_SetMove(unsigned int param_amount, unsigned int time, int direction)
{
   pwm_resolution = time / param_amount;

   left = direction;

   PORTB = pwm_resolution;

   pwm_offset = 0;
   amount = param_amount;
}


Pozdrav i hvala na vremenu,

Nikola
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
95.180.61.*

Sajt: mysql.rs


+2377 Profil

icon Re: Podesavanje ECCP dead-time-a (PIC 18F4550/CCS C)04.01.2012. u 03:19 - pre 148 meseci
extra znaci definitivno je bug u ccs biblioteci ...rekoh ja, za 18F i jace microchip-ovi kompajleri su keva + su dzaba (za razliku od ccs-a koji uopste nije jeftin)
 
Odgovor na temu

developer94
Nikola Kolevski
Student
Beograd

Član broj: 287813
Poruke: 38
*.dynamic.isp.telekom.rs.



+3 Profil

icon Re: Podesavanje ECCP dead-time-a (PIC 18F4550/CCS C)04.01.2012. u 11:56 - pre 148 meseci
Taj deo mi nije bas najjasniji, u ovom slucaju koristim C18 Lite koji je koliko znam samo akademska verzija. Zar to ne znaci da se druga microchipova licenca placa (upgrade licenca ili kako se vec zove)? Ili bih bio vezan nekim klauzulama ugovora mozda?
A CCS je oko 200$ za kompajler, sto i ne bi bilo mnogo kad bih znao da sve sto nude 100% radi... U stvari povlacim to, izgleda se placa +125$ za svaku godinu update-ova.

Bogme drzim se ja onda C18-tice pa cu vec da napravim nesto svoje za nju...
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: Podesavanje ECCP dead-time-a (PIC 18F4550/CCS C)04.01.2012. u 19:13 - pre 148 meseci
Imaš i HI-TECH C za PIC18 na:
http://www.microchip.com/stell...eId=1406&dDocName=en542861
gorankg
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
95.180.61.*

Sajt: mysql.rs


+2377 Profil

icon Re: Podesavanje ECCP dead-time-a (PIC 18F4550/CCS C)06.01.2012. u 03:51 - pre 148 meseci
hi-tech je skup, dobar ali skup. pitanje sta ce se desiti sa njim btw posto ih je mchip kupio a nesto ne vidim da se "razvijaju", za ove jace mcu-e su prilicno zamrli. posebno sada kada je mchip u fazonu da se uvati sa kostac sa foss alatima koje ostali nude (arm, avr i ekipa) te su napravili open source c32 kompajler i krenuli ozbiljnije na tu temu da rade

ccs ti daje licencu koja vazi "dozivotno" ali imas samo godinu dana upgrade i onda mora svake godine placas upgrade ako hoces. To je prilicno bedak obzirom da su puni bagova.

C18 lite nema sve optimizacije ali radi odlicno (hi-tech pravi malo bolji kod ali obzirom na to da je "jaci i veci mcu dzaba" vise ti se isplati dzaba c18 pa uzmes veci mcu ako ne moze da stane :D ). Vezano za "academic" licence, kada skidas MPLABX tamo imas C18 on te ne pita dal si student ili ne, cak se spominje open source etc etc (posto je C18 baziran na gcc-u ) tako da mislim da nemas problema sa time, no moguce da gresim

 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Podesavanje ECCP dead-time-a (PIC 18F4550/CCS C)

[ Pregleda: 2631 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.