Arduino Gerador Senoidal
Arduino Gerador Senoidal
Arduino Gerador Senoidal
Título
www.bairrospd.com
Data: 06/11/2016
2
Título
Sumário
Introdução. .................................................................................................................................... 3
O que é PWM? .......................................................................................................................... 6
O PWM no Arduino. ................................................................................................................ 11
O circuito para testar o gerador de senoides.............................................................................. 14
Como programar o Arduino. ....................................................................................................... 16
Conclusão. ................................................................................................................................... 25
3
Título
Introdução.
Você verá neste tutorial como gerar um senoides usando uma saída PWM do Arduino!
4
Título
A função analogWrite() fornece uma forma simples de simular uma saída analógica, na
verdade o Arduino gera um sinal do tipo PWM onde a largura do pulso é proporcional a
tensão.
5
Título
Você poderá usar este conceito para construir circuitos conversores, inversores, gerador de
sinais e muitas outras aplicações.
6
Título
O que é PWM?
PWM é acrônimo do inglês PULSE WIDTH MODULATION, modulação por largura de pulso.
O PWM é a forma mais simples de gerar um sinal analógico através de um circuito digital.
7
Título
O sinal do tipo PWM consiste em uma onda quadrada gerado por um circuito digital onde o
tempo de ligado e desligado podem ser diferentes.
A frequência “f” da onda quadrada é fixa no PWM, o que é a mesma coisa que dizer que o
período “T” da onda quadrada é constante!
8
Título
A tensão analógica será a média da onda quadrada (Vm), quando mais tempo ligado maior a
tensão analógica.
Vm é a tensão média.
Duty Cycle é o tempo de ligado em percentagem em relação ao tempo total.
Vcc tensão máxima da saída digital. No Arduino é 5Vcc.
10
Título
O PWM no Arduino.
O Arduino possui algumas portas digitais que podem ser usadas como saídas PWM, estas
portas estão marcadas com o sinal “ ~ ” na frente do número, como mostra a figura abaixo.
12
Título
Para usar uma porta com esta função, a porta deverá ser configurada como saída, e somente
as portas do tipo PWM podem ser usadas.
A frequência do PWM no Arduino é fixa, na maioria dos pinos é 490Hz, nos pinos 5 e 6 do
Arduino UNO é 980Hz.
O período para uma frequência de 490Hz é de 2 ms e o período para uma frequência de 980Hz
é de 1ms!
14
Título
Para você ver a senóide você precisa de um circuito de filtro passa baixa e um osciloscópio.
O filtro mais simples consiste de um resistor e um capacitor, neste caso a frequência de corte é
dada pela equação apresentada na figura abaixo, para os valores usados a frequência de corte
fica ao redor dos 48Hz.
15
Título
Você pode montar o circuito em uma protoboard e testar com um osciloscópio ou montar e
simular no site “circuits.io” caso você não tenha um osciloscópio!
https://circuits.io/
16
Título
O programa do Arduino consiste em usar uma das saídas PWM com Duty Cycle variável para
gerar uma função do seno de frequência igual a 60Hz.
O seu trabalho é determinar a relação Duty Cycle e valor do seno, você pode encontrar esta
relação montando uma tabela do Excel usando uma regra de três simples.
Cuidar ao montar o Excel pois o ângulo do seno deve ser especificado em PIRadianos!
18
Título
O valor máximo do Duty Cycle pode variar entre 0 e 255, o valor máximo do seno é 1 e o valor
mínimo é -1!
19
Título
Outro detalhe importante é que quando o seno for igual a -1 o valor do Duty Dycle deverá ser
10 (ou zero se você não usar a segurança), para que isto ocorra ao valor do seno foi somado
+1.
Eu preferi não usar os limites com segurança e montei a equação para um valor mínimo de 10
e um valor máximo de 250, assim, o valor do Duty Cycle será igual a 10 quando o seno for -1 e
quando o seno for +1 o Duty Cycle será 250! A equação e os valores são mostrados na figura
abaixo.
20
Título
A tabela do Excel pode ser usada para gerar os valores que serão usados no programa.
21
Título
O tempo mínimo para ajustar o Duty cycle é de 1ms, que o período da frequência 980 Hz da
saída 5.
O período de uma frequência de 60Hz é de 16,7 ms, assim um ciclo será dividido em 16 passos
com incremento de 22,5° a cada de 1ms, a cada passo o valor do Duty Cycle será ajustado em
função da tabela gerado no Excel.
22
Título
Eu não usei nenhuma instrução de loop porque isto acarretaria mais um tempo de
processamento, influenciando na forma de onda, então o programa ficou muito simples, como
é mostrado abaixo.
/**
*
* GERADOR DE SENO
* seno gerado a cada 1ms com 16 passos.
* a senoide será gerada na saida 3 valor máximo de 5V.
*
*
*
* 1 ciclo a 60Hz tem aproximadamente 16,667ms
* periodo de 16,667ms tempo de 1 ciclo completo 360°
* 360°/16=22,5° vamaos dividir a senoide em passos de 22,5°
* 16,667/16=1,042 ms vamos a cada 1 ms atualizar o valor da saida
* valor a ser atualizado é o seno do ângulo em passos de 22,5°
* A saida poderá variar de 10 a 250 em função do valor do seno(anguloPI)
* Os valoresa foi levantada no Excel conforme equação =10+(seno(ângulo)+1)*240/2
*
*/
int pin=5;//980 Hz 1ms
int T=1;// tempo para 2 ciclos
void setup() {
// put your setup code here, to run once:
pinMode(pin,OUTPUT);//saída 5 usada como PWM
}
void loop() {
// put your main code here, to run repeatedly:
analogWrite(pin, 10); delay(T);
analogWrite(pin, 19); delay(T);
analogWrite(pin, 45); delay(T);
analogWrite(pin, 84); delay(T);
analogWrite(pin, 130); delay(T);
analogWrite(pin, 176); delay(T);
analogWrite(pin, 215); delay(T);
analogWrite(pin, 241); delay(T);
analogWrite(pin, 250); delay(T);
analogWrite(pin, 241); delay(T);
analogWrite(pin, 215); delay(T);
analogWrite(pin, 176); delay(T);
analogWrite(pin, 130); delay(T);
analogWrite(pin, 84); delay(T);
analogWrite(pin, 45); delay(T);
analogWrite(pin, 19); delay(T);
}
23
Título
O resultado no osciloscópio.
Você pode notar o recorte devido a carga e descarga no capacitor do filtro, esta é a melhor
resolução usando o Arduino, para melhorar a resolução seria preciso aumentar o número de
passos com tempo entre os passos menor do que 1ms, para isto a frequência do PWM teria
que ser maior.
25
Título
Conclusão.
Você pode usar o PWM do Arduino para gerar uma forma de onda senoidal de forma simples
onde não precise grande precisão, como por exemplo, conversor DC-DC, inversores, mas não
em circuitos de áudio!
26
Título
SEO: