Ir ao conteúdo
  • Cadastre-se

Controle de resistencia com PWM


rodrigocirilo

Posts recomendados

@vtrx ah sim entendi, ele é dependente do senoide pra chamar a interrupção externa... e não dá pra acionar o pwm dentro deste tempo...ok...

 

No codigo que você me mandou o que percebi é que assim que se chama a interrupção ele espera o tempo (brilho) faz o pino RB1 alto e logo em seguida ja o faz nivel baixo, esse pulso instantâneo ja irá acionar o triac??

 

Amigo @aphawk seria possivel fazer 2 canais neste metodo (PWM via software) você teria alguma ideia??

 

este video do link eu ja vi varias vezes hehe,, achei bem legal....

Link para o comentário
Compartilhar em outros sites

 

esse pulso instantâneo ja irá acionar o triac??

Um TRIAC,depois de disparado,fica ativado infinitamente,por isso temos que cortá-lo.

No caso do circuito que postei,se esse tempo for longo,a precisão se perde.

Uma lampada incandecente é resistiva,logo,suas resistencias terão 100% de controle.

Link para o comentário
Compartilhar em outros sites

Um TRIAC,depois de disparado,fica ativado infinitamente,por isso temos que cortá-lo.

No caso do circuito que postei,se esse tempo for longo,a precisão se perde.

Uma lampada incandecente é resistiva,logo,suas resistencias terão 100% de controle.

Como o codigo faz o corte do triac? quando volta o pino para 0 ?  ou é via hardware?

Link para o comentário
Compartilhar em outros sites

nossa verdade, eu sabia disso mas na empolgação de postar hehe.. fiz ligação direta....

 

valeu, vou testar....

 

@vtrx, @aphawk, @Agricio  obrigado mesmo amigos... por compartilharem vosso conhecimento..!!

 

Editando;

 

Mas ainda tenho duvida quanto a fazer o "pwm" via software, para os dois canais, pois quando 1 for executado e tiver que aguardar o tempo (para variar a potencia no triac) o outro "canal" ainda nao terá sido acionado, perdendo o sincronismo... o que vocês acham..??

Link para o comentário
Compartilhar em outros sites

@rodrigocirilo,

 

Claro que pode fazer o PWM ! 

 

Não me lembro mais dos PIC's, mas me parece que por hardware mesmo só tem um canal. Então,, para evitar problemas, faça por software !

 

Se fosse com os Avr's, teria 6 canais kkkkkkk mas vamos em frente.... vamos fazer por software mesmo.

 

Eu usaria uma interrupção do timer como base de tempo. Faria uma conta para que durante o ciclo da senóide minha base de tempo contaria de 0 até 99, assim teria um controle em nível de 1% , mais do que suficiente para muita coisa....., e baseado nessa conta programo o meu Timer para gerar essa frequência. Por exemplo , 100 *60 = 6 Khz . 

 

Criaria dois contadores, um para cada canal PWM, que seriam incrementados automáticamente pela minha rotina de base de tempo.

 

Quando houver a interrupção por cruzamento de zero, eu zero os dois contadores, e permito que a contagem inicie.

 

No meu programa principal, fico comparando os valores dos contadores com os valores desejados, e tomo a ação de mudar o nível da saída correspondente. Então fico parado sem fazer nada, esperando a próxima interrupção para zerar os contadores, e aí vai....

 

Simples , não é ?

 

Paulo

Link para o comentário
Compartilhar em outros sites

@rodrigocirilo,

 

Claro que pode fazer o PWM ! 

 

Não me lembro mais dos PIC's, mas me parece que por hardware mesmo só tem um canal. Então,, para evitar problemas, faça por software !

 

Se fosse com os Avr's, teria 6 canais kkkkkkk mas vamos em frente.... vamos fazer por software mesmo.

 

Eu usaria uma interrupção do timer como base de tempo. Faria uma conta para que durante o ciclo da senóide minha base de tempo contaria de 0 até 99, assim teria um controle em nível de 1% , mais do que suficiente para muita coisa....., e baseado nessa conta programo o meu Timer para gerar essa frequência. Por exemplo , 100 *60 = 6 Khz . 

 

Criaria dois contadores, um para cada canal PWM, que seriam incrementados automáticamente pela minha rotina de base de tempo.

 

Quando houver a interrupção por cruzamento de zero, eu zero os dois contadores, e permito que a contagem inicie.

 

No meu programa principal, fico comparando os valores dos contadores com os valores desejados, e tomo a ação de mudar o nível da saída correspondente. Então fico parado sem fazer nada, esperando a próxima interrupção para zerar os contadores, e aí vai....

 

Simples , não é ?

 

Paulo

Paulo, me perdoe mas eu não entendi.....essa logica desculpe...

 

o sinal de passagem por zero ainda estaria acionando um interrupção externa ?

 

o codigo do colega Vtrx achei legal, mas o problema é que é para um canal, se eu seguisse aquele principio os dois PWM acionariam em momentos diferentes... pois o pic executa em uma sequencia certo?

 

