PWM: Pulse Width Modulation... Zo maakt de Arduino een regelbare "gelijkspanning".
Uitleg
De digitale pinnen van je Arduino kennen maar twee waarden: 0 volt en 5 volt, maar niets daartusen in. De analoge pinnen kunnen alleen maar gebruikt worden voor invoer. Om toch een regelbare uitvoer te kunnen krijgen past de Arduino een truc toe: de digitale pinnen worden snel afwisselend op 0 volt en op 5 volt gezet. Veel apparaten kunnen dat zo snel niet volgen, en gebruiken in feite de gemiddelde waarde van de spanning. Als de uitgang even lang laag als hoog is, dan is de gemiddelde spanning ongeveer 2,5 volt. Als de uitgang korte tijd op 5 volt staat en lang op 0 volt, dan krijg je gemiddeld een lage spanning, als het andersom is dan krijg je gemiddels een hoge spanning.
Je kunt helaas niet alle pinnen hiervoor gebruiken. Welke pinnen het zijn hangt van het type Arduino af. Ook zijn er verschillen tussen de pinnen: sommige gebruiken een hogere frequentie dan andere. De frequentie is meestal niet van belang. Als je toch een andere frequentie nodig hebt dan kun je de frequentie van e pinnen nog veranderen. Als je een pin wilt gebruiken die niet geschikt is dan kun je zelf eenvoudig je PWM programmeren.
Maak je eigen PWM
Het is heel simpel om zelf je PWM te regelen. Hieronder zie je een voorbeeld hoe dat moet. Sluit een ledje samen met een weersdtand van 150 á 300 Ω tussen poort 3 en GRD. Ik heb dit getest met de Pro Mini en het werkt als een zonnetje. Het licht van de led neemt langzaam toe en dan weer af. Dit kan natuurlijk alleen maar als de Arduino tijdens deze actie geen andere taken heeft.
void setup() {
pinMode(3, OUTPUT);
}
void loop() { // Maak zelf je analoge uitvoer...
for (int i = 0; i <= 255; i++) {
digitalWrite(3, HIGH); delayMicroseconds(10 * i);
digitalWrite(3, LOW); delayMicroseconds(2550 - 10 * i);
}
for (int i = 255; i >= 0; i--) {
digitalWrite(3, HIGH); delayMicroseconds(10 * i);
digitalWrite(3, LOW); delayMicroseconds(2550 - 10 * i);
}
}
De PWM frequentie veranderen
Het is mogelijk de PWM frequentie te veranderen, maar voorlopig raad ik dit af.
Voor de Arduino Uno pinnen 3, 9 en 10 geldt dat basisfrequentie 31250 Hz is. Voor pin 5 en 6 is dat 62500 Hz. Door deze frequenties door een geheel getal te delen krijg je de feitelijke frequentie. Die deelfactor kun je in principe zelf kiezen. Maar... hier zitten nogal wat haken en ogen aan! Zo kun je pin 6 beter laten zoals hij is omdat bepaalde tijdfuncties die hiervan afhankelijk zijn. Ook kunnen sommige pinnen niet onafhankelijk van elkaar worden veranderd.
Alternatieven voor PWM
Als je een goede analoge spanning nodig hebt dan is het beter daarvoor een DAC (Digital to Analog Converter) te kopen. Ze zijn niet duur en werken als een zonnetje. Later komt hier een link naar mijn pagina hierover