Stap 1: Pulse Width Modulation
- Amplitude - het bedrag het signaal verandert tussen aan en uit de Staten
- Frequentie - het aantal keren dat het signaal in een bepaald tijdsbestek wordt
- Duty Cycle - het aandeel van op tijd op Off tijd meestal uitgedrukt als een percentage
In deze digitale systemen is de amplitude vast tussen 0 en 1, tussen de 0V en VCC. In mijn testen die dit was + 5V.
Daarin is eenvoudigste vorm die een blokgolf PWM kan worden gemaakt met een paar regels code. De volgende code zou produceren een signaal met een 1 seconde, frequentie en een taakcyclus van 10%. Dit zou functionele maar de Arduino zou worden gewijd aan het produceren van dit signaal de hele tijd en zou niet iets anders. Dit is de reden waarom het knipperen zonder uitstel voorbeeld is dus belangrijk om te leren.
digitalWrite (IOPin, hoge);
delayMicroseconds(100);
digitalWrite (IOPin, laag);
delayMicroseconds(900);
Met een software gegenereerd-signaal variatie in de tijd van de uitvoering van de code kan leiden tot variaties in de uitvoer. Voorwaardelijke instructies kunnen niet worden uitgevoerd op elke lus dus het is moeilijk om te garanderen dat elke lus precies dezelfde hoeveelheid tijd duurt. Moderne microcontrollers hebben speciale hardware modules voor het genereren van een code onafhankelijke blokgolf. Waarden voor de taakcyclus en frequentie zijn geschreven aan registers binnen de controller en de hardware genereert het juiste signaal op het gewenste output-pin.
De registers voor de Hardware PWM-module kunnen worden geschreven om rechtstreeks als hier beschreven, maar de vreugde van de Arduino omgeving is dat iemand waarschijnlijk te hebben geschreven een bibliotheek om dat proces te vereenvoudigen. De TimerOne bibliotheek biedt controle over de HardwarePWM module aangesloten op timer 1 (treffend). Deze bibliotheek heeft eenvoudige functies voor het instellen van de frequentie en de plicht cyclus van de blokgolf wordt gegenereerd
- pwm (duty, pin, periode) - genereert een PWM-waveform op de opgegeven pin.
De minimale freqeuncy ondersteund door de bibliotheek is 1ms en de maximumwaarde is 8.3s. De taak is opgegeven als een waarde van 10 bit, tussen 0 en 1023, en dit correleert met de waarden van 0% en 100% respectievelijk.