- Wat is een PWM-signaal?
- Hoe PWM-signaal naar analoge spanning te converteren?
- Schakelschema:
- Programmering van de MSP voor PWM-signaal:
- Helderheid van LED regelen met PWM:
Deze tutorial maakt deel uit van een serie MSP430G2 LaunchPad-tutorials waarin we leren de MSP430G2 LaunchPad van Texas Instruments te gebruiken. Tot dusver hebben we de basisprincipes van het bord geleerd en hebben we het gehad over het lezen van analoge spanning, interface-LCD met MSP430G2 enz. Nu gaan we verder met de volgende stap van het leren over PWM in MSP430G2. We doen dat door de helderheid van een LED te regelen door de potentiometer te variëren. Dus de potentiometer zal worden bevestigd aan een analoge pin van de MSP430 om de analoge spanning te lezen, daarom is het aan te raden om de ADC-tutorial te doorlopen voordat je verder gaat.
Wat is een PWM-signaal?
Pulsbreedtemodulatie (PWM) is een digitaal signaal dat het meest wordt gebruikt in regelcircuits. Dit signaal wordt hoog (3.3v) en laag (0v) ingesteld in een vooraf gedefinieerde tijd en snelheid. De tijd dat het signaal hoog blijft, wordt de "aan-tijd" genoemd en de tijd dat het signaal laag blijft, wordt de "uit-tijd" genoemd. Er zijn twee belangrijke parameters voor een PWM, zoals hieronder besproken:
Inschakelduur van de PWM:
Het percentage van de tijd waarin het PWM-signaal HOOG (op tijd) blijft, wordt de duty-cycle genoemd. Als het signaal altijd AAN is, is het in 100% inschakelduur en als het altijd uit is, is het 0% inschakelduur.
Duty Cycle = Inschakeltijd / (Inschakeltijd + Uitschakeltijd)
Frequentie van een PWM:
De frequentie van een PWM-signaal bepaalt hoe snel een PWM een periode voltooit. Eén periode is volledig AAN en UIT van een PWM-signaal zoals weergegeven in de bovenstaande afbeelding. In onze tutorial is de frequentie 500Hz, aangezien dit de standaardwaarde is die is ingesteld door de Energia IDE.
Er is een overvloed aan toepassingen voor PWM-signalen in realtime, maar om u een idee te geven, kan het PWM-signaal worden gebruikt om servomotoren aan te sturen en kan het ook worden omgezet in analoge spanning die de helderheid van de helderheid van een LED kan regelen. Laten we een beetje leren over hoe dat kan worden gedaan.
Hier zijn enkele PWM-voorbeelden met andere microcontrollers:
- PWM genereren met behulp van PIC Microcontroller met MPLAB en XC8
- Servomotorbesturing met Raspberry Pi
- Arduino-gebaseerde LED-dimmer met PWM
Bekijk hier alle PWM-gerelateerde projecten.
Hoe PWM-signaal naar analoge spanning te converteren?
Voor PWM-signalen naar analoge spanning kunnen we een circuit gebruiken dat RC-filter wordt genoemd. Dit is een eenvoudige en meest gebruikte schakeling voor dit doel. Het circuit bevat alleen een weerstand en een condensator in serie, zoals weergegeven in het onderstaande circuit.
Dus wat hier in feite gebeurt, is dat wanneer het PWM-signaal hoog is, de condensator wordt opgeladen via de weerstand en wanneer het PWM-signaal laag wordt, de condensator ontlaadt door de opgeslagen lading. Op deze manier hebben we altijd een constante spanning aan de uitgang die evenredig is met de PWM-duty-cycle.
In de bovenstaande grafiek is de gele kleur het PWM-signaal en de blauwe kleur de analoge uitgangsspanning. Zoals u kunt zien, zal de uitgangsgolf geen pure DC-golf zijn, maar het zou heel goed moeten werken voor onze toepassing. Als u pure DC-golf nodig heeft voor een ander type toepassing, moet u een schakelcircuit ontwerpen.
Schakelschema:
Het schakelschema is vrij eenvoudig; het heeft alleen een potentiometer en een weerstand en condensator om een RC-circuit te vormen en de led zelf. De potentiometer wordt gebruikt om een analoge spanning te leveren op basis waarvan de werkcyclus van het PWM-signaal kan worden geregeld. De uitgang van de pot is verbonden met pin P1.0 die analoge spanningen kan lezen. Dan moeten we een PWM-signaal produceren, wat kan worden gedaan door de pin P1.2 te gebruiken, dit PWM-signaal wordt vervolgens naar het RC-filtercircuit gestuurd om het PWM-signaal om te zetten in analoge spanning die vervolgens aan de LED wordt gegeven.
Het is erg belangrijk om te begrijpen dat niet alle pinnen op het MSP-bord analoge spanning kunnen lezen of PWM-pinnen kunnen genereren. De specifieke pinnen die de specifieke taken kunnen uitvoeren, worden weergegeven in de onderstaande afbeelding. Gebruik dit altijd als richtlijn om uw pinnen te selecteren om te programmeren.
Monteer het complete circuit zoals hierboven weergegeven, u kunt een breadboard en een paar jumperdraden gebruiken en gemakkelijk de verbindingen maken. Zodra de verbindingen zijn gemaakt, zag mijn bord eruit zoals hieronder weergegeven.
Programmering van de MSP voor PWM-signaal:
Als de hardware klaar is, kunnen we beginnen met programmeren. Het eerste in een programma is om de pinnen te declareren die we gaan gebruiken. Hier gaan we pincode 4 (P1.2) gebruiken als onze outputpin, aangezien deze de mogelijkheid heeft om PWM te genereren. We maken dus een variabele en kennen de pinnaam toe, zodat u er later in het programma gemakkelijk naar kunt verwijzen. Het volledige programma wordt aan het einde gegeven.
int PWMpin = 4; // We gebruiken de 4e pin op de MSP-module als PWM-pin
Vervolgens komen we in de setup- functie. Wat code is geschreven hier slechts één keer hier zal worden uitgevoerd, verklaren wij dat we met behulp van deze 4 th pin als een output pin sinds PWM wordt uitgevoerd functionaliteit. Merk op dat we hier de variabele PWMpin hebben gebruikt in plaats van het nummer 4, zodat de code er zinvoller uitziet
void setup () { pinMode (PWMpin, OUTPUT); // De PEMpin is ingesteld als Outptut }
Eindelijk komen we in de loop- functie. Wat we hier ook schrijven, het wordt keer op keer uitgevoerd. In dit programma moeten we de analoge spanning aflezen en dienovereenkomstig een PWM-signaal genereren en dit moet keer op keer gebeuren. Laten we dus eerst beginnen met het aflezen van de analoge spanning van pin A0, aangezien we er een potentiometer op hebben aangesloten.
Hier lezen we de waarde met behulp van de AanalogRead- functie, deze functie retourneert een waarde van 0-1024 op basis van de waarde van de spanning die op de pin wordt toegepast. We slaan deze waarde vervolgens op in een variabele genaamd "val", zoals hieronder weergegeven
int val = analogRead (A0); // lees de ADC-waarde van pin A0
We moeten de waarden van 0 tot 1024 van de ADC converteren naar waarden van 0 tot 255 om het aan de PWM-functie te geven. Waarom zouden we dit converteren? Ik zal dat binnenkort vertellen, maar onthoud voorlopig dat we ons moeten bekeren. Om de ene set waarden om te zetten naar een andere set waarden, heeft Energia een kaartfunctie die lijkt op Arduino. Dus converteren we de waarden van 0-1204 naar 0-255 en slaan het weer op in de variabele “val”.
val = kaart (val , 0, 1023, 0, 255); // De ADC geeft een waarde van 0-1023 en converteert deze naar 0-255
Nu hebben we een variabele waarde van 0-255 op basis van de positie van de potentiometer. Het enige wat we hoeven te doen is deze waarde op de PWM-pin gebruiken, dit kan worden gedaan met behulp van de volgende regel.
analogWrite (PWMpin, val); // Schrijf die waarde naar de PWM-pin.
Laten we teruggaan naar de vraag waarom 0-255 naar de PWM-pin wordt geschreven. Deze waarde 0-255 bepaalt de duty-cycle van het PWM-signaal. Als de waarde van het signaal bijvoorbeeld 0 is, betekent dit dat de duty-cycle 0% is voor 127 is het 50% en voor 255 is het 100%, net zoals wordt weergegeven en uitgelegd aan de bovenkant van dit artikel.
Helderheid van LED regelen met PWM:
Als je de hardware en code eenmaal hebt begrepen, is het tijd om wat plezier te hebben met de werking van het circuit. Upload de code naar het MSP430G2-bord en draai aan de potentiometerknop. Als u aan de knop draait, zal de spanning op pin 2 variëren, wat wordt gelezen door de microcontroller en volgens de spanning zullen de PWM-signalen worden gegenereerd op pin 4. Hoe hoger de spanning, hoe groter de duty-cycle en vice versa.
Dit PWM-signaal wordt vervolgens omgezet in analoge spanning om een LED te laten gloeien. De helderheid van de LED is recht evenredig met de werkcyclus van het PWM-signaal. Afgezien van de LED op het breadboard kun je ook de smd-LED (rode kleur) opmerken die qua helderheid varieert, vergelijkbaar met de breadboard-led. Deze LED is ook op dezelfde pin aangesloten, maar heeft geen RC-netwerk en flikkert dus eigenlijk heel snel. Je kunt het bord in een donkere kamer schudden om het flikkerende karakter te controleren. De volledige werking is ook te zien in onderstaande video.
Dat is alles voor nu mensen, we hebben geleerd hoe we PWM-signalen op het MSP430G2-bord kunnen gebruiken, in onze volgende tutorial zullen we leren hoe gemakkelijk het is om een servomotor te besturen met dezelfde PWM-signalen. Als je twijfels hebt, plaats ze dan in het commentaargedeelte hieronder of op de forums voor technische hulp.