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);
}
Tags:
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
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por