Ir ao conteúdo

Controle de resistencia com PWM


rodrigocirilo

Posts recomendados

Postado

Percebí que @rodrigocirilo não conhece programação usando CCS,eu programo,as vezes,com CCS mas sempre que avança alguma rotina mais complexa,ele deixa a desejar.

Olha este é o intuito de um forum, trocar ideias e quem quiser ajudar ajude!  Se eu conhecesse na sua totalidade a linguagem C no CCS ou em qualquer outro compilador eu não precisaria pedir ajuda a ninguem.

 

O quanto eu conheço de programação?? sinceramente amigo, todo dia é dia de aprender....

Postado

Por isso citei voce,se neste tópico eu não apresentar o programa completo funcionando,não vou ter,neste momento,tempo suficiente para esclarecer todas as etapas do código,por exemplo,voce queria compreender o porque dos dois canais 'alterarem' juntos.

       output_b(0b00100000);            #asm nop #endasm                output_b(0b00000000);

A instrução acima output_b(0b00100000);,é clara, se ja programasse com o CCS,ela altera todos os pinos do PORTb,logo só o pino RB5 vai ficar em nível Alto ou Baixo ((0b00100000)),ou outros serão Zero((0b00100000)).

Por isso só vou postar o código se ficar funcional por completo.

Postado

Por isso citei voce,se neste tópico eu não apresentar o programa completo funcionando,não vou ter,neste momento,tempo suficiente para esclarecer todas as etapas do código,por exemplo,voce queria compreender o porque dos dois canais 'alterarem' juntos.

       output_b(0b00100000);            #asm nop #endasm                output_b(0b00000000);

Sim mas esta explicação não explica o porque de alterarem juntos!!  E eu expliquei direitinho nos posts anteriores que o problema estava nos timer 0 e 1 que eu estava usando!! não sei se você leu..

 

quanto a instrução output_b(0b00100000) esqueci de citar que mudei os pinos de saida para  o RB5...

 

mas de boa ja estar funcionando...

Postado

 

Sim mas esta explicação não explica o porque de alterarem juntos!!

Pode ser o TIMER,mal configurado,ou o próprio CCS,que é cheio de regras e não segue a risca o padrão ANSI C.

Postado

@rodrigocirilo,

 

O tal do ALFA ( letra grega ) é o angulo dado em Radianos... tem de transformar os angulos de graus em radianos para usar aquela equação.

 

Este tópico é bom para a gente ver o porque que algumas vezes fazemos programas que "assumem" algumas linearidades, quando na verdade existem pequenas discrepâncias.... Se o que te importa é aquecer a resistencia e controlar uma temperatura, não precisa usar nada disso.... basta ligar o tiristor, e ficar monitorando a temperatura, e desligar logo após atingir a temperatura desejada. Se o resistor possuir alta inércia térmica, voce desliga ele um pouco antes de atingir a temperatura.

 

É o que eu chamos de "obter resultados práticos " kkkkk !

 

Prá que complicar , se podemos resolver sem toda essa discussão ?

 

Paulo

Postado

@rodrigocirilo,

 

O tal do ALFA ( letra grega ) é o angulo dado em Radianos... tem de transformar os angulos de graus em radianos para usar aquela equação.

 

Este tópico é bom para a gente ver o porque que algumas vezes fazemos programas que "assumem" algumas linearidades, quando na verdade existem pequenas discrepâncias.... Se o que te importa é aquecer a resistencia e controlar uma temperatura, não precisa usar nada disso.... basta ligar o tiristor, e ficar monitorando a temperatura, e desligar logo após atingir a temperatura desejada. Se o resistor possuir alta inércia térmica, voce desliga ele um pouco antes de atingir a temperatura.

 

É o que eu chamos de "obter resultados práticos " kkkkk !

 

Prá que complicar , se podemos resolver sem toda essa discussão ?

 

Paulo

Então Paulo, quando estava no desespero até pensei em fazer assim como você disse, poderia até ligar/desligar relês os contatores enfim.... mas teria de ficar ligando e desligando...  por isso preferi fazer assim..e ainda bem que consegui.. hehe...

 

Mas tranquilo, vou fazer testes práticos como você diz...hehehe.. e depois posto os resultados que consegui.... 

Postado

@rodrigocirilo,

 

Nada como o velho e bom controle "ON-OFF" .... Liga os tiristores, e espera a temperatura chegar.... 

 

Com o tempo, você mesmo vai ter idéias para compensar a "inércia térmica" , e conseguir uma variação pequena em torno do SET-Point.

 

Isso tudo é teoria de instrumentação, hoje usa-se o controle PID quando precisamos de um controle muito preciso em torno da temperatura. Mas a grande maioria dos usos ainda é como eu fqlei acima, tipo liga/desliga e religa quando abaixar .

 

