- Wat is een servomotor?
- Koppeling van servomotoren met microcontrollers:
- Servomotor programmeren met PICF877A PIC-microcontroller:
- Schakelschema:
- Simulatie en hardware-instellingen:
Dit is onze 11e tutorial over het leren van PIC-microcontrollers met MPLAB en XC8. In deze tutorial zullen we leren hoe we de servomotor besturen met PIC Microcontroller. Als je al met servomotoren hebt gewerkt, kun je de eerste helft van deze tutorial overslaan, maar als je nog geen ervaring hebt met servomotoren, lees dan verder.
Tot nu toe hebben we veel basale tutorials behandeld, zoals LED knipperen met PIC, Timers in PIC, interfacing LCD, interfacing 7-segment, ADC met PIC enz. Als je een absolute beginner bent, bezoek dan de volledige lijst met PIC-tutorials hier en Begin met leren.
In onze vorige tutorial hebben we geleerd hoe we PWM-signalen kunnen genereren met PIC Microcontroller, de signalen werden gegenereerd op basis van de waarde die van de potentiometer werd gelezen. Als je alle programma's hebt begrepen, gefeliciteerd, je hebt ook al gecodeerd voor een servomotor. JA, Servomotoren reageren op de PWM-signalen (die we hier met timers maken), we zullen in deze tutorial leren waarom en hoe. We zullen de hardware-instellingen voor dit project simuleren en bouwen en u kunt de gedetailleerde video aan het einde van deze zelfstudie vinden.
Wat is een servomotor?
Een servomotor is een type actuator (meestal rond) waarmee hoekregeling mogelijk is. Er zijn veel soorten servomotoren beschikbaar, maar laten we ons in deze tutorial concentreren op de hieronder getoonde hobby-servomotoren.
Hobby-servo's zijn populair omdat ze de goedkope methode voor bewegingscontrole zijn. Ze bieden een kant-en-klare oplossing voor de meeste behoeften van R / C en robotachtige hobbyisten. Ze elimineren ook de noodzaak om voor elke toepassing een besturingssysteem op maat te ontwerpen.
De meeste hobby- servomotoren hebben een rotatiehoek van 0-180 °, maar je kunt ook een 360 ° -servomotor krijgen als je geïnteresseerd bent. Deze tutorial maakt gebruik van een 0-180 ° servomotor. Er zijn twee soorten servomotoren op basis van de versnelling, de ene is de plastic tandwiel-servomotor en de andere is de metalen tandwiel-servomotor. Metal gear wordt gebruikt op plaatsen waar de motor aan meer slijtage onderhevig is, maar dit kost alleen maar een hoge prijs.
Servomotoren hebben een vermogen in kg / cm (kilogram per centimeter), de meeste hobby-servomotoren hebben een vermogen van 3 kg / cm of 6 kg / cm of 12 kg / cm. Deze kg / cm geeft aan hoeveel gewicht uw servomotor op een bepaalde afstand kan tillen. Bijvoorbeeld: een servomotor van 6 kg / cm moet 6 kg kunnen tillen als de last 1 cm van de motoras is opgehangen, hoe groter de afstand, hoe kleiner het draagvermogen van het gewicht. Leer hier de basisprincipes van servomotor.
Koppeling van servomotoren met microcontrollers:
Het koppelen van hobby-servomotoren met MCU is heel eenvoudig. Servo's hebben drie draden die eruit komen. Hiervan zullen er twee worden gebruikt voor levering (positief en negatief) en één zal worden gebruikt voor het signaal dat vanaf de MCU moet worden verzonden. In deze tutorial zullen we een MG995 Metal Gear Servo Motor gebruiken die het meest wordt gebruikt voor RC-auto's, humanoïde bots enz. De afbeelding van MG995 wordt hieronder weergegeven:
De kleurcodering van uw servomotor kan verschillen, controleer daarom uw respectievelijke datasheet.
Alle servomotoren werken rechtstreeks met uw + 5V-voedingsrails, maar we moeten voorzichtig zijn met de hoeveelheid stroom die de motor zou verbruiken. Als u van plan bent om meer dan twee servomotoren te gebruiken, moet een goed servoschild worden ontworpen. In deze tutorial zullen we simpelweg één servomotor gebruiken om te laten zien hoe we onze PIC MCU kunnen programmeren om de motor te besturen. Bekijk onderstaande links voor het koppelen van de servomotor met andere microcontrollers:
- Servomotor-interface met 8051-microcontroller
- Servomotorbesturing met Arduino
- Raspberry Pi Servomotor-zelfstudie
- Servomotor met AVR-microcontroller
Servomotor programmeren met PICF877A PIC-microcontroller:
Voordat we kunnen beginnen met programmeren voor de servomotor, moeten we weten welk type signaal moet worden verzonden voor het besturen van de servomotor. We moeten de MCU programmeren om PWM-signalen naar de signaaldraad van de servomotor te sturen. Er is een regelcircuit in de servomotor dat de werkcyclus van het PWM-signaal leest en de as van de servomotor op de respectieve plaats positioneert, zoals weergegeven in de onderstaande afbeelding
Elke servomotor werkt op een andere PWM-frequentie (de meest voorkomende frequentie is 50Hz die in deze tutorial wordt gebruikt), dus neem de datasheet van uw motor om te controleren op welke PWM-periode uw servomotor werkt.
De details over het PWM-signaal voor onze Tower pro MG995 worden hieronder weergegeven.
Hieruit kunnen we concluderen dat onze motor werkt met een PWM-periode van 20ms (50Hz). Dus de frequentie van ons PWM-signaal moet worden ingesteld op 50Hz. De frequentie van de PWM die we in onze vorige tutorial hadden ingesteld, was 5 KHz, hetzelfde gebruiken zal ons hier niet helpen.
Maar we hebben hier een probleem. De PIC16F877A kan geen laagfrequente PWM-signalen genereren met behulp van de CCP-module. Volgens de datasheet is de laagst mogelijke waarde die kan worden ingesteld voor de PWM-frequentie 1,2 KHz. Dus we moeten het idee om de CCP-module te gebruiken laten vallen en een manier vinden om onze eigen PWM-signalen te maken.
Daarom zullen we in deze tutorial de timermodule gebruiken om de PWM-signalen met een frequentie van 50 Hz te genereren en hun duty-cycle variëren om de engel van de servomotor te besturen. Als je nieuw bent bij timers of ADC met PIC, ga dan terug naar deze tutorial, want ik zal de meeste dingen overslaan omdat we ze daar al hebben behandeld.
We initialiseren onze Timer-module met een presaler van 32 en laten deze overlopen voor elke 1us. Volgens ons gegevensblad mag de PWM slechts een periode van 20 ms hebben. Dus onze tijd in en uit tijd samen zou precies gelijk moeten zijn aan 20 ms.
OPTION_REG = 0b00000100; // Timer0 met externe freq en 32 als voorschrijver TMR0 = 251; // Laad de tijdwaarde voor 1us delayValue kan tussen 0-256 liggen alleen TMR0IE = 1; // Schakel timer-interruptbit in PIE1-register GIE = 1 in; // Schakel Global Interrupt PEIE = 1 in; // Schakel de perifere onderbreking in
Dus binnen onze interruptroutinefunctie schakelen we de pin RB0 in voor de opgegeven tijd en schakelen we deze uit voor de ruimtijd (20 ms - aan_tijd). De waarde van de aan-tijd kan worden opgegeven met behulp van de Potentiometer en ADC-module. De onderbreking wordt hieronder weergegeven.
oid interrupt timer_isr () {if (TMR0IF == 1) // Timer is overgelopen {TMR0 = 252; / * Laad de timerwaarde, (Opmerking: de tijdwaarde is 101 instaed van 100 aangezien de TImer0 twee instructiecycli nodig heeft om te beginnen met het verhogen van TMR0 * / TMR0IF = 0; // Wis timer-interruptvlaggetelling ++;} if (count> = on_time) { RB0 = 1; // vul de waarde aan voor het knipperen van de LED's} if (count> = (on_time + (200-on_time))) {RB0 = 0; count = 0;}}
In onze while- lus lezen we gewoon de waarde van de potentiometer met behulp van de ADC-module en werken we de tijd van de PWM bij met behulp van de leeswaarde.
while (1) {pot_value = (ADC_Read (4)) * 0,039; on_time = (170-pot_value); }
Op deze manier hebben we een PWM-signaal gecreëerd waarvan de periode 20ms is en een variabele duty-cycle heeft die kan worden ingesteld met behulp van een potentiometer. De volledige code is hieronder in het codegedeelte gegeven.
Laten we nu de uitvoer verifiëren met behulp van proteus-simulatie en doorgaan naar onze hardware.
Schakelschema:
Als je de PWM-tutorial al bent tegengekomen, zijn de schema's van deze tutorial hetzelfde, behalve dat we een servomotor zullen toevoegen in plaats van het LED-lampje.
Simulatie en hardware-instellingen:
Met behulp van Proteus-simulatie kunnen we het PWM-signaal verifiëren met een oscilloscoop en ook de roterende engel van de servomotor controleren. Enkele momentopnames van de simulatie worden hieronder getoond, waar kan worden opgemerkt dat de roterende engel van de servomotor en de PWM-inschakelduur worden gewijzigd op basis van de potentiometer. Controleer aan het einde de volledige video van rotatie op verschillende PWM.
Zoals we kunnen zien, wordt de servorotatie-engel gewijzigd op basis van de potentiometerwaarde. Laten we nu verder gaan met onze hardware-installatie.
In de hardware-configuratie hebben we zojuist het LED-bord verwijderd en de servomotor toegevoegd zoals weergegeven in het bovenstaande schema.
De hardware wordt getoond in de onderstaande afbeelding:
Onderstaande video laat zien hoe de servomotor reageert op de verschillende standen van de potmeter.
Dat is het!! We hebben een servomotor gekoppeld aan een PIC Microcontroller, nu kunt u uw eigen creativiteit gebruiken en toepassingen hiervoor ontdekken. Er zijn veel projecten die een servomotor gebruiken.