Ir ao conteúdo
  • Cadastre-se

Arduino Expansão de portas digitais do arduino que possuem função PWM


Ir à solução Resolvido por aphawk,

Posts recomendados

Boa tarde, estou a procura de uma solução para a expansão das portas do arduino com função de PWM (não sei se todas podem trabalhar dessa forma). Meu projeto tomou algumas dimensões que eu não imaginava, agora preciso dessa solução para controlar a velocidade dos motores individualmente e tambem a posição dos servos, vi que nem o arduino mega tem a quantidade que eu preciso. Para o controle das pontes h's utilisarei o CI 74HC595, para o controle da velocidade acredito que tenha que ser os pinos do arduino com essa função (PWM) ou eu posso mandar um pulso pwm selecionando um pino de um CI como o 74hc595. Como vocês resolvem essa questão de não ter portas pwm suficientes.

 

Obs: quero controlar a velocidade individualmente de cada roda pois pretendo usar o L298N para verificar quando uma das rodas esta trancada usando o pino de Sense deste ci, e através do código fazer as outras terem mais força para ajudar.

Link para o comentário
Compartilhar em outros sites

@Ezequiel Gnich ,

 

No hardware dos Arduinos normais tem 6 pinos com a função PWM, mas nada te impede de você fazer PWM por software em um montão de pinos !

 

A maneira mais simples é criar uma interrupção de um dos Timers, baseada na frequência que você pretende implementar o seu PWM, e usando um contador você vai comparando a contagem e mudando o estado dos pinos desejados, e quando a contagem atingir o valor máximo, zere todos os pinos ( e claro o contador também) e começe tudo de novo.

 

Para esse controle de motor de roda, a frequência pode ser relativamente baixa.

 

Paulo

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

  • Membro VIP

Que gênio Paulão! kk.. brinc.

 

Amigo ia concluir lá no outro post mas antes passei por aqui...

"pesquisar mais sobre pwm com 595, ver as implicações de se trabalhar com este CI."

Não há conexão direta entre pwm e 595 ok? A conexão está apenas na criatividade como te mostrei lá no post (que Paulão leu e fez um ctrl-c ctrl-v kk).

 

Link para o comentário
Compartilhar em outros sites

  • Solução

@Ezequiel Gnich ,

 

Veja se te ajuda :

 

Suponha que a frequência do PWM seja de 300 Hz. E suponha que você quer controlar a potência do motor em 100 niveis diferentes.

 

voce vai ter de gerar uma interrupção de um Timer cerca de 100 x 300 = 30.000 vezes por segundo !

 

Crie um contador para cada um dos motores que você quer controlar por PWM.

 

Na rotina de interrupção do Timer, incremente todos os contadores, compare para ver se chegou em 100, e depois compare o valor de cada contador com o valor desejado entre 0 e 99, e mude a saida equivalente quando a contagem for maior do que o valor. Quando a contagem chegar a 100, faça ela virar 0, e force todos os pinos ao estado inicial, e continue os testes.

 

É bem simples ok ?

 

Mas por favor não me peça para ajudar no código porque não sei programar em C e semelhantes ...

 

Paulo

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

  • Membro VIP

Boa Paulão... só me empurrando encrenca hein!!

Estranho que na minha concepção artística da coisa, a interrupt pode ser de 300Hz mesmo. Mesmo pra vários canais... não sei se quero refletir sobre isso numa sexta super... E pelo mesmo motivo acho que você nem quer explicar ...

Link para o comentário
Compartilhar em outros sites

@aphawk obrigado por mais esse esclarecimento (e mais dúvidas 😂😂), não me parece complicado aplicar esse conceuto, o problrma como sempre é o tempo que eu não disponho... 😂😂 assim que eu conseguir fazer algumas simulações posso deixar um feedback se eu obtive exito nesta empreitada... Obrigado novamente.

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