Boa sorte nas experiências.

 

Paulo

Postado

@rodrigocirilo,

 

Nada como o velho e bom controle "ON-OFF" .... Liga os tiristores, e espera a temperatura chegar.... 

 

Com o tempo, você mesmo vai ter idéias para compensar a "inércia térmica" , e conseguir uma variação pequena em torno do SET-Point.

 

Isso tudo é teoria de instrumentação, hoje usa-se o controle PID quando precisamos de um controle muito preciso em torno da temperatura. Mas a grande maioria dos usos ainda é como eu fqlei acima, tipo liga/desliga e religa quando abaixar .

 

Boa sorte nas experiências.

 

Paulo

hahaha Verdade o bom e velho on-off.......  quando você diz tiristores?? seriam os triac´s....

 

Mas esse controle (dimmer) também servirá certo? pois se variamos o brilho de uma lampada e ela se mantem, digamos a meia luz, o calor da resistência seguirá o mesmo principio??

Postado

@rodrigocirilo,

 

Sim, tiristores no seu circuito se tiver retificação em onda completa, ou TRIAC se for puro AC.

 

E o calor produzido em uma resistência é proporcional à potência que ela vai dissipar.

 

Claro que serve o controle por dimmer, faz assim, pega um voltimetro que mede AC , mede a tensão em cima da resistência em  função do tempo que você demora para acionar o tiristor.

 

Faz uma tabela assim :

 

TEMPO           tensão          POTENCIA

 

Por exemplo , se você acionar no instante do crossover, terá tempo máximo ligado, e vai dar a potencia máxima , certo ?

 

Lembre que a potência sempre será proporcional ao quadrado da tensão AC que voce medir !

 

Supondo que seu resistor tenha 110 ohms para facilitar minha e a tensão seja 110v, voce iria levantar algo assim :

 

0ms                  110V             110W

4,15 mseg        77,78V            55W

 

Entendeu ?

 

Lembre-se : P=VxV/R .

 

Nada como a prática, meu amigo !  Ela faz voce contornar uma montanha quando a teoria diz que você deveria atravessar por cima dela.....

 

Vou ilustrar aqui com um ditado muito antigo, eu ví uma vez escrito no banheiro duma empresa que trabalhei :

 

Teoria é quando se sabe tudo mas nada funciona....

Prática é quando tudo funciona e ninguém sabe o porquê....

Nesta Empresa, juntamos as duas palavras :

Nada funciona, e ninguém sabe o porque ! 

 

kkkkkk boa né ?

 

Paulo

Postado

@aphawk,é bom exercitamos a mente :P .

eu mesmo ja faz um tempo queria fazer este código para dois canais(DIMMER),mas usando o CCS.

Eu tenho código para 16 canais usando TIMER(o do vídeo)mas é em C18,e fica difícil passá-lo linha a linha para o CCS pois é muito 'incompatível com ele(CCS).

Postado

@vtrx,

 

Verdade, a gente vai lembrando de coisas do arco da velha .... kkkk 

 

Esses problemas de linguagem C são bem complicados... quando eu peguei aquele famoso livro sobre C, escrito pelo autor, era grosso pacas, isso em 1984 se não me engano, o cara falava que a linguagem ia ser padronizada.... e até hoje existem trocentas versões de C... realmente é um saco, tem de se especializar em uma das versões, porque não é simples portar o código. Pior é que desde aquele dia eu já não conseguí entender a linguagem, embora eu "comia" assembler para o 6502, 8080 e Z80 em dois projetos diferentes e ao mesmo tempo.... não nascí para usar C não.

 

Paulo

Postado

@rodrigocirilo,

 

Sim, tiristores no seu circuito se tiver retificação em onda completa, ou TRIAC se for puro AC.

 

E o calor produzido em uma resistência é proporcional à potência que ela vai dissipar.

 

Claro que serve o controle por dimmer, faz assim, pega um voltimetro que mede AC , mede a tensão em cima da resistência em  função do tempo que você demora para acionar o tiristor.

 

Faz uma tabela assim :

 

TEMPO           tensão          POTENCIA

 

Por exemplo , se você acionar no instante do crossover, terá tempo máximo ligado, e vai dar a potencia máxima , certo ?

 

Lembre que a potência sempre será proporcional ao quadrado da tensão AC que voce medir !

 

Supondo que seu resistor tenha 110 ohms para facilitar minha e a tensão seja 110v, voce iria levantar algo assim :

 

0ms                  110V             110W

4,15 mseg        77,78V            55W

 

Entendeu ?

 

Lembre-se : P=VxV/R .

 

