collapse

* Links de Robótica

* Posts Recentes

Feira de electricidade e eletrónica por artur36
[Ontem às 23:07]


Power_OK Enermax por almamater
[Ontem às 12:10]


Recomendação de um opamp para um DAC r2r por jm_araujo
[23 de Novembro de 2017, 10:48]


RN42 e TP-Link MR3020 por doiga
[22 de Novembro de 2017, 19:22]


Ajuda Projecto IR / RF por senso
[22 de Novembro de 2017, 13:15]


Ideias para construir um quadrúpede simples por dropes
[21 de Novembro de 2017, 22:43]


Ajuda com TRIAC por senso
[17 de Novembro de 2017, 18:00]


TV LG White Screen por almamater
[15 de Novembro de 2017, 08:37]


Pergunta sobre prototipagem ( Pesquisa ) por luisjustin
[14 de Novembro de 2017, 23:22]


Medir Agua que está no Poço por Njay
[14 de Novembro de 2017, 13:28]

Autor Tópico: Será que isto dá para fazer???  (Lida 1657 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.141
    • 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.402
  • 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.141
    • 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.402
  • 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.141
    • 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