Como o Arduino Uno suporta até 12 servos se tiver apenas 6 pinos PWM digitais?

8

De acordo com isso :

A biblioteca Servo suporta até 12 motores na maioria das placas Arduino e 48 na Arduino Mega. Em placas diferentes da Mega, o uso da biblioteca desabilita a funcionalidade analogWrite () (PWM) nos pinos 9 e 10, independentemente de haver um Servo nesses pinos. No Mega, até 12 servos podem ser usados ​​sem interferir na funcionalidade do PWM; o uso de 12 a 23 motores desabilitará o PWM nos pinos 11 e 12.

No entanto, de acordo com isso :

Pinos de E / S digitais 14 (dos quais 6 fornecem saída PWM)

Então, como o Uno pode controlar mais de 6 servos se tiver apenas 6 pinos de E / S digitais que podem fornecer saída PWM?

user1265
fonte

Respostas:

4

Embora eu não tenha procurado a fonte pessoalmente, nesses tipos de situações, eles geralmente usam o timer de interrupção 1 , que no modo PWM estaria associado aos pinos 9 e 10. Isso explicaria por que você não pode usar a modulação de largura de pulso no esses alfinetes. De fato, você pode usar qualquer um dos três temporizadores para PWM em qualquer pino digital, embora não seja tão bom quanto as opções PWM integradas .


(fonte: bansky.net )

( Fonte )

A imagem acima descreve com precisão como os sinais são enviados ao servo motor. Essa forma de onda é semelhante a um PWM padrão. A biblioteca de servo pode converter um grau em uma forma de onda que o CI do servo poderá usar para ajustar a posição do motor com seu motor e potenciômetro.

Pinguim anônimo
fonte
11
Então, simula essencialmente o PWM? Qual é o sentido dos pinos digitais nos canais PWM?
usar o seguinte comando
@ user1265 Mais ou menos ... está usando os temporizadores que controlam o PWM. Quanto ao ponto de PWM, IIRC, o ATmega328 possui circuitos para tornar o PWM mais eficiente.
Anonymous Penguin
2
@ user1265, o hardware PWM é "gratuito", isto é, não afeta o desempenho do restante do seu programa (apenas liga um temporizador, ou pelo menos parte dele). A manutenção de rotinas de interrupção para o PWM emulado é relativamente cara. No entanto, neste caso, a frequência PWM é de apenas cerca de 50Hz, portanto, isso não é excessivamente trágico (a frequência PWM padrão do Arduino é de 31 / 62kHz, fazer PWM para, por exemplo, aplicações de iluminação a 50Hz provavelmente seria um pouco instável).
microtherion
What is the point of the digital pins with PWM channels then?- você pode obter frequências muito mais altas (até 8 MHz) e ciclos de trabalho muito precisos. Isso não é possível quando você conta com uma interrupção para fazer isso por você.
Nick Gammon