Nada como a prática, meu amigo !  Ela faz voce contornar uma montanha quando a teoria diz que você deveria atravessar por cima dela.....

 

Vou ilustrar aqui com um ditado muito antigo, eu ví uma vez escrito no banheiro duma empresa que trabalhei :

 

Teoria é quando se sabe tudo mas nada funciona....

Prática é quando tudo funciona e ninguém sabe o porquê....

Nesta Empresa, juntamos as duas palavras :

Nada funciona, e ninguém sabe o porque ! 

 

kkkkkk boa né ?

 

Paulo

 Nossa bem esclarecedor.. vou fazer exatamente assim...

 

Legal esse versinho.. eu sou mais do tipo "tá funcionando, mas não sei como" hahahaha... 

 

Putz quando você leu esse livro sobre C eu ainda iria nascer um ano depois.. hehe...

Postado

Isso pode ser resolvido com um simples relê, 1 ou 2 transistores e ± 3 reistores.

Já que queres tanto usar um PICxxxxx

Use o principio dos Alto Claves, como já citei réplicas atrás. Como não vai haver o detalhe SEGURANÇA, pois um Alto Clave pode explodir se ultrapassar a temperatura máxima que o mesmo suporta e machucar quem estiver por perto.

 

1) Use a resistência ligada no triac e usando a tensão AC 110v ou 220v como desejares e esqueça esses detalhes de passagem por zero e angulos na onda senoidal.

2) Use um termômetro que você encontra em qualquer loja de equipamentos ondontológicos (DABI ATLANT) e faça um código p/ entrada analógica (AN) do PIC contando os valores analógicos lidos pelo termômetro de 0 a 5v.

3) Suponha que quando essa entrada analógica atinja 3V o seu resistor esteja a 150º; então nessa temperatura o triac desliga desligando a corrente no resistor que esfriará.

4) Nesse instante, você terá que implementar o código p/ religar o triac digamos a 2V e 149º.

Conclusão: O triac ficará ligando e desligando automaticamente mantendo a temperatura constante.

 

Eu acho que se você procurar com paciência na NET, vais encontrar tudo isso aí pronto com código e tudo que tem direito.

Agricio

Postado

Isso pode ser resolvido com um simples relê, 1 ou 2 transistores e ± 3 reistores.

Já que queres tanto usar um PICxxxxx

Use o principio dos Alto Claves, como já citei réplicas atrás. Como não vai haver o detalhe SEGURANÇA, pois um Alto Clave pode explodir se ultrapassar a temperatura máxima que o mesmo suporta e machucar quem estiver por perto.

 

1) Use a resistência ligada no triac e usando a tensão AC 110v ou 220v como desejares e esqueça esses detalhes de passagem por zero e angulos na onda senoidal.

2) Use um termômetro que você encontra em qualquer loja de equipamentos ondontológicos (DABI ATLANT) e faça um código p/ entrada analógica (AN) do PIC contando os valores analógicos lidos pelo termômetro de 0 a 5v.

3) Suponha que quando essa entrada analógica atinja 3V o seu resistor esteja a 150º; então nessa temperatura o triac desliga desligando a corrente no resistor que esfriará.

4) Nesse instante, você terá que implementar o código p/ religar o triac digamos a 2V e 149º.

Conclusão: O triac ficará ligando e desligando automaticamente mantendo a temperatura constante.

 

Eu acho que se você procurar com paciência na NET, vais encontrar tudo isso aí pronto com código e tudo que tem direito.

Agricio

Amigão,  não é que eu quero tanto usar um picxxxxx!!  como vou exibir valores em um LCD sem um pic? ou qualquer outro microcontrolador !! transistores e resistores não fazem isso!!

 

Mas agradeço a sua dica, este foi o primeiro sistema que eu pensei quando resolvi implementar o projeto!! 

 

Como ja tenho o código vou testar assim, se caso não ficar bom, eu posso mudar para esse sistema,, tudo é valido quando não se tem nada hehe

Postado

Esqueci o detalhe do LCD.

Não tem como jogar esses valores no LCD fazendo a leitura do termômetro?

 

Agricio

 

Esqueci o detalhe do LCD.

Não tem como jogar esses valores no LCD fazendo a leitura do termômetro?

 

Agricio

Sim tem.. você teria o modelo do termometro??

Postado

Não @Agricio tranquilo cara, se tiver que desmontar algo deixa queto..

 

@vtrx você sugeriu no arquivo MOC um triac BT136, vi no datasheet que este é para 4A, poderia eu usar um BTA12 (12A) pois este eu tenho muuuuitos.... a corrente necessária no Gate nos muda de uma para o outro??

 

e o moc em si lá é o MOC3021, posso uar o 3052 também tenho muuitos....

