- Mikä on servomoottori?
- Servomoottoreiden ja mikrokontrollerien yhdistäminen:
- Servomoottorin ohjelmointi PICF877A PIC-mikrokontrollerilla:
- Piirikaavio:
- Simulointi ja laitteiston asennus:
Tämä on 11. opetusohjelma PIC-mikrokontrollerien oppimisesta MPLAB: n ja XC8: n avulla. Tässä opetusohjelmassa opimme kuinka ohjata servomoottoria PIC-mikrokontrollerilla. Jos olet jo työskennellyt Servomoottoreiden kanssa, voit ohittaa tämän opetusohjelman ensimmäisen puoliskon, mutta jos olet uusi itse servomoottorissa, jatka lukemista.
Tähän asti olemme käsittäneet monia perusoppaita, kuten LED-merkkivalo vilkkuu PIC: llä, ajastimet PIC: ssä, LCD-liitännät, 7-segmenttien liittäminen, ADC PIC: n avulla jne. Jos olet ehdottoman aloittelija, vieraile täydellisessä luettelossa PIC-oppaita täällä ja aloita oppiminen.
Edellisessä opetusohjelmassa opimme PWM-signaalien tuottamisen PIC-mikrokontrollerilla, signaalit kehitettiin potentiometristä luetun arvon perusteella. Jos olet ymmärtänyt kaikki ohjelmat sitten, onnittelut, että olet jo koodannut myös servomoottorin. KYLLÄ, servomoottorit reagoivat PWM-signaaleihin (jotka luomme täällä olevilla ajastimilla), opimme miksi ja miten tässä opetusohjelmassa. Simuloimme ja rakennamme tämän projektin laitteistoasetukset, ja löydät yksityiskohtaisen videon tämän opetusohjelman lopusta.
Mikä on servomoottori?
Servomoottori on eräänlainen toimilaite (enimmäkseen pyöreä), joka mahdollistaa kulmaohjauksen. Servomoottoreita on monen tyyppisiä, mutta tässä opetusohjelmassa keskitytään alla esitettyihin harrasteservomoottoreihin.
Harrasteservot ovat suosittuja, koska ne ovat halpa menetelmä liikkeen ohjaamiseksi. Ne tarjoavat hyllyltä saatavan ratkaisun useimpiin R / C- ja robottiharrastajien tarpeisiin. Ne poistavat myös tarpeen suunnitella ohjausjärjestelmää kullekin sovellukselle.
Suurimmalla osalla harrasteservomoottoreista on 0-180 ° pyörivä enkeli, mutta voit myös hankkia 360 ° servomoottorin, jos olet kiinnostunut. Tässä opetusohjelmassa käytetään 0--180 ° servomoottoria. Vaihteistoon perustuvia servomoottoreita on kahta tyyppiä, toinen on Plastic Gear Servo Motor ja toinen Metal Gear Servo Motor. Metallivaihteita käytetään paikoissa, joissa moottori altistuu enemmän, mutta se on vain korkea hinta.
Servomoottoreiden luokitus on kg / cm (kilogramma senttimetriä kohti), useimpien harrastus servomoottoreiden luokitus on 3kg / cm tai 6kg / cm tai 12kg / cm. Tämä kg / cm kertoo, kuinka paljon painoa servomoottori voi nostaa tietyllä etäisyydellä. Esimerkiksi: 6 kg / cm: n servomoottorin pitäisi pystyä nostamaan 6 kg, jos kuorma on ripustettu 1 cm: n päähän moottorin akselista, mitä suurempi etäisyys, sitä pienempi painon kantokyky. Opi täältä Servomoottorin perusteet.
Servomoottoreiden ja mikrokontrollerien yhdistäminen:
Harrastettujen servomoottoreiden ja MCU: n yhdistäminen on erittäin helppoa. Servoissa on kolme johtoa. Joista kahta käytetään syöttöön (positiivinen ja negatiivinen) ja yhtä käytetään MCU: sta lähetettävään signaaliin. Tässä opetusohjelmassa käytämme MG995 Metal Gear Servo -moottoria, jota käytetään yleisimmin RC-autojen humanoidiroboteissa jne. Kuva MG995: stä on alla:
Servomoottorin värikoodit saattavat poiketa toisistaan, joten tarkista vastaava tietolomake.
Kaikki servomoottorit toimivat suoraan + 5 V: n syöttökiskojen kanssa, mutta meidän on oltava varovaisia moottorin kuluttaman virran suhteen, jos aiot käyttää enemmän kuin kahta servomoottoria, on suunniteltava oikea servosuoja. Tässä opetusohjelmassa käytämme yksinkertaisesti yhtä servomoottoria osoittamaan, kuinka PIC MCU ohjelmoidaan moottorin ohjaamiseen. Tarkista alla olevat linkit, onko servomoottori liitetty muihin mikro-ohjaimiin:
- Servomoottori liitetään 8051-mikrokontrolleriin
- Servomoottorin ohjaus Arduinolla
- Vadelma Pi-servomoottorin opetusohjelma
- Servomoottori ja AVR-mikrokontrolleri
Servomoottorin ohjelmointi PICF877A PIC-mikrokontrollerilla:
Ennen kuin voimme aloittaa servomoottorin ohjelmoinnin, meidän on tiedettävä, minkä tyyppinen signaali lähetetään servomoottorin ohjaamiseksi. Meidän tulisi ohjelmoida MCU lähettämään PWM-signaaleja servomoottorin signaalijohtoon. Servomoottorin sisällä on ohjauspiiri, joka lukee PWM-signaalin toimintajakson ja sijoittaa servomoottorin akselin vastaavaan paikkaan alla olevan kuvan mukaisesti
Jokainen servomoottori toimii eri PWM-taajuuksilla (yleisin taajuus on 50 Hz, jota käytetään tässä opetusohjelmassa), joten hanki moottorin datalehti tarkistaaksesi, millä PWM-jaksolla servomoottorisi toimii.
Tower pro MG995: n PWM-signaalin yksityiskohdat on esitetty alla.
Tästä voimme päätellä, että moottorimme toimii 20 ms (50 Hz) PWM-jaksolla. Joten PWM-signaalin taajuudeksi tulisi asettaa 50 Hz. Edellisessä opetusohjelmassa asettamamme PWM: n taajuus oli 5 KHz, saman käyttö ei auta meitä täällä.
Mutta meillä on ongelma tässä. PIC16F877A ei voi tuottaa matalan taajuuden PWM-signaaleja käyttäen CCP moduuli. Datalehden mukaan pienin mahdollinen PWM-taajuudelle asetettava arvo on 1,2 KHz. Joten meidän on hylättävä ajatus CCP-moduulin käytöstä ja löydettävä tapa luoda omia PWM-signaaleja.
Siksi tässä opetusohjelmassa käytämme ajastinmoduulia PWM-signaalien tuottamiseen 50 Hz: n taajuudella ja vaihtelemalla niiden toimintajaksoa servomoottorin enkelin ohjaamiseksi. Jos olet uusi ajastimille tai ADC: lle PIC: llä, palaa tähän opetusohjelmaan, koska ohitan suurimman osan tavaroista, koska olemme jo käsitelleet niitä siellä.
Alustamme ajastinmoduulimme 32 esiskalkalilla ja saatamme sen ylivuotamaan jokaisen 1us: n kohdalla. Tietolomakkeemme mukaan PWM: n tulisi olla vain 20 ms: n jakso. Joten aika- ja poissaoloaikamme tulisi olla täsmälleen yhtä suuri kuin 20 ms.
OPTION_REG = 0b00000100; // Ajastin0 ulkoisella taajuudella ja 32 esiasteikolla TMR0 = 251; // Aika-arvon lataaminen 1us delayValue -arvolle voi olla välillä 0-256 vain TMR0IE = 1; // Ota ajastimen keskeytysbitti käyttöön PIE1-rekisterissä GIE = 1; // Ota globaali keskeytys käyttöön PEIE = 1; // Ota perifeerinen keskeytys käyttöön
Joten keskeytysrutiinitoimintomme sisällä kytkemme nastan RB0 päälle määritetyksi ajaksi ja sammutamme sen reagoimisajaksi (20ms - on_time). Käynnistysajan arvo voidaan määrittää potentiometrillä ja ADC-moduulilla. Keskeytys näkyy alla.
oid keskeytys ajastin_isr () {jos (TMR0IF == 1) // Ajastin on ylittänyt {TMR0 = 252; / * Lataa ajastimen arvo, (Huomaa: Aika-arvo on 101 100: sta, koska TImer0 tarvitsee kaksi käskysykliä aloittaakseen TMR0 * / TMR0IF = 0; // Tyhjennä ajastimen keskeytyslippujen määrä ++;} if (count> = on_time) { RB0 = 1; // täydentää merkkivalojen vilkkumisen arvoa} if (count> = (on_time + (200-on_time))) {RB0 = 0; count = 0;}}
Sisällä taas silmukka me vain lukea arvon potentiometrin avulla ADC-moduuli ja päivittää ajoissa PWM käyttäen luettu arvo.
kun taas (1) {pot_value = (ADC_Read (4)) * 0,039; on_time = (170 potin arvo); }
Tällä tavalla olemme luoneet PWM-signaalin, jonka jakso on 20 ms ja jolla on vaihteleva toimintajakso, joka voidaan asettaa potentiometrillä. Täydellinen koodi on annettu alla koodi-osassa.
Tarkastellaan nyt tulos käyttämällä proteus-simulointia ja jatketaan laitteistollemme.
Piirikaavio:
Jos olet jo törmännyt PWM-opetusohjelmaan, tämän opetusohjelman kaaviot ovat samat paitsi että lisäämme servomoottorin LED-valon tilalle.
Simulointi ja laitteiston asennus:
Proteus-simulaation avulla voimme varmistaa PWM-signaalin oskilloskoopilla ja tarkistaa myös servomoottorin pyörivän enkelin. Alla on esitetty muutama kuva simulaatiosta, joissa servomoottorin ja PWM-työjakson pyörivän enkelin voidaan havaita muuttuvan potentiometrin perusteella. Tarkista lopuksi koko video, joka kiertää eri PWM: ssä.
Kuten näemme, servokierron enkeli muuttuu potentiometrin arvon perusteella. Siirrytään nyt laitteistoasetuksiimme.
Laitteistoasetuksissa olemme juuri poistaneet LED-kortin ja lisänneet servomoottorin, kuten yllä olevissa kaavioissa on esitetty.
Laitteisto on esitetty alla olevassa kuvassa:
Alla olevassa videossa näkyy, kuinka servomoottori reagoi potentiometrin eri asentoihin.
Se on siinä!! Olemme liittäneet servomoottorin PIC-mikrokontrolleriin, nyt voit käyttää omaa luovuuttasi ja löytää sovelluksia tähän. Siellä on paljon projekteja, joissa käytetään servomoottoria.