- PWM (Pulse Width Modulation):
- Servomotor en PWM:
- Vereiste componenten:
- Schakelschema:
- Uitleg over werken en programmeren:
Raspberry Pi is een op ARM-architectuur gebaseerde processor, ontworpen voor elektronische ingenieurs en hobbyisten. De PI is momenteel een van de meest vertrouwde platformen voor projectontwikkeling. Met een hogere processorsnelheid en 1 GB RAM kan de PI worden gebruikt voor veel spraakmakende projecten zoals beeldverwerking en internet der dingen.
Voor het doen van spraakmakende projecten moet men de basisfuncties van PI begrijpen. In deze tutorials behandelen we alle basisfunctionaliteiten van Raspberry Pi. In elke tutorial bespreken we een van de functies van PI. Aan het einde van deze Raspberry Pi Tutorial-serie kun je zelf spraakmakende projecten doen. Doorloop onderstaande tutorials:
- Aan de slag met Raspberry Pi
- Raspberry Pi-configuratie
- LED Blinky
- Raspberry Pi-knopinterface
- Raspberry Pi PWM-generatie
- Besturen van DC-motor met Raspberry Pi
- Stappenmotorbesturing met Raspberry Pi
- Interfacing Shift Register met Raspberry Pi
- Raspberry Pi ADC-zelfstudie
In deze tutorial zullen we Servomotor besturen met Raspberry Pi. Voordat we naar servo gaan, laten we het hebben over PWM, omdat het concept van het besturen van de servomotor daaruit voortkomt.
PWM (Pulse Width Modulation):
We hebben het al vaker over PWM gehad in: Pulsbreedtemodulatie met ATmega32, PWM met Arduino Uno, PWM met 555 timer IC en PWM met Arduino Due. PWM staat voor 'Pulse Width Modulation'. PWM is een methode die wordt gebruikt om een variabele spanning te krijgen van een stabiele voeding. Overweeg het onderstaande circuit voor een beter begrip van PWM,
Als in de bovenstaande afbeelding de schakelaar gedurende een bepaalde tijd continu wordt gesloten, zal de LED gedurende deze tijd continu 'AAN' zijn. Als de schakelaar een halve seconde is gesloten en de volgende halve seconde wordt geopend, brandt de LED alleen in de eerste halve seconde. Nu wordt de verhouding waarin de LED over de totale tijd AAN is de Duty Cycle genoemd en kan als volgt worden berekend:
Duty Cycle = Inschakeltijd / (Inschakeltijd + Uitschakeltijd)
Inschakelduur = (0,5 / (0,5 + 0,5)) = 50%
De gemiddelde uitgangsspanning is dus 50% van de accuspanning.
Als we de AAN- en UIT-snelheid verhogen tot een niveau, zullen we zien dat de LED wordt gedimd in plaats van AAN en UIT. Dit komt doordat onze ogen frequenties hoger dan 25 Hz niet duidelijk kunnen opvangen. Overweeg een cyclus van 100 ms, waarbij de LED 30 ms UIT is en 70 ms AAN. We hebben 70% stabiele spanning aan de uitgang, dus LED zal continu branden met 70% intensiteit.
Inschakelduur gaat van 0 tot 100. '0' betekent volledig UIT en '100' is volledig AAN. Deze Duty Ratio is erg belangrijk voor de servomotor. De positie van de Servomotor wordt bepaald door deze Duty Ratio. Bekijk dit voor PWM-demonstratie met LED en Raspberry Pi.
Servomotor en PWM:
Een servomotor is een combinatie van gelijkstroommotor, positieregelingssysteem en tandwielen. Servo's hebben veel toepassingen in de moderne wereld en zijn daarmee verkrijgbaar in verschillende soorten en maten. We zullen SG90 Servomotor gebruiken in deze tutorial, het is een van de populaire en goedkoopste. SG90 is een 180 graden servo. Met deze servo kunnen we de as dus van 0-180 graden positioneren.
Een servomotor heeft hoofdzakelijk drie draden, een is voor positieve spanning, een andere is voor aarde en de laatste is voor positie-instelling. De rode draad is aangesloten op de voeding, de bruine draad is verbonden met aarde en de gele draad (of WIT) is verbonden met het signaal.
In servo hebben we een controlesysteem dat het PWM-signaal van de signaalpin ontvangt. Het decodeert het signaal en haalt er de duty-ratio uit. Daarna vergelijkt het de verhouding met de vooraf gedefinieerde positiewaarden. Als er een verschil is in de waarden, past het de positie van de servo dienovereenkomstig aan. Dus de aspositie van de servomotor is gebaseerd op de duty-ratio van het PWM-signaal op de signaalpin.
De frequentie van het PWM-signaal (Pulse Width Modulated) kan variëren op basis van het type servomotor. Voor SG90 is de frequentie van het PWM-signaal 50Hz. Om de frequentie van de werking van uw servo te weten te komen, raadpleegt u het gegevensblad voor dat specifieke model. Dus als de frequentie eenmaal is geselecteerd, is het andere belangrijke hier de DUTY RATIO van het PWM-signaal.
De onderstaande tabel toont de servopositie voor die specifieke inschakelduur. U kunt elke hoek ertussen krijgen door de waarde dienovereenkomstig te kiezen. Dus voor 45º servo moet de Duty Ratio '5' of 5% zijn.
POSITIE |
WERKVERHOUDING |
0º |
2.5 |
90º |
7.5 |
180º |
12.5 |
Voordat u de servomotor met de Raspberry Pi verbindt, kunt u uw servo testen met behulp van dit servomotor-testcircuit. Bekijk ook onze onderstaande Servo-projecten:
- Servomotorbesturing met Arduino
- Servomotorbesturing met Arduino Due
- Servomotor-interface met 8051 Microcontroller
- Servomotorbesturing met MATLAB
- Servomotorbesturing door Flex-sensor
- Servopositieregeling met gewicht (krachtsensor)
Vereiste componenten:
Hier gebruiken we Raspberry Pi 2 Model B met Raspbian Jessie OS. Alle basisvereisten voor hardware en software zijn eerder besproken, u kunt het opzoeken in de Raspberry Pi-introductie, behalve dat we nodig hebben:
- Verbindende pinnen
- 1000uF condensator
- SG90 Servomotor
- Breadboard
Schakelschema:
A1000µF moet over de + 5V stroomrail worden aangesloten, anders kan de PI willekeurig worden uitgeschakeld tijdens het besturen van de servo.
Uitleg over werken en programmeren:
Zodra alles is aangesloten volgens het schakelschema, kunnen we de PI inschakelen om het programma in PYHTON te schrijven.
We zullen het hebben over enkele commando's die we gaan gebruiken in het PYHTON-programma, We gaan het GPIO-bestand uit de bibliotheek importeren, met onderstaande functie kunnen we GPIO-pinnen van PI programmeren. We hernoemen ook "GPIO" naar "IO", dus in het programma zullen we telkens wanneer we naar GPIO-pinnen willen verwijzen het woord 'IO' gebruiken.
importeer RPi.GPIO als IO
Soms, wanneer de GPIO-pinnen, die we proberen te gebruiken, andere functies uitvoeren. In dat geval zullen we waarschuwingen ontvangen tijdens het uitvoeren van het programma. Onderstaand commando vertelt de PI om de waarschuwingen te negeren en door te gaan met het programma.
IO.setwarnings (False)
We kunnen de GPIO-pinnen van PI verwijzen, hetzij op pincode aan boord, hetzij op functienummer. Net als 'PIN 29' op het bord is 'GPIO5'. Dus we vertellen hier dat we de pin hier met '29' of '5' gaan weergeven.
IO.setmode (IO.BCM)
We stellen PIN39 of GPIO19 in als uitvoerpin. We krijgen PWM-uitvoer van deze pin.
IO.setup (19, IO.OUT)
Na het instellen van de output pin, moeten we de pin instellen als PWM output pin, p = IO.PWM (uitgangskanaal, frequentie van PWM-signaal)
Het bovenstaande commando is voor het instellen van het kanaal en ook voor het instellen van de frequentie van het kanaal ”. 'p' hier is een variabele, het kan van alles zijn. We gebruiken GPIO19 als het PWM-uitgangskanaal. "Frequentie van PWM-signaal" kiezen we 50, aangezien de SG90-werkfrequentie 50Hz is.
Het onderstaande commando wordt gebruikt om het genereren van PWM-signalen te starten. ' DUTYCYCLE ' is voor het instellen van de 'Turn On' ratio zoals eerder uitgelegd, p.start (DUTYCYCLE)
Het onderstaande commando wordt gebruikt als forever loop, met dit commando worden de statements in deze loop continu uitgevoerd.
Terwijl 1:
Hier levert het programma voor het besturen van de servo met Raspberry Pi een PWM-signaal op GPIO19. De Duty Ratio van het PWM-signaal wordt gedurende drie seconden tussen drie waarden gewijzigd. Dus voor elke seconde roteert de Servo naar een positie die wordt bepaald door de Duty Ratio. De servo draait continu in drie seconden naar 0º, 90º en 180º.