@Isadora Ferraz normalmente os post geram mais dúvidas do que soluções mas quando paramos para respirar e ler novamente as coisas clareiam. Seu post la ajudou muito, linguagem C não é muito complicada hahaha... Esse final de semana vou tentar montar o circuito com todas as pontes h's e os 595... E simular para ver como se comporta. Vi que é possível compilar o codigo arduino dentro do proteus, irei fazer isso para ver o funcionamento.  

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

  • Membro VIP
22 minutos atrás, Ezequiel Gnich disse:

normalmente os post geram mais dúvidas do que soluções

Os meus?!! Sem dúvida! ... ?!?! dupla interpretação kk

 

23 minutos atrás, Ezequiel Gnich disse:

linguagem C não é muito complicada

Se eu fosse você faria em basic!! (pega de volta Paulão kk)

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

23 horas atrás, Isadora Ferraz disse:

Boa Paulão... só me empurrando encrenca hein!!

Estranho que na minha concepção artística da coisa, a interrupt pode ser de 300Hz mesmo. Mesmo pra vários canais... não sei se quero refletir sobre isso numa sexta super... E pelo mesmo motivo acho que você nem quer explicar ...

Opa ... que isso, eu tenho o maior prazer em explicar , afinal a propagação está fechada e o rádio-amadorismo está quase impraticável no momento....

 

Motores para modelismo não gostam de trabalhar com frequências tão baixas, eles acabam fazendo oscilações de torque que são sentidas no equipamento. Isto causa perturbação nos outros sensores, como acelerômetros, estão para evitar isto o pessoal usa frequências bem mais altas.

 

Esse é o motivo, é de ordem prática, não teórica. Então eu já indico uma frequência bem maior onde não tem nenhum efeito visível.

 

Na teoria, pode-se perfeitamente fazer até mesmo em frequência bem menor, como 50 hertz, só que o efeito da oscilação fica bem mais visível.

 

Ah, deixa de reclamar, tá pareçendo aquela tua irmã, a Amélia, que mesmo sendo considerada a eterna "mulher de verdade" reclamava de tudo, era ranzinza e virou velha coroca !

 

 

 

adicionado 17 minutos depois
21 horas atrás, Isadora Ferraz disse:

Se eu fosse você faria em basic!! (pega de volta Paulão kk)

 

Nossa, demorou mais de 10 anos, mas finalmente você está reconheçendo a praticidade do velho BASCOM ?????

 

Eis a prova de que nem tudo piora com a idade 😆 !

 

 

adicionado 21 minutos depois

@Ezequiel Gnich ,

 

Sempre existem mais maneiras de se resolver um problema.

O mais indicado é saber exatamente tudo o que vai precisar ser feito, para só então escolher uma solução !

 

Muitas vezes eu me apressei e fiz a primeira solução que me veio na cabeça, e láááááá'na frente tive de recomeçar tudo de novo porque a minha primeira solução me criou problemas demais em outras áreas do projeto !

 

Paulo

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Não sinto muito a vontade em responder tópico resolvido mas vejamos...

 

ok Paulão. O que não consegui conectar direito foi os 30Khz de interrupt com os 300Hz pra varios canais. Por um breve momento achei que sua sugestão de frequencia alta tinha a ver com multicanais. Mas se tudo se encaixa bem sobre seu aeromodelismo, de boa.

 

Vejo o lado do mc, quanto menos ele for interrompido, melhor, senão não sobra tempo pra ele. Mas isso é claro pra mc de pobre (meu companheiro). Pros de centenas de MHz e afins, talvez nem tanto.

 

Sobre Basic... foi meu primeiro contato com programação laaaaa em meados de segunda metade do último século do milênio passado. De fato nem sabia que existia o tal bascom até você aparecer na minha vida kk. E sim de fato a idade nos faz evoluir um pouco 'as ideia'. Dentre elas, a arte de empurrar serviço (e culpa) pra estagiário kk...(o que definitivamente não é seu caso amigo) e ficar com os créditos kk

(aqui deu certo kk)

abç

 

Link para o comentário
Compartilhar em outros sites

Em ‎19‎/‎01‎/‎2019 às 21:19, Isadora Ferraz disse:

Não sinto muito a vontade em responder tópico resolvido mas vejamos...

 

ok Paulão. O que não consegui conectar direito foi os 30Khz de interrupt com os 300Hz pra varios canais. Por um breve momento achei que sua sugestão de frequencia alta tinha a ver com multicanais. Mas se tudo se encaixa bem sobre seu aeromodelismo, de boa.

 

Vejo o lado do mc, quanto menos ele for interrompido, melhor, senão não sobra tempo pra ele. Mas isso é claro pra mc de pobre (meu companheiro). Pros de centenas de MHz e afins, talvez nem tanto.

 

Sobre Basic... foi meu primeiro contato com programação laaaaa em meados de segunda metade do último século do milênio passado. De fato nem sabia que existia o tal bascom até você aparecer na minha vida kk. E sim de fato a idade nos faz evoluir um pouco 'as ideia'. Dentre elas, a arte de empurrar serviço (e culpa) pra estagiário kk...(o que definitivamente não é seu caso amigo) e ficar com os créditos kk

(aqui deu certo kk)

abç

 

 

Para fazer o pwm por software eu fiz um em ASM mesmo, pois trata-se apenas de incrementar vários contadores e comparar a contagem, alterava bits em um registrador e ao final gravava esse registrador na saída, então fazia um em 8 saídas simultâneas a um custo de processamento muito baixo. Mesmo para um simples Atmega rodando a 1 Mhz, a perda é bem pequena.

 

Realmente não tem nada a ver com a quantidade de saídas, a minha sugestão de frequência é apenas para não ter oscilações no motor.

 

Quanto ao BASCOM, eu também não sabia que ele existia até 2009, quando o saudoso SOSCHIP me deu a dica, até essa época eu programava os Pics em Basic, mas era um Basic que tinha bastante limitações. O BASCOM me deu muitas novas idéias, e claro, um bom dinheiro ganhei com ele também, até comprei o Proteus oficial !!!! E sinceramente, tenho dois projetos funcionando em minha estação de rádio que são um ótimo produto para vender no mundo todo, só preciso fazer a PCB pois ambos os projetos estão em "aranha"  com placas universais furadinhas, bolar uma caixa legal, achar botões bacanas, e produzir em série.... tem bastante gente me enchendo para fazer isso, quem sabe eu me anime ....

 

É ... na nossa idade temos mesmo de otimizar o NOSSO tempo, concordo com tudo o que você escreveu !

Ultimamente estou otimizando o meu tempo para diversão apenas kkkkk

 

Paulo

 

 

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

Ola boa tarde, sei que já dei como resolvido esse topico, mas ontem estava fazendo o circuito no proteus, e usando os 595 para poder mandar os pulsos pwm's para os motores, mas não consegui, o motor dc 12V da simulação acelera até chegar no máximo e não reconhece os pulsos, quando eu baixo o duty cicle ele acelera devagar até chegar no máximo novamente, ai me surgiu a pergunta se realmente é possivel usar o 595 para mandar os pulsos de forma separada para cada motor através de cada pino deste CI. E em contra partida encontrei este outro CI especifico de pwm (TLC5940), o que vocês acham deste problema e deste outro ci?

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

  • Membro VIP

Motor dc e pwm na simulação nunca usei. Tenta colocar um filtro rc, aumenta a resistencia dele pra beeem alta e ve que merdadá. Mas se o sinal pwm visto com o osc estiver ok, então tá bão uai.

 

Dei uma olhadela no d.s. do ci.... xatinho de programar e entender além de provavelmente ser mais caro. Se tiver tempo, neuronios e dinheiro pra ele... passa vontade não.

 

Paulão tmj kk

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

@Ezequiel Gnich ,

 

Esse TLC é um saco de programar ... 

 

Eu no seu lugar, no Proteus, em vez do motor usaria um simples circuito RC calculado para integrar os pulsos de seu PWM. Assim, bastaria colocar um voltímetro DC em cima de cada capacitor, pois pode-se deduzir uma boa proporcionalidade entre a tensão sobre o capacitor e a velocidade do rotor.

 