O pic que vou usar o 16f876A tem 2 modulos PWM.... seria possível usa-los com o detector de passagem por zero??

 

vixi to aflito agora.....

Link para o comentário
Compartilhar em outros sites

@rodrigocirilo,

 

Essa interrupção de passagem por zero apenas marca o início da contagem, entendeu ?

 

A contagem será feita por uma interrupção do timer . E no loop principal do programa, fora das interrupções, você apenas verifica os valores das duas contagens, ver se ele atingiu os limites que você definiu.

 

Se esse PIC tem dois, usa os dois por hardware mesmo ! 

 

Paulo

Link para o comentário
Compartilhar em outros sites

@aphawk eu até prefiro fazer por hardware mesmo, mas vou precisar de ajuda, pois, sem ter que ter sincronismo com a passagem por zero, é fácil é só programar os canais que vai usar, a frequência e tal..

 

Mas o que não entendo e como sincronizar o pulso do PWM por hardware com a interrupção externa que irá detectar o zero da senoide...

 

Como eu disse o codigo do vtrx para dois canais eu nao entendi como fazer e se fazer usando a logica que ele passou o "canal 2" do pwm por software ficaria dessincronizado veja:

 

#int_ext void zero_ISR()  {      clear_interrupt(INT_RB);       delay_us(brilho);      output_b(0b0000010);                                             // aqui aciona o pino RB1       #asm nop #endasm     /////perguntar no forum...     //não entendi o porque deste trecho em asm      output_b(0b0000000);                                             ///aqui ja desaciona o pino RB1}para eu usar 2 canais eu teria que colocar que fazer assim, pois quero regulagens diferentes para cada PWM #int_ext void zero_ISR()  {      clear_interrupt(INT_RB);       delay_us(brilho);      output_b(0b0000010);                                             // aqui aciona o pino RB1       #asm nop #endasm     /////perguntar no forum...     //não entendi o porque deste trecho em asm      output_b(0b0000000);                                             ///aqui ja desaciona o pino RB1      delay_us(brilho1);                                              ///outra variavel  para controlar o brilho     output_b(0b0000100)                                         ///aciona o pino RB2     output_b(0b0000000)                                         ///desaciona o pino RB2    }
Link para o comentário
Compartilhar em outros sites

 

#asm nop #endasm     /////perguntar no forum...     //não entendi o porque deste trecho em asm

Para o CCS controlar os PORTs com velocidade máxima,foi preciso usar FASTIO,isso faz com que o programa ative os pinos das PORTS como se estivesse usando ASM e se voce ler o Datasheet do PIC,verá que para trocar o estado de um pino no PIC instantaneamente,é nescessario um 'tempo',e a instrução NOP gasta um cilco de clock,garantindo a mudança de estado com garantia

O CCS é tão crítico com a temporização,que se voce não usar FASTIO neste programa,o PORT não muda de estado a tempo.

Link para o comentário
Compartilhar em outros sites

Passagem por zero em duty cycle de PWM variável, digamos de 0 a 255?

Passagem por zero em senóide, ciclo fixo, sem alteração da onda, tudo bem.

Tudo isso aí em cima (as duas ondas) misturadas?

Está me parecendo mais uma modulação de ondas, que me parecem, sem nenhum sentido para o que se está desejando

que é apenas, aquecer uma resistência.

 

Você não me passou a potência (em WATTS) da resistência que pretende usar na experiência.

Vou fazeu um teste aqui com uma resistência de chuveiro elétrico assim que tiver uma folga.

 

Agricio

Link para o comentário
Compartilhar em outros sites

 

Eu faria por software mesmo,

Quando começei as experiencias,fiz PWM por software usando um 18F2550(12MIPS) e não foi possível gerar as saidas dentro do intervalo da passagem por zero,mas como eu ia usar pelo menos 16 canais,eu desistí de usar PWM.

Pode ser que com dois canais seja viavel.

Link para o comentário
Compartilhar em outros sites

 

Eu faria por software mesmo, mas parece que o Rodrigo gosta de masoquismo kkkkk !

Sem querer ser causa de desânimo, mas me parece que vai queimar um triac atras do outro.

Os Auto Claves que são usados p/ esterilizar ferramentas e instrumentos de dentistas, usam AC senoidal (110v ou 220v) com TRIACs. Mantêm a temperatura e pressão estáveis até terminar o ciclo de trabalho; mas utilizam termômetro que mandam informações constantes p/ o µcontrolador que por sua vez ligam ou desligam a TENSÃO AC do TRIAC sem alterar nada na onda.

Fica caro, mas é assim que funciona.

 

Agricio

Link para o comentário
Compartilhar em outros sites

 

Não sei o que o Agricio quis dizer,mas uso lampadas de 150 W piscando mais de 8 horas e os TRIACs ficam levemente aquecidos,com o circuito proposto.

Com ciclo fixo em AC senoidal tudo bem. se é isso que você tem ai.

Me parece que vocês estão querendo fazer um circuito p/ aquecer um resistor usando dois (2) tipos de onda: 1 em AC (senoidal) e outra (quadrada) com variação do ciclo ativo (indo de quadrada p/ retangular) Será isso?????? se sim!?!?! p/ que?

