Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

20/03/2011 #1


Problema con Dimmer
Hola,

Estoy realizando un dimmer para controlar la potencia entregada a una bombilla de 100W.

Dependiendo de la entrada analógica que enviará el controlador (0%5V) se entregará a la carga entre el 0 y el 100% de Potencia a través de la variación del ángulo de disparo de un triac.

Lo he realizado de una manera que ya se ha comentado en este foro, es decir, una vez se detecta el cruce por cero, se genera una interrupción y en ese momento se temporiza con un timer el tiempo necesario con RA1 en estado bajo y al finalizar la temporización se eleva RA1 a estado alto.

Bien pues le he dado vueltas y vueltas al programa y al probar el microcontrolador (PIC18F252) después de haberlo programado, no consigo aplicar más del 71 o 72% de potencia, es decir, el máximo ángulo de disparo que puedo obtener es de unos 8 ms y pico.

Os dejo el código y haber si alguien me puede echar una mano por favor:

Código PHP:
#include <pic18.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

unsigned int vdig;
unsigned char potencia;
const 
float lsb=(float)5/1024;
float vanalog,potenciafloat;

const 
unsigned int tempo[]={55535,56695,57004,57225,57403,57555,57689,57811,57923,58027,58124,58216,58304,58388,58468,58545,58620,58693,58763,58831,58898,58963,59027,59090,59151,59211,59271,59271,59386,59443,59499,59555,59609,59664,59717,59770,59823,59876,59928,59979,60031,60082,60133,60184,60234,60284,60335,60385,60435,60485,60535,60585,60635,60685,60735,60786,60836,60886,60937,60988,61039,61091,61142,61194,61247,61300,61353,61406,61461,61515,61571,61627,61684,61741,61799,61859,61919,61980,62043,62107,62172,62239,62307,62377,62450,62525,62602,62682,62766,62854,62946,63043,63147,63259,63381,63515,63667,63845,64066,64375,65535};

void main()
{
    
/* CONFIG. PUERTOS */
    /* PUERTO_A:  RA0(AnalogIN)  RA1(DigitalOUT)-ANG.DISP */
    
LATA=0;
    
TRISA=0x01;
    
RA1=0;
    
/* PUERTO_B:  RB0(DigitalIN) interrupción externa 0 (paso por cero) */
    
LATB=0;
    
TRISB=0x01;
    
/* CONFIG. A/D */
    /* Canal: AN0, Fconv: Fosc/32, Referencia Vdd y Vss (5V), Encendido del Modulo A/D, Result. just. drcha */
    
ADCON0=0X41;  
    
ADCON1=0x8E;
    
/* CONFIG. TIMER1, Borro Flag */
    
T1CON=0x00;
    
TMR1IF=0;
    
/* CONFIG. INT.EXT.0 */
    /* Flanco bajada, Habilito int.ext.0, Borro Flag */
    
INTEDG0=0;   
    
INT0IE=1;
    
INT0IF=0;
    
/* Habilitador global de interrupts. */
    
PEIE=1;
    
GIE=1;
        
    while(
1);

}

void interrupt angulo_disparo()
{
        if(
INT0IF==1)
        {
            
RA1=0;
            
INT0IF=0;
            
TMR1ON=0;
            
TMR1=0;
            
INTEDG0=!INTEDG0;
            
GODONE=1;
            while(
GODONE==1);
            
vdig=((int)ADRESH<<8)+ADRESL;
            
ADIF=0;
            
vanalog=((float)lsb)*vdig;
            if((
vanalog>=0)&&(vanalog<=5))
            {
                
potenciafloat=vanalog*20;
                
potencia=(char)potenciafloat;
                
TMR1IE=1;
                
GIE=1;
                
PEIE=1;
                
//TMR1=tempo[potencia];
                
TMR1H=tempo[potencia]>>8;
                
TMR1L=(tempo[potencia])&0x00FF;
                
TMR1ON=1;    
            }
        }
        if(
TMR1IF==1)
        {
            
RA1=1;
            
TMR1IF=0;
            
TMR1ON=0;
            
TMR1=0;
            
TMR1IE=0;
            
GIE=1;
        }    

Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.