Isso de usar os 595 para controlar o pulso PWM .... que tal colocar o osciloscópio do Proteus e analisar a temporização e ver se isso realmente se parece com um PWM ?

 

Eu te dei a solução via software, tudo feito dentro da interrupt do Timer , mas se pretende usar outros hardwares, mande bala e seja (in)feliz kkkkk !

 

Paulo

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

@Isadora Ferraz me pareceu bem chato também o funcionamento do 595 parece mais simples, eu realmente não sabia que não funcionava direito a simulação com motores dc no proteus, pois realmente em determinada altura eu tinha os pulsos no osciloscópio do proteus, mas nos motores como mencionei eles começavam devagar e aceleravam até seu limite. @aphawk mais uma vocês dois me dando algumas lanternas para seguir até o final desse túnel escuro que é a eletrônica... Hahahaha. Realmente você me deu a solução via software mas antes de programar eu estava criando o circuito e fazendo testes com o logicprobe e o gerador de pulsos do proteus. Eu vou tentar não ser infeliz e ir pelo menos difícil, acredito que o 595 vai me atender, e realmente vou pesquisar sobre circuito RC e fazer os testes novamente. (Vou dar como resolvido este tópico novamente, acredeço pela disponibilidade em responder de vocês dois).

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

3 horas atrás, Isadora Ferraz disse:

Paulão você me superou na arte de ficar com os créditos kk. Antes de você dei até o fonte pro garoto e ele diz que você lhe deu a solução ... Brunão ... apague também mas aguarde reação do Paulão preu ver que ele leu kk

 

Po ... desse jeito melhor eu nao postar mais nada .... tudo que eu escrevo dizem que foi copiado !!!!!!!

 

Acho que isso é problema da idade avançada , só pode ser kkkkk 

 

Paulo

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

20 horas atrás, Isadora Ferraz disse:

Motor dc e pwm na simulação nunca usei. Tenta colocar um filtro rc, aumenta a resistencia dele pra beeem alta e ve que merdadá. Mas se o sinal pwm visto com o osc estiver ok, então tá bão uai.

 

Dei uma olhadela no d.s. do ci.... xatinho de programar e entender além de provavelmente ser mais caro. Se tiver tempo, neuronios e dinheiro pra ele... passa vontade não.

 

Paulão tmj kk

@Isadora Ferraz realmente eu fiz o teste criei o circuito rc coloquei na saida do motor1 liguei o osciloscópio do proteus e obtive a onda quadrada perfeita na simulação. Valeu pela dica me ajudou muito. O que eu não entendi bem foi a questão dos 300hz que o @aphawk citou, eu setei os 300hz no gerador de pulso, mas não entendi o que ele interfere na onda, poderiam me dar uma breve explicação, ou algum link para eu poder ler e tentar entender?

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
3 horas atrás, aphawk disse:

Acho que isso é problema da idade avançada ,

é coisa de gente velha e solitária kk... aconteceu de novo ... dentro de minhas limitações dei a explicação que ele queria, o carinha nem me deu bola e quem levou o coraçãozinho foi o moris 😡 kk.. mas faz part ... e sim ... sensibilidade à flor da pele kk

 

24 minutos atrás, Ezequiel Gnich disse:

a questão dos 300hz

Freq nais alta você consegue algo como menor interferência eletromecânica na saída analógica (não necessariamente tensão) do sistema. P.ex. se você tiver um inversor de freq (e ouvidos bons), talvez seja até capaz de ouvir um piiiii bem baixinho no motor. Se ele for de freq alta, nem tanto.

Na onda, algo como você pode usar um filtro RLC de menores valores e com menores perdas.

Pra entender o que ele interfere na onda, basta testar com várias frequencias.

Ah... você vai dar bola só pro Paulão mesmo.. ele que te explique kk

E se for publicar o fonte, só faça se for em ... bascom kk. E nem to pedindo pra você publicar seu circuito... vai que publica e me complica kk

 

abç

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