Zoals eerder besproken, is Arduino Due een op ARM-controller gebaseerd bord dat is ontworpen voor elektronische ingenieurs en hobbyisten. Dit DUE-bord kan worden gebruikt voor het maken van CNC-machines, 3D-printers, robotarmen enz. Al deze projecten hebben een gemeenschappelijk kenmerk, namelijk Position Control. Elk van deze projecten heeft nauwkeurigheid nodig ten aanzien van hun positie. Nauwkeurige posities in deze machines kunnen worden bereikt door Servomotoren. In deze sessie gaan we de positie van een servomotor besturen met Arduino Due. We hebben de Servomotor-interface met Arduino Uno en Servo Motor-interface met 8051 Microcontroller al behandeld.
Servomotoren:
Servomotoren staan bekend om hun nauwkeurige asbeweging of positie. Deze worden niet voorgesteld voor toepassingen met hoge snelheid. Deze worden voorgesteld voor lage snelheid, gemiddeld koppel en nauwkeurige positietoepassing. Deze motoren worden gebruikt in robotarmmachines, vluchtbesturingen en besturingssystemen. Servomotoren worden ook gebruikt in sommige printers en faxmachines.
Servomotoren zijn verkrijgbaar in verschillende soorten en maten. We zullen SG90 Servomotor gebruiken in deze tutorial. SG90 is een 180 graden servomotor. Met deze servo kunnen we de as dus van 0 tot 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 verbonden met de voeding, de bruine draad is verbonden met aarde en de GELE draad (of WIT) is verbonden met het signaal.
Een servomotor is een combinatie van gelijkstroommotor, positieregelsysteem en tandwielen. In servo hebben we een regelsysteem 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 naar de SIGNAL-pin.
De frequentie van het PWM- signaal (Pulse Width Modulated) kan variëren op basis van het type servomotor. Het belangrijkste hier is de DUTY RATIO van het PWM-signaal. Controleer dit voor PWM met Arduino Due. In dit geval hoeven we ons echter geen zorgen te maken over de selectie van de Duty Ratio. In Arduino hebben we een speciale functie; bij het aanroepen kunnen we de positie van de servo aanpassen, gewoon door de hoek te vermelden. We zullen daarover praten in het werkgedeelte hieronder.
Voordat u de servomotor met de Arduino Due verbindt, kunt u uw servo testen met behulp van dit servomotor-testcircuit. Bekijk ook deze projecten voor Control Servo by Flex Sensor of Force Sensor.
Componenten:
Hardware: Arduino Due, voeding (5v), Servomotor.
Software: Arduino nightly, download het via onderstaande link (https://www.arduino.cc/en/Main/Software)
Voor meer informatie over het downloaden en installeren van deze software, gaat u naar de eerste tutorial Aan de slag met Arduino Due.
Schakelschema en werkbeschrijving:
Zoals eerder gezegd in ARDUINO, hebben we vooraf gedefinieerde bibliotheken, die de frequenties en taakverhoudingen dienovereenkomstig zullen instellen, zodra het headerbestand wordt aangeroepen of opgenomen. In ARDUINO hoeven we alleen maar de positie van de servo aan te geven die nodig is en de DUE genereert het juiste PWM-signaal voor de servo. De dingen die we moeten doen om een nauwkeurige positie van de servo te krijgen, zijn:
# omvatten
Servo myservo;
myservo.attach (servo_signal_pin_attached_to);
myservo.write (benodigde_positie_hoek);
Het header-bestand “#include
Ten tweede moet een naam worden gekozen voor de servo door "Servo myservo" te gebruiken , hier is myservo de gekozen naam, dus tijdens het schrijven voor positie gaan we deze naam gebruiken, deze functie is handig als we veel servo's hebben om te besturen, we kunnen hierdoor maar liefst 12 servo's aansturen.
Omdat de Arduino Due 12 PWM-kanalen heeft, moeten we DUE vertellen waar de signaalpin van de servo is aangesloten of waar deze het PWM-signaal moet genereren. Om dit te doen hebben we "myservo.attach (2);" , hier vertellen we de DUE dat we de signaalpen van de servo op PIN2 hebben aangesloten.
Alles wat overblijft is om de positie in te stellen, we gaan de positie van de servo instellen met " myservo.write (45);" , door dit commando beweegt de servohand 45 graden. Als we '45' veranderen in '175', maakt de servo-as een hoek van 175 graden en blijft daar. Daarna, telkens als we de positie van de servo moeten veranderen, hoeven we alleen maar het commando " myservo.write (required_position_angle);" .
In het programma gaan we de hoeken verhogen en verlagen door lussen te gebruiken. Dus de servo zwaait van 0 naar 180, dan van 180 naar 0 enzovoort. De Servomotorbesturing van Arduino Due kan het beste worden uitgelegd in stap voor stap van de C-code hieronder.