collapse

* Posts Recentes

Proteções gerais de um circuito por Njay
[Ontem às 23:44]


Como calcular bobina por luisjustin
[Ontem às 18:11]


Substituir um 78xx por um switching regulator ? por vasco
[Ontem às 13:50]


BostonDynamics - Vai uma mãozinha? por TigPT
[Ontem às 12:57]


leitura de voltagens com o analogRead(A0) por Njay
[15 de Outubro de 2018, 15:29]


Kit Completo Robô Inmoov 299€ por aldricnegrier
[15 de Outubro de 2018, 13:39]


PCB de passadeira por vasco
[13 de Outubro de 2018, 16:00]


Proteção contra reverse voltage por Njay
[12 de Outubro de 2018, 10:04]


Bus I2c necessita de pullups ? por vasco
[11 de Outubro de 2018, 18:15]


Circuito básico do 7805 por jm_araujo
[09 de Outubro de 2018, 10:33]

Autor Tópico: Será que isto dá para fazer???  (Lida 1792 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline Tiobel

  • Mini Robot
  • *
  • Mensagens: 27
Será que isto dá para fazer???
« em: 24 de Abril de 2013, 19:03 »
Tenho um duvida que gostava de tirar aqui com o pessoal do avr, que é o seguinte, se eu tiver o seguinte código:

Código: [Seleccione]
void loop(){

analogWrite(pwm_pin, 128);


switch(var){

case 1: {

faz qualquer coisa....
}

case 2:{
faz outra coisa...
}
.
.
.
}

Quero que a variável do switch case mude sempre que o PWM esteja HIGH, ou seja quero correr o switch a mesma velocidade do PWM.
Isto é possível? Já pesquisei muita coisa mas não encontrei nada semelhante ao que necessito...
Desde já agradeço a ajuda.

Cumprimentos,
Hugo Gomes

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.367
    • Tróniquices
Re: Será que isto dá para fazer???
« Responder #1 em: 24 de Abril de 2013, 19:35 »
O que queres fazer é muito "irregular", o que em geral quer dizer que há formas mais simples... antes de ir para isso, o que é que queres fazer realmente?

Offline Tiobel

  • Mini Robot
  • *
  • Mensagens: 27
Re: Será que isto dá para fazer???
« Responder #2 em: 24 de Abril de 2013, 20:05 »
Quero controlar a velocidade de um motor de 3 fases através de um IC com 6 IGBT's.

Ou seja necessito de fazer as combinações da bobines mas pretendo varia a velocidade. A minha ideia era correr apenas um PWM e assim que o valor fosse zero o ciclo parava e quando fosse HIGH passava para a  próximo conjunto de bobines.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.562
  • Helpdesk do sitio
Re: Será que isto dá para fazer???
« Responder #3 em: 24 de Abril de 2013, 21:07 »
Usa um IC dedicado a isso, como por exemplo o AT90PWM316, e a Atmel tambem tem app-notes para isso.
Mas se realmente queres fazer isso, usa interrupções..
Avr fanboy

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.367
    • Tróniquices
Re: Será que isto dá para fazer???
« Responder #4 em: 24 de Abril de 2013, 21:25 »
Para o PWM usas 3 canais de PWM (o arduino tem). Para a comutação armas uns timers, por exemplo com interrupções, mas se a precisão na velocidade não for critica podes usar programação preemptiva e fazer tudo no ciclo principal da loop().

Offline Tiobel

  • Mini Robot
  • *
  • Mensagens: 27
Re: Será que isto dá para fazer???
« Responder #5 em: 24 de Abril de 2013, 21:54 »
Obrigado pelas respostas :)

OK, vou ver se consigo fazer com as interrupções.

NJay,

Como é que eu implemento programação preemptiva no loop???
Desculpa lá mas ainda sou muito novo nisto :) 

Cumprimentos,
Hugo Gomes

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.562
  • Helpdesk do sitio
Re: Será que isto dá para fazer???
« Responder #6 em: 24 de Abril de 2013, 23:26 »
Para o PWM usas 3 canais de PWM (o arduino tem). Para a comutação armas uns timers, por exemplo com interrupções, mas se a precisão na velocidade não for critica podes usar programação preemptiva e fazer tudo no ciclo principal da loop().

E como é que sincronizas os timers, por acaso, tinha ideia que não dava para fazer, e depois ainda precisas de andar a gerar o dead time á unha.
Avr fanboy

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.367
    • Tróniquices
Re: Será que isto dá para fazer???
« Responder #7 em: 25 de Abril de 2013, 01:42 »
Não precisas de sincronizar os timers, só tens que activar cada um dos canais para fazer PWM numa das fases de cada vez, se é que tou a ver bem como é que se controla um motor desses. Se quiseres fazer rectificação sincrona os AVR em geral têm canais simétricos de PWM (o directo e o "negado") e implementam um dead time fixo (em alguns chips o dead time é configurável mas penso que não é o caso do ATmega328P).

A cena do preemptiva tens aqui estes artigos, o 2º só tenho em Inglês:

http://troniquices.wordpress.com/2010/05/24/arduino-a-fazer-varias-coisas-ao-mesmo-tempo/
http://embeddeddreams.com/site/2011/07/23/more-on-doing-several-things-at-the-same-time