Ir ao conteúdo
  • Cadastre-se

PIC Controlar Luminosidade de uma Carga AC com PIC 16F628A


Posts recomendados

Prezados, 

 

Estou desenvolvendo um circito com PIC 16F628A e preciso incluir uma função de acender, apagar e controlar luminosidade de uma lampada 12VAC (L1).

O mesmo botão quando pressionado liga lampada, se pressionado mais uma vez desiga a lampada mas se deixar pressionado ele precisa ir aumentando o brilho dessa lampada até o máximo. dai se eu soltar e voltar a deixar pressionado o brilho vem reduzindo até o mínimo assim por diante. Pensei em fazer com a ajuda de um Dimmer conforme imagem. Poderiam me ajudar no código ? ou com um outro hardware que seja mais simples e economico? Uso o MikroC

 

#define subida_encosto  RA0_bit
#define descida_encosto RA1_bit
#define subida_cadeira  RA2_bit
#define descida_cadeira RA3_bit
#define lamp RA4_bit
#define lamp_on RB0_bit
#define subida_encosto_on RB1_bit
#define descida_encosto_on RB2_bit
#define subida_cadeira_on  RB3_bit
#define descida_cadeira_on RB4_bit


void volta_zero();

void main()
{

bit flag_lamp;

  CMCON = 7;
  TRISA = 0xff;
  TRISB = 0;
  PORTA = 0xff;
  PORTB = 0xfe;

  while(1)
  {
      if(Button(&PORTA, 0, 50, 0))
      subida_encosto_on = 0;
      else
      subida_encosto_on = 1;

      if(Button(&PORTA, 1, 50, 0))
      descida_encosto_on = 0;
      else
      descida_encosto_on = 1;
      
      if(Button(&PORTA, 2, 50, 0))
      subida_cadeira_on = 0;
      else
      subida_cadeira_on = 1;
      
      if(Button(&PORTA, 3, 50, 0))
      descida_cadeira_on = 0;
      else
      descida_cadeira_on = 1;
      
      if(Button(&PORTA, 4, 50, 0) && (flag_lamp == 0))
      {lamp_on = ~lamp_on;
       flag_lamp = 1;
      }
      if(!Button(&PORTA, 4, 50, 0) && (flag_lamp == 1))
      flag_lamp = 0;
      
      if(Button(&PORTA, 7, 50, 0))
      volta_zero();
      

  }

}

void volta_zero()
{

  lamp_on = 0;
  subida_encosto_on = 0;
  descida_cadeira_on = 0;
  delay_ms(7000);

}

 

1264561176_CKTOdonto.thumb.jpg.7a82cd63ccf67028585d1adba89d75d0.jpg

Link para o comentário
Compartilhar em outros sites

Para implementar a funcionalidade de controlar a luminosidade da lâmpada utilizando o Dimmer, você pode usar o oscilador interno do microcontrolador para gerar um sinal de PWM (modulação por largura de pulso). A intensidade da lâmpada pode ser controlada variando a relação ciclo ativo/ciclo total do sinal PWM.

A seguir está um exemplo de como implementar o sinal PWM no seu código:

#define _XTAL_FREQ 4000000 // frequência do oscilador interno

// configura o oscilador interno e o módulo CCP
void setup_PWM() {
    // configura o oscilador interno para trabalhar a 4 MHz
    OSCCON = 0b01110010;
    
    // habilita o módulo CCP1 em modo PWM
    CCP1CON = 0b00001100;
    
    // configura o período do sinal PWM
    PR2 = 249; // período de 4 ms (250 * 16 us)
    
    // habilita o timer 2
    T2CON = 0b00000101;
}

// define a duty cycle do sinal PWM (de 0 a 100)
void set_duty_cycle(unsigned char duty_cycle) {
    // calcula o valor do ciclo ativo
    unsigned int t_on = (duty_cycle * PR2) / 100;
    
    // atualiza o registrador CCPR1L
    CCPR1L = t_on >> 2;
    // atualiza os bits de menor peso do registrador CCP1CON
    CCP1CON &= 0b11001111;
    CCP1CON |= (t_on & 0b00000011) << 4;
}

void main() {
    // configura o PWM
    setup_PWM();
    
    // habilita a saída do sinal PWM no pino RC2
    TRISC2 = 0;
    
    while (1) {
        // ajusta o duty cycle para 0%
        set_duty_cycle(0);
        delay_ms(500);
        
        // ajusta o duty cycle para 50%
        set_duty_cycle(50);
        delay_ms(500);
        
        // ajusta o duty cycle para 100%
        set_duty_cycle(100);
        delay_ms(500);
    }
}

 

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois...
  • Membro VIP

Na minha limitada visão, um tiristor (triac) em ac e pwm também não se dão bem. Mesmo pra um triac que se desliga na ausência de sinal no gate. ..

(Uma versão dc pra tiristor scr...) :

 

E dizem que tem também pra ac... nem sei se entendi direito 🤔... mas nem preciso no momento 🙃

STATIC+AC+CIRCUIT+BREAKER1.png

https://www.ecstuff4u.com/2018/03/static-circuit-breaker.html

 

Pra usar o pwm num mosfet, uma ideia seria uma ponte retificadora e claro um mosfet que suporta a tensão da rede.

dimmer-with-a-mosfet-circuit-diagram.gif

https://www.learningelectronics.net/circuits/dimmer-with-mosfet.html

Claro mais indicado apenas pra cargas resistivas

Link para o comentário
Compartilhar em outros sites

Em 02/02/2023 às 12:47, Eng.Proxy disse:

@herbertbahia Opa amigo, tudo bem? Mas nesse caso, sendo uma lampada AC eu teria que trocar o Hardware para um FET direto na lampada correto?

Vire e mexe volto a postar um exemplo antigo.

Foi programado utilizando o compilador CCS,vai ter que alterar o código,mas o Hardware é o mesmo.

 

 

 

 

CCS dimmer.rar

ccs dimmer(1).rar

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@vtrx Opa, baixei os arquivos aqui e vou estudar eles. Qualquer duvid te falo. Mas ja antecipo o agradecimento.

@vtrx porque a questão não é só o dimmer mas asim a jogada de ligar/desligar e controlar luminosidade no mesmo botão (infelizmente o painel da máquina onde vou usar essa placa só disponibiliza um botão.

  • Triste 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!