Usando
o PWM dos pinos de arduino, podemos modular o duty cicle de um sinal
de saída, mas, para algumas aplicações, também se torna
necessária a mudança da frequência do sinal de saída (e.g.
acionamento de um motor com uma frequência inaudível).
Para isso, precisamos mudar alguns parâmetros dos timers para conseguir mudar o valor da frequência de saída da porta desejada. No arduino Leonardo, temos as seguintes linhas de código e as frequências obtidas para cada pino com saída PWM.
Timer Configurado | Código de programação | Pino 13 | Pino 11 | Pino 10 | Pino 9 | Pino 6 | Pino 5 | Pino 3 |
Default | - | 490 Hz | 980 Hz | 490 Hz | 490 Hz | 490 Hz | 490 Hz | 980 Hz |
Timer 0 | TCCR0B = TCCR0B & 0xF8 | 0x01 | 490 Hz | 625000 Hz | 490 Hz | 490 Hz | 490 Hz | 490 Hz | 62500 Hz |
Timer 1 | TCCR1B = TCCR1B & 0xF8 | 0x01 | 490 Hz | 980 Hz | 31400 Hz | 31400 Hz | 490 Hz | 490 Hz | 980 Hz |
Timer 3 | TCCR3B = TCCR3B & 0xF8 | 0x01 | 490 Hz | 980 Hz | 490 Hz | 490 Hz | 490 Hz | 31300 Hz | 980 Hz |
Timer 4 | TCCR4B = TCCR4B & 0xF8 | 0x01 | 31400 Hz | 980 Hz | 490 Hz | 490 Hz | 31400 Hz | 490 Hz | 980 Hz |
Com isso conseguimos verificar qual timer é responsável pela frequência de cada pino.
Podemos conseguir outros valores de frequência para cada pino alterando a parte final do código para cada timer (e.g. TCCRXB = TCCRXB & 0xF8 | 0x0N, onde X é o número do respectivo timer e N é o valor de divisão do prescaler do respectivo timer).
Valores 0x0N | Pinos 5, 6, 9, 10 e 13 | Pinos 3 e 11 |
0x01 | 31400 Hz | 62500 Hz |
0x02 | 15600 Hz | 7810 Hz |
0x03 | 7810 Hz | 980 Hz |
0x04 | 3910 Hz | 245 Hz |
0x05 | 1950 Hz | 61,3 Hz |
0x06 | 980 Hz | 1,91 Hz |
0x07 | 490 Hz | 1,92 Hz |
0x08 | 245 Hz | - |
0x09 | 123 Hz | - |
0x0A | 61,7 Hz | - |
0x0B | 30,5 Hz | - |
0x0C | 15,3 Hz | - |
0x0D | 7,63 Hz | - |
0x0E | 3,81 Hz | - |
0x0F | 1,92 Hz | - |
Lembrando que os pinos citados são todos em relação ao arduino Leonardo, outros arduinos podem ter tabelas diferentes.
Nenhum comentário:
Postar um comentário