collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

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