- Tarvittavat komponentit
- Servomoottorin tappi
- Piirikaavio
- Servomoottorin ohjaus AVR ATmega16: lla
- Atmega16: n ohjelmointi USBasp: n avulla
Servomoottoreita käytetään laajalti siellä, missä tarvitaan tarkkaa ohjausta, kuten robotit, automatisoidut koneet, robottivarret jne. Servomoottorin laajuus ei kuitenkaan rajoitu tähän ja sitä voidaan käyttää monissa sovelluksissa. Seuraa linkkiä, jos haluat tietää enemmän servomoottorin perusteista, teoriasta ja toimintaperiaatteista.
Olemme aiemmin liittäneet servomoottorin moniin mikro-ohjaimiin:
- Servomoottorin liitäntä ARM7-LPC2148: een
- Servomoottorin ja MSP430G2: n liitäntä
- Servo-moottorin ja STM32F103C8: n liitäntä
- Servomoottorin ja PIC-mikrokontrollerin liitäntä MPLAB: ää ja XC8: ta käyttäen
- Servomoottorin liitäntä Arduino Unoon
- Servomoottorin liitäntä 8051-mikrokontrolleriin
Tässä opetusohjelmassa liitämme mikro-servomoottorin Atmega16 AVR -mikrokontrolleriin Atmel Studio 7.0: n avulla. Servomoottori on mitoitettu toimimaan 4,8-6 V: n jännitteellä. Voimme hallita sen kiertokulmaa ja suuntaa soveltamalla pulssijuna- tai PWM-signaaleja. Huomaa, että servomoottorit eivät voi liikkua täydellä 360 asteen kierroksella, joten niitä käytetään silloin, kun jatkuvaa pyörimistä ei tarvita. Kiertokulma on 0-180 astetta tai (-90) - (+90) astetta.
Tarvittavat komponentit
- SG90 Tower Pro -mikropalvelumoottori
- Atmega16-mikrokontrolleri-IC
- 16MHz kristalloskillaattori
- Kaksi 100nF-kondensaattoria
- Kaksi 22pF-kondensaattoria
- Paina nappia
- Neulalangat
- Leipälauta
- USBASP v2.0
- Led (kaikki värit)
Servomoottorin tappi
- Punainen = positiivinen virtalähde (4,8 V - 6 V)
- Ruskea = maa
- Oranssi = Ohjaussignaali (PWM-nasta)
Piirikaavio
Kytke kaikki komponentit alla olevan kaavion mukaisesti kääntääksesi servomoottoria AVR-mikrokontrollerilla. PWM-nastoja on neljä, voimme käyttää mitä tahansa Atmega16: n PWM-nastaa. Tässä opetusohjelmassa käytämme Pin PD5: tä (OC1A) PWM: n luomiseen. PD5 on kytketty suoraan servomoottorin oranssiin johtoon, joka on tulosignaalin tappi. Liitä mikä tahansa virran merkkivalon led. Liitä myös yksi painike Reset-nastassa Atmega16: n nollaamiseksi tarvittaessa. Liitä Atmega16 asianmukaisella kideoskillaattoripiirillä. Kaikki järjestelmät saavat virtaa 5 V: n virtalähteestä.
Täydellinen asennus näyttää seuraavalta:
Servomoottorin ohjaus AVR ATmega16: lla
Kuten askelmoottori, myös servomoottori ei tarvitse ulkoista ohjainta, esim. ULN2003 tai L293D. Pelkkä PWM riittää servomoottorin käyttämiseen, ja PWM: n luominen mikrokontrollerista on erittäin helppoa. Tämän servomoottorin vääntömomentti on 2,5 kg / cm, joten jos tarvitset suurempaa vääntömomenttia, tämä servo ei sovi.
Koska tiedämme, että servomoottori hakee pulssiä 20 ms välein, ja positiivisen pulssin pituus määrää servomoottorin pyörimiskulman.
20 ms: n pulssin saamiseksi vaadittava taajuus on 50 Hz (f = 1 / T). Joten tälle servomoottorille eritelmässä sanotaan, että 0 astetta varten tarvitaan 0,388 ms, 90 astetta varten 1,264 ms ja 180 astetta varten 2,14 ms pulssia.
Määritettyjen pulssien luomiseen käytämme Atmega16: n ajastinta1. Suorittimen taajuus on 16Mz, mutta käytämme vain 1Mhz: ää, koska mikro-ohjaimeen ei ole kytketty paljon oheislaitteita eikä mikro-ohjaimelle ole paljon kuormitusta, joten 1Mhz tekee työn. Prescaler on asetettu arvoon 1. Joten kello jaetaan arvoon 1Mhz / 1 = 1Mhz (1uS), mikä on hieno. Ajastinta1 käytetään nopeaksi PWM-moodiksi eli tilaksi 14. Voit käyttää eri ajastintiloja halutun pulssijohdon luomiseen. Viite on annettu alla. Löydät lisää kuvauksen Atmega16: n virallisesta tuotetiedotesta.
Jotta käyttää Timer1 niin nopeasti PWM -tilassa tarvitsemme TOP arvo ICR1 (Input Capture Register1). Löydät TOP-arvon kaavan seuraavasti:
f pwm = f cpu / nx (1 + YLÄ)
Tätä voidaan yksinkertaistaa
YLÄ = ( f cpu / ( f pwm xn)) - 1
Missä, N = Esikalkkulaitteen asetusarvo
f cpu = suorittimen taajuus
f pwm = Servomoottorin pulssin leveys, joka on 50 Hz
Laske nyt ICR1-arvo, koska meillä on kaikki vaadittu arvo, N = 1, f cpu = 1 MHz, f pwm = 50 Hz
Laita vain arvot yllä olevaan kaavaan ja saamme
ICR1 = 1999
Tämä tarkoittaa, että saavutetaan suurin aste eli 180 0, ICR1: n tulisi olla vuosi 1999.
Meillä on 16 MHz: n kide- ja esilaajennusasetus 16
ICR1 = 4999
Siirrytään nyt keskustelemaan luonnoksesta.
Atmega16: n ohjelmointi USBasp: n avulla
Täydellinen AVR-koodi servomoottorin ohjaamiseksi on annettu alla. Koodi on yksinkertainen ja helposti ymmärrettävä.
Täällä olemme koodattu ATmega16 pyörittää servomoottori 0 0 ja 180 0 ja tulossa takaisin 180 0 ja 0 0. Tämä siirtymä suoritetaan 9 vaiheessa, ts. 0 - 45 - 90 - 135 - 180 - 135 - 90 - 45 - 0. Viivytykseksi käytämme Atmel Studion sisäistä kirjastoa, ts.
Liitä USBASP v2.0 ja seuraa tämän linkin ohjeita ohjelmoidaksesi Atmega16 AVR -mikrokontrolleri USBASP: n ja Atmel Studio 7.0: n avulla. Rakenna luonnos ja lataa se ulkoisella työkaluketjulla.
Täydellinen koodi esittelyvideolla on annettu alla. Opi myös lisää servomoottoreista tietämällä niiden merkitys robotiikassa.