Vão colocar a onda senóide dentro da onda quadrada e tentar fazer uma modulação???? observando a passagem por zero de qual das duas ondas?....a quadrada ou a senoidal?......só p/ aquecer um resistor????

 

Agricio

Link para o comentário
Compartilhar em outros sites

De uma pesquisada ,na net, de como controlar linearmente uma tensão AC usando um TRIAC e entenderá o circuito,do mesmo jeito que controlei as lampadas,uma resistencia terá um controle de 100% usando o circuito proposto,não é teoria apenas,foi usada a prática,como se pode perceber no video.

ACho que ele quer controlar a temperatura de algo através de um resistor,se for isso,o sistema proposto é funcional.

Link para o comentário
Compartilhar em outros sites

Bom vamos lá...

 

@Agricio As potencias das resistências foram citadas anteriormente e serão de 400w e 100w certo! Não entendi o que você quis dizer sobre misturar onde senoide com quadrada! e também espero que não queimei um triac atras do outro.

 

@aphawk  nao sou masoquista não rsrsrs por mim eu faço do modo mais simples o que vocês me indicarem.... até prefiro por software, mas segundo minhas explicações no ultimo post,, via software para 2 canais não perderia o sincronismo com a passagem por zero?

 

 

@vtrx caro amigo o exemplo que você me passou foi muito bom pra elucidar minhas ideias, mas é de 1 único canal, você não poderia me ajudar postando um exemplo igual ao que você ja me passou mas de 2 canais, com o controle independente para cada canal.

 

Vejam no meu ultimo post, eu tentei implementar o seu codigo @vtrx para dois canais, mas me pareceu que iria perder o sincronismo, por causa dos tempos (delay´s) dentro da execução   da interrupção externa

 

 

 

@vtrx como expliquei anteriormente para dois canais eu incrementei o codigo como no post anterior, montei no proteus e liguei este outro canal no "canal C" do osciloscopio (vermelho) e joguei junto com o verde que o outro canal de pwm certo.

 

Ocorre que desta forma quando eu usar o botão do circuito ligado em RB2 para variar a variavel brilho, como é uma variavel que quem está usando é um delay_us ela muda sim o instante dopulso em relação a senoide, mas automaticamente muda do pulso do "canal 2" como eu disse por se tratar de um variavel de tempo. então quando eu tentasse variar uma a outra também seria variada !! e isso nao pode ocorrer...

 

yoly.png

 

a alteração no codigo:

 #int_ext void zero_ISR()  {      clear_interrupt(INT_RB);       delay_us(brilho);      output_b(0b0000010);          #asm nop #endasm        output_b(0b0000000);         delay_us(brilho1);      output_b(0b0001000);      #asm nop #endasm      output_B(0b0000000);      }
Link para o comentário
Compartilhar em outros sites

Na época que postei este exemplo,eu ia adaptar par dois canais,mas sabe como é,sempre aparece algo mais interessante para fazer.

Para dois canais independentes,voce deve usar 2 Timers,um para cada canal...

Deixa eu ver se entendi, mesmo usando 2 timers ainda deverei usar a interrupção externa pra saber quando ocorreu a passagem por zero ou não?

 

Pois ainda não cosegui entender como usar a interrupção externa mesclada com os timers 0 e 1 por exemplo.

 

o que me ocorreu fio que eu posso variar o set_timer0(variavel) e com isso criar um canal de pwm, mas o timers irá funcionar independente da int_ext??

 

você teria um exemplo pra me ajudar??

 

 

Aproveitando Vtrx porque você usou o comando:

clear_interrupt(INT_RB); 

dentro do tratamento da int_ext ??

Link para o comentário
Compartilhar em outros sites

 

Deixa eu ver se entendi, mesmo usando 2 timers ainda deverei usar a interrupção externa pra saber quando ocorreu a passagem por zero ou não?

Isso não muda.

 

 

você teria um exemplo pra me ajudar??

Não espere por rapidez,pois enquanto posto aqui,estou terminando um programa em outra plataforma.

 

 

clear_interrupt(INT_RB); 

dentro do tratamento da int_ext ??

Eu limpo a flag o mais rápido que puder para não perder a próxima interrupção,pois estamos usando um circuito externo independente do PIC.

 

 

Pois ainda não cosegui entender como usar a interrupção externa mesclada com os timers 0 e 1 por exemplo.

 

+- assim,voce recebe a primeira interrupção e starta um timer que vai estourar num tempo entre a próxima interrupção,isso libera o programa para fazer o mesmo com outro canal e outro Timer.

Exemplo de um canal com TIMER;

1-deixe um timer não iniciado.

2-Após interrupção externa,da um Start num TIMER com valor calculado para estourar num tempo dentro da senoide ,para gerar HIGH no PORT e em seguida LOW e desabilita este TIMER.

3- O mesmo para o outro TIMER gerando saida a outro pino.

 

No vídeo eu uso um TIMER deste modo.

Link para o comentário
Compartilhar em outros sites

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!