Fórum

arrow_back

TEMPORIZAÇÃO PARA CONTROLE DE CARGA

CLEUBER COSTA ROMUALDO

30/10/2024 14:02:05


Boa tarde, professor!

Estou desenvolvendo um controlador de carga para um alimentador vibratório e utilizando como referência um exemplo que o senhor enviou há algum tempo. No entanto, estou enfrentando dificuldades no controle da potência de uma bobina eletromagnética, que está impedindo o controle ideal.

Quando a bobina está operando sem o alimentador, que pesa cerca de 20 kg, o controle de vibração é satisfatório. Mas ao acoplar o alimentador, a potência não é suficiente para manter a velocidade adequada, e a vibração se torna quase inexistente.

Seguem os passos que tomei para identificar possíveis causas do problema:

  • Hardware (circuito eletrônico e elétrico): Verifiquei que está tudo correto.
  • Dimensionamento: Realizei os cálculos de dimensionamento considerando a corrente necessária para suportar o peso e o consumo do sistema.
  • Teste de circuito: Realizei um teste com o Timer0 configurado para 200 ms, e o alimentador vibrou sem problemas, indicando que o circuito está funcionando.

Na programação, também ajustei o cálculo para aumentar o atraso após a detecção da passagem por zero, mas isso não resolveu.

Observei o seguinte: no registrador de configuração T0CON, o bit 5 está configurado para o ciclo de máquina interno (0). Minha dúvida é a seguinte: se estou usando um oscilador externo de 8 MHz e recebendo um sinal de passagem por zero no pino RB0 (INT0), que deveria sincronizar o Timer0 para overflow, não seria ideal configurar o bit 5 com 1 para permitir a contagem com base no sinal externo?


Não sei se ainda tem o exemplo que me enviou, não estou conseguindo anexar para que possa consultar está dando erro se possível me informe outroa maneira de anexar o documento.


 



CLEUBER COSTA ROMUALDO

01/11/2024 19:14:31

Professor, entendo!

Acredito que a sincronização entre a passagem por zero e o disparo do TIMER0 esteja funcionando corretamente. Realizei o cálculo a partir da frequência da rede (60Hz), e consigo detectar a passagem por zero no osciloscópio, bem como o disparo na porta de saída.

O que está acontecendo é o seguinte:

O ajuste feito com a bobina eletromagnética está funcionando bem, consigo controlar a intensidade de vibração, e a bobina vibra com força já na seleção 1.

Porém!

Quando o alimentador helicoidal é acoplado à bobina eletromagnética, a vibração fica quase nula, e a potência não é entregue à carga de forma eficiente.

Meu circuito de potência está bem dimensionado e suporta até 10A, com uma margem de segurança. O sistema requer 10A, considerando um pico que pode chegar a 8A. Realizei um teste isolando o controle, apenas com o TIMER0 piscando a saída a cada 200ms, e o resultado foi bom.

Agora, não consigo identificar o que pode estar causando o problema!

Segue parte do código:

******************************************************************************************************

void init_ticks(void)

{

        T0CON = 0B00000011;

        TMR0H = (char)(TMR0_VALUE >> 8);

        TMR0L = (TMR0_VALUE & 0xff);

        TMR0IF_bit = 0;

        TMR0IP_bit = 1;

        TMR0ON_bit = 0;

        TMR0IE_bit = 1;

}

******************************************************************************************************


void interrupt_high() iv 0x0008 ics ICS_AUTO

{


        //Zero Crossing detectado?

        if (INT0IF_bit == 1 && INT0IE_bit == 1)

        {

                LATC.RC0 = 0; //desliga triac


                INT0IF_bit = 0;

                TMR0H = (char)(TMR0_VALUE >> 8);

                TMR0L = (TMR0_VALUE & 0xff);

                ticks = 0;

                TMR0IF_bit = 0;

                TMR0ON_bit = 1;   //liga timer.

                O atraso no disparo é definido pela variável 'tempo', o qual será incrementado

                //por botões em intervalos multiplos de 1 milisegundos.

        }


    //estouro a cada 1ms

    if (TMR0IF_bit == 1 && TMR0IE_bit == 1)

        {

                ticks++;

                TMR0H = (char)(TMR0_VALUE >> 8);

                TMR0L = (TMR0_VALUE & 0xff);

                TMR0IF_bit = 0;

                //talvez a rotina abaixo sirva para desligar o triac caso por ventura

                //o circuito não detecte a passagem por zero;

                #define TIME_MAX 16 //ms  -> este intervalo não poderia ser maior que 1/60hz;

                if(ticks >= TIME_MAX) {

                   LATC.RC0 = 0;    //desliga triac

                   TMR0ON_bit = 0;  //desiga o timer

                   return;

                }

                //if(ticks >= tempo) //a variável 'tempo' define quanto 'ticks' irá incrementar... (ORIGINAL)

                if(ticks >= (TEMPO_MAXIMO - tempo)) // Inverte a lógica de controle de acordo com o novo valor de 'tempo'
// Professor alterei essa parte do código, incluí TEMPO_MAXIMO para inverter a contagem no displai.

                 {

                        TMR0ON_bit = 0;    //desliga timer0

                        //se desligar o TIMER e a detecção do zero falhar, o triac permanecerá ligado constantemente

                        LATC.RC0 = 1;    //liga triac

                 }


    }


}
******************************************************************************************************
Já alterei os valores de TEMPO _MAXIMA eTIME_MAX e não resolveram.

o atraso no disparo é definido pela variável 'tempo' a cada 1 milisegundo, teria alguma dica para resolver esse problema ?



Microgenios Tecnologia e Educação

01/11/2024 16:15:09

Olá, Cleuber.

T0CKI (1) habilita o modo contador do TIMER0. A seleção da borda de disparo do sinal (subida ou descida), para alguns microcontroladores, pode ser configurada através de TMR0SE. De qualquer maneira, mesmo que utilize T0CKI, a interrupção do TIMER0 teria que ser configurada a cada passagem por zero detectada. Não tenho certeza de quanto é efetiva a troca de INT0 por T0CKI no seu projeto.

Talvez utilizar outros modelos de microcontroladores PIC seja melhor, segue um material da Microchip sobre Zero-Cross Detection: https://ww1.microchip.com/downloads/en/appnotes/90003138a.pdf

At. 

Equipe Microgenios

Este site usa cookies para melhorar sua experiência. Política de Privacidade