Postado

Sobre os MOCs,eu não sei,usei o MOC3011 com BT137(foi o usado no vídeo).

Segue Link com código refeito usando o CCS,tem que montar um Hardware para calibrar a saida com tensão máxima,use lampadas para calibrar,na saida da lampada ligue um multímetro em AC.

O código está aberto e outros usuarios devem ajudar pois não sou 'fera' em CCS e quando tentei usar o pino RB5 e RB6 para 'ler' os botões,o código não gerou a as saidas nos pinos,tem muita coisa para melhorar,mas ja é um início.

Não sei se é alguma coisa que eu não soube setar.

http://www.4shared.com/rar/j0Xij_j8/ccs_dimmer.html

 

As adaptações para LCD eu não programei,mas tem muita gente aqui que usa LCD com CCS e vai te ajudar.

A parte de Hardware voce pode pedir ajuda ao @aphawk tambem.

Postado

@Agricio,

Esse processo que voce citou é exatamente o tal do ON-OFF kkkkkk !

@rodrigocirilo,

Que bom que voce entendeu a tabela ! O mais importante para mim é voce perceber que existem muitas maneiras de se "cozinhar o pato" , a gente sempre tem alternativas para atingir o que queremos, e temos de pesquisar na Internet, 99,9 % das vezes alguém já passou pelas mesmas dificuldades !

@vtrx,

Quanto ao hardware , tanto da parte de potencia quanto display, pic, etc, eu me viro. Mas o código em C ferrou !!!

Quem sabe algum outro membro pode dar uma ajudazinha aqui ???

Paulo

Postado

Caro @vtrx preciso dizer algumas coisas.... Você disse em post´s anteriores que era claro que EU não sabia programar com CCS, ora!! vendo o seu codigo não sei se você notou, mas usando o TIMER0 e TIMER1 eu ja havia feito e postado umas 2 paginas atrás !! 

 

Pedi insistentemente ajuda pois os timers não sincronizavam, explico: o timer que ficava primeiro nas linhas de programação afetava o outro.  Esta maneira de programar variando o SET_TIMER(variavel) eu ja havia tentado e os exemplos estão postados !! você não deve ter visto ou acompanhado o topico!!

 

Agora não sei se o problema é com os pic´s da familia 16F e por isso você usou um da familia 18F...

 

Tambem não sei se você notou, mas o codigo já está pronto, usando a logica proposta pelo @aphawk, esta sim deu certo!

 

Bom mas vamos lá, você não conseguiu ler os pinos RB5 e RB6 porque você habilitou a interrupção pelo port b (B4 ~B7) através da instrução    enable_interrupts(int_rb); você teria que tratar corretamente com if´s cada porta!

 

Quanto ao LCD, tranquilo já está implementado a tempos.....

 

Mas de boa, obrigado pelo ajuda!

 

 

@aphawk ja estou montando na proto, amanha vou fazer os testes....

 

Ah um detalhe, li que o chaveamento de triac´s geram interferência na rede?? precisaria de filtros ou no arquivo abaixo o contornado de vermelho já é o filtro??

 

u38q.jpg 

Postado

 

enable_interrupts(int_rb); você teria que tratar corretamente com if´s cada porta!

Nunca usei o 16F877,mas PIC 18F877 só tem uma interrupção externa(RB0).

 

 

Pedi insistentemente ajuda pois os timers não sincronizavam, explico: o timer que ficava primeiro nas linhas de programação afetava o outro.  Esta maneira de programar variando o SET_TIMER(variavel) eu ja havia tentado e os exemplos estão postados !! você não deve ter visto ou acompanhado o topico!!

Esperei terminar o código pois pela figura parece que seu código esta fora da senoide(desincronizado),os pulsos não podem ultrapassar os limites da forma de onda AZUL.tem que estar dentro dela..

 

 

Ah um detalhe, li que o chaveamento de triac´s geram interferência na rede?? precisaria de filtros ou no arquivo abaixo o contornado de vermelho já é o filtro??

É um SNUB.

Aguardo o @aphawk confirmar.

O código que postei está simulado e respondendo corretamente,acho que ja é o suficiente como ponto de partida.

Postado

Nunca usei o 16F877,mas PIC 18F877 só tem uma interrupção externa(RB0).

Desconheço 18F877 e sim 16F877.

 

Quando você dá um enable_interrupts(int_RB) você está habilitando as interrupções dos ports B4 ao B7, então seria assim

 

void int_RB(void)

{

 

if(input(PIN_4 ou B5 ou B6 ou B7)

{

comando...;

ou comandos....;

}

 

}

 

Agora, enable_interrupts(INT_EXT);

 

essa sim habilita a interrupção externa no pino RB0

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!