Jump to content
PLC Forum


Sign in to follow this  
lelerelele

Pic12F615 E Half-Bridge, Chiedo Aiuto

Recommended Posts

lelerelele

forse non sono più capace di leggere i datasheets, quindi chiedo aiuto.ave.gif

--------------------------------------------------------------------

per farmi le ossa sui microcontrollori ho realizzato un convertitore flyback con il 12f615. e fin qua tutto bene.

ora sto provando lo stesso microcontrollore, 12f615, con ECCP, allo scopo di creare un convertitore forward push-pull.

uso la suite CCS per il programma in C, e simulo via software il suo funzionamento con MPLAB e con Real pic simulator.

con mplab la simulazione sembra funzionare, ed ho l'uscita modulata pwm attiva a livello basso, ma in effetti mi da solo le due uscite complementari, e non sono riuscito in alcun modo ad ottenere le altre, quindi non riesco in alcun modo ad ottenere il DeadTymeDelay,.

con la simulazione real pic simulator, mi da una sola uscita, quella del PWM, e tutte le altre uscite sono basse.

ma non è finita,

se programmo il micro, sulle sue uscite ho solo il pin PWM che commuta, e nessun'altra, come la suimulazione real pic.!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

per concludere

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

quindi ho eliminato dal codice, tutti i controlli che non interessano direttamente ECCP, portate tutti i pin come uscite, ed ho usato l'iniezione diretta nei registri

CCP1CON,PWM1CON, APFCON.

ed il risultato non cambia.

se qualcuno ha qualche idea in merito può tornarmi utile.

allego sorgente in C con impostazioni micro.





#FUSES NOWDT					//No Watch Dog Timer

#FUSES INTRC_IO				 //Internal RC Osc, no CLKOUT

#FUSES NOPROTECT				//Code not protected from reading

#FUSES IOSC8					//INTOSC speed 8MHz

#FUSES NOMCLR				   //Master Clear pin used for I/O

#FUSES NOBROWNOUT			   // brownout reset

#FUSES NOPUT					// Power Up Timer

#device adc=10

#use delay(clock=8000000)


#USE FIXED_IO(a_outputs=PIN_A0,PIN_A1,PIN_A2,PIN_A4,PIN_A5)



//***************PORTE e COSTANTI*******************

const unsigned int8  IngressoSogliaTensione=  AN1_ANALOG ;//PIN_GP1;;  //valore analogico di lettura tensione di uscita

const unsigned int8 OffsetIngressoSogliaTensione=125;//valore sottratto alla tensione ingresso per spostare in su la soglia

const unsigned int8 SensibilitaIngressoSogliaTensione=4;//divisore applicato alla tensione letta in ingresso


const unsigned int8  IngressoSogliaTensioneAlimentazione=  AN3_ANALOG;// PIN_GP4;  //valore analogico di lettura tensione di alimentazione

int PotnzaMassimo=200;  //livello massimo di conduzione.

int PotnzaMinimo=2;  //livello minimo di conduzione.

//UscitaPwm P1A sul PIN_GP2   pin5

//UscitaPwm P1B sul PIN_GP0   pin7


//*****************variabili***************

unsigned int16 SoftStart=0;  //valore che viene incrementato per raggiungee la massima potenza

int1 TensioneBassa=0;  //quando va a zero la tensione di alimentazione è sotto alla soglia necessaria


unsigned int TempoCiclo=60;//  0.5 usec a ciclo;//tempo dela durata del ciclo

const unsigned int16 RitardoLetturaIngressoTensioneAlimentazione=200;  //numero cicli prima di leggere la tensione di alimentazione

unsigned int16 RitardoLetturaIngressoTensioneAlimentazionValore=1; //con 0 non parte

const unsigned int16  SogliaTensioneAlimentazione=390; //livello di tensione di spegnimento uscita.

const unsigned int16 RitardoIncrementoSoftStart=1;  

unsigned int16 RitardoIncrementoSoftStartValore=0;//decrementa fino a zero,quando aumenta softstasrt



void SetupAvvio(void)

{


/*

enable_interrupts(INT_AD);

enable_interrupts(GLOBAL);

setup_adc(ADC_CLOCK_INTERNAL);

setup_adc_ports(sAN1|sAN3);

set_adc_channel(IngressoSogliaTensione);

setup_vref(VREF_HIGH);


*/

setup_timer_1( T1_INTERNAL |T1_DIV_BY_1);

setup_timer_2(T2_DIV_BY_1,TempoCiclo,1);


set_tris_a(0b00000);  //1 input	0 output



#byte CCPP1CONvar =getenv("SFR:CCP1con") ;

CCPP1CONvar=0b10001111;//  imposta tipo pwm, bit5-6 imposta tempo duty, bit1 uscita

#byte PWM1CONvar =getenv("SFR:PWM1con") ;

PWM1CONvar=0b00000011;//imposta il deadbanddelay

#byte APFCONvar =getenv("SFR:APFcon") ;

APFCONvar=0b1001; //imposta quale uscita abilitata pr pwm

set_pwm1_duty( Tempociclo/2);

//setup_ccp1( CCP_PWM_HALF_BRIDGE|CCP_PWM_L_H,10);


}


Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...