boa noite, amigos do forum, tenho pouca experiencia com arduino, porem preciso montar um skecth simples que geraria 3 pulsos de pwm nos pinos 11, 12, 13. Agora vem a duvida com o comando delaymicrosegunds, quando eu coloco esse comando no píno 11, o arduino esta executando a função dos pinos 12 e 13, ou esse comando delaymicrosegunds, parou todo o processo, fazendo com que eu não tenha o pulso e frequencia correta nas saidas, quem puder tirar essas duvidas ou dar sugestões, muito obrigado. até mais.

void setup()
{
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
}

void loop() 
{
digitalWrite(13, HIGH);
delayMicroseconds(800); // frequencia 6.67 hz 
digitalWrite(13, LOW);
delayMicroseconds(149125);
digitalWrite(12, HIGH);
delayMicroseconds(320); // frequencia 66.67 hz
digitalWrite(12, LOW);
delayMicroseconds(14679);
digitalWrite(11, HIGH);
delayMicroseconds(1000); // frequencia 16.7 hz 
digitalWrite(11, LOW);
delayMicroseconds(58880);
}

Exibições: 832

Responder esta

Respostas a este tópico

delay() para tudo.

Só pra adiantar, não precisas controlar frequência  na função de PWM da libcore do Arduino, mas tem como:

http://arduino.cc/en/Reference/AnalogWrite

http://arduino.cc/en/Tutorial/PWM

http://arduino.cc/en/Tutorial/SecretsOfArduinoPWM

http://playground.arduino.cc/Code/PwmFrequency

Qual o objetivo do uso do PWM?

boa noite, Jonatas eu preciso controlar a frequencia e a largura do pulso pra testar bicos injetores de carros, por isso precisaria desse pulso, obrigado.

Certo! Andei estudando a montagem de uma ECU similar a MS usando Atmega(Arduino). Tenho alguma coisa de PWM aqui. Mas ja te informo que não é desta maneira q estás fazendo, não.

Se você puder me dar alguma dica eu agradeço, não conheço outra maneira até agora.

Essa é uma 

\/

\/

\/

Um jeito meio porco, mas que funcionaria seria fazer sem recursos especiais, já que as frequencias que vc precisa são super baixas...

Se vc fizer algo como a listagem a seguir, ou melhor ainda se colocar esse trecho do while (sem ele) numa interrupção de timer a uns 10Khz vai ficar bem legal.

Nela FIM1 determina a frequencia e TPWM1 determina o duty, que vai de 0 a FIM1.

Se vc ler esses valores de ADs dá pra por potenciometros de ajuste. Só cuidado que TPWMn nuca pode ser maior que FIMn. Melhor fazer uma conta... Ler um pot em % e fazer uma regra de tres pra chegar no valor pra por em TPWM1.

Usei C de contador, T de toggle e Fim de fim...

int CPWM1,CPWM2,CPWM3,FIM1,FIM2,FIM3,TPWM1,TPWM2,TPWM3;

CPWM1=CPWM2=CPWM3=0;
FIM1=1000;
FIM2=3000;
FIM3=5000;
TPWM1=400;
TPWM2=600;
TPWM3=1400;

while(1) {

if (CPWM1==TPWM1) digitalWrite(11, HIGH);
if (CPWM2==TPWM2) digitalWrite(12, HIGH);
if (CPWM3==TPWM3) digitalWrite(13, HIGH);
if (CPWM1==FIM1) { digitalWrite(11, LOW); CPWM1=0; }
if (CPWM2==FIM2) { digitalWrite(12, LOW); CPWM2=0; }
if (CPWM3==FIM3) { digitalWrite(13, LOW); CPWM3=0; }

CPWM1++;
CPWM2++;
CPWM3++;
delayMicroseconds(1);
}

Fica melhor se vc criar matrizes e indexar...

Eduardo agradeço a sua resposta, porem, não tenho experiencia e conhecimento para entender esse skecth, ainda assim muito obrigado.

Testa colocar isso:

Só não sei que frequencia vai dar, vc teria que calibrar os numeros. Mais fácil que fazer as contas seria medir com um multimetro que tenha frequencimetro.

int CPWM1,CPWM2,CPWM3,FIM1,FIM2,FIM3,TPWM1,TPWM2,TPWM3;

void setup()
{

CPWM1=CPWM2=CPWM3=0;

FIM1=1000;
FIM2=3000;
FIM3=5000;
TPWM1=400;
TPWM2=600;
TPWM3=1400;

pinMode(13, OUTPUT);

pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
}

void loop() 
{

if (CPWM1==TPWM1) digitalWrite(11, HIGH);

if (CPWM2==TPWM2) digitalWrite(12, HIGH);
if (CPWM3==TPWM3) digitalWrite(13, HIGH);
if (CPWM1==FIM1) { digitalWrite(11, LOW); CPWM1=0; }
if (CPWM2==FIM2) { digitalWrite(12, LOW); CPWM2=0; }
if (CPWM3==FIM3) { digitalWrite(13, LOW); CPWM3=0; }

CPWM1++;
CPWM2++;
CPWM3++;
delayMicroseconds(1);
}

Eduardo estava tentando entender e me parece que FIM é o tempo que o pino permanece ligado e TPWM é o tempo que ele permanece desligado, é isso?

Quase isso..

O FIM eh o tempo total. Somando alto e baixo, determina a frequencia.

O TPWM Determina o momento em que vai pra 1, ou seja, variando ele de 0 a FIM ele determina a quantidade de tempo em 0. O resto do tempo ate chegar a FIM fica em 1.

Eduardo, valeu pela dica, calculei os tempos e vou tentar usar, por enquanto muito obrigado.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço