- Servo motor
- Upravljanje servo motorom pomoću LPC2148 PWM i ADC
- PWM i ADC igle u ARM7-LPC2148
- Komponente potrebne
- Kružni dijagram i veze
- Programiranje ARM7-LPC2148 za upravljanje servo motorom
U našem prethodnom uputstvu povezali smo koračni motor s ARM7-LPC2148. U ovom uputstvu upravljati ćemo servo motorom pomoću ARM7-LPC2148. Servo motor ima prednost male potrošnje energije u odnosu na koračni motor. Servo motor zaustavlja svoju potrošnju energije kada se postigne željeni položaj, ali koračni motor neprestano troši energiju kako bi zaključao osovinu u željenom položaju. Servo motori se uglavnom koriste u projektima robotike zbog njihove preciznosti i jednostavnog rukovanja.
U ovom uputstvu naučit ćemo o servo motoru i kako povezati servo s ARM7-LPC2148. Potenciometar je također povezan kako bi se promijenio položaj osovine servo motora, a LCD za prikaz vrijednosti kuta.
Servo motor
Servo motor je kombinacija istosmjernog motora, sustava za kontrolu položaja i stupnjeva prijenosa. Zakretanje servo motora kontrolira se primjenom PWM signala, širina PWM signala određuje kut rotacije i smjer motora. Ovdje ćemo koristiti SG90 Servo Motor u ovom vodiču, jedan je od popularnih i najjeftinijih. SG90 je servo od 180 stupnjeva. Dakle, s ovim servom možemo smjestiti os od 0-180 stupnjeva:
- Radni napon: + 5V
- Tip zupčanika: plastični
- Kut rotacije: 0 do 180 °
- Težina: 9gm
- Okretni moment: 2,5 kg / cm

Prije nego što započnemo programiranje servo motora, trebali bismo znati koju vrstu signala treba poslati za upravljanje servo motorom. Trebali bismo programirati MCU da šalje PWM signale na signalnu žicu servo motora. Unutar servo motora nalazi se upravljački krug koji očitava radni ciklus PWM signala i postavlja osovinu servo motora na odgovarajuće mjesto kao što je prikazano na donjoj slici

Svakih 20 milisekundi servo motor provjerava puls. Dakle, prilagodite širinu impulsa signala da biste okretali osovinu motora.
- Širina impulsa od 1 ms (1 milisekunde) za rotaciju servoa do 0 stupnjeva
- Širina impulsa od 1,5 ms za rotaciju do 90 stupnjeva (neutralni položaj)
- Širina impulsa od 2 ms za rotaciju servoa do 180 stupnjeva.
Prije nego što povežete servo na ARM7-LPC2148, možete testirati svoj servo uz pomoć ovog kruga ispitivača servo motora. Također provjerite kako se servo motor može povezati s drugim mikrokontrolerima:
- Upravljanje servo motorom pomoću Arduina
- Povezivanje servo motora s mikrokontrolerom 8051
- Upravljanje servo motorom pomoću MATLAB-a
- Upravljanje servo motorom s Raspberry Pi
- Povezivanje servo motora s MSP430G2
- Povezivanje servo motora sa STM32F103C8
Upravljanje servo motorom pomoću LPC2148 PWM i ADC
Servo motorom se može upravljati pomoću LPC2148 pomoću PWM-a. Davanjem PWM signala na SERVO PWM pin s razdobljem od 20 ms i frekvencijom od 50 Hz možemo postaviti osovinu servo motora oko 180 stupnjeva (-90 do +90).
Potenciometar se koristi za promjenu radnog ciklusa PWM signala i zakretanje osovine servo motora, ova metoda je implementirana pomoću ADC modula u LPC2148. Dakle, trebamo implementirati koncepte PWM i ADC u ovo uputstvo. Stoga vas molimo da uputite naše prethodne vodiče kako biste naučili PWM i ADC u ARM7-LPC2148.
- Kako se koristi PWM u ARM7-LPC2148
- Kako koristiti ADC u ARM-LPLC2148
PWM i ADC igle u ARM7-LPC2148
Slika ispod prikazuje PWM i ADC pinove u LPC2148. Žuti okviri označavaju (6) PWM pinove, a crni okvir (14) ADC pinove.

Komponente potrebne
Hardver
- ARM7-LPC2148
- LCD (16x2) modul zaslona
- Servo motor (SG-90)
- 3.3V regulator napona
- 10k potenciometar (2 broja)
- Breadboard
- Spajanje žica
Softver
- Keil uVision5
- Flash Magic Tool
Kružni dijagram i veze


Tablica u nastavku prikazuje vezu između servo motora i ARM7-LPC2148:
|
SERVO PINOVI |
ARM7-LPC2148 |
|
CRVENA (+ 5V) |
+ 5V |
|
SMEĐA (GND) |
GND |
|
NARANČASTA (PWM) |
P0.1 |
Pin P0.1 je PWM izlaz LPC2148.
Tablica u nastavku prikazuje veze kruga između LCD-a i ARM7-LPC2148.
|
ARM7-LPC2148 |
LCD (16x2) |
|
P0.4 |
RS (odabir registra) |
|
P0.6 |
E (Omogući) |
|
P0.12 |
D4 (podatkovni pin 4) |
|
P0.13 |
D5 (podatkovni pin 5) |
|
P0.14 |
D6 (podatkovni pin 6) |
|
P0.15 |
D7 (podatkovni pin 7) |
|
GND |
VSS, R / W, K |
|
+ 5V |
VDD, A |
Tablica u nastavku prikazuje veze između ARM7 LPC2148 i potenciometar s regulatorom 3.3V napona.
|
IC regulatora napona 3.3V |
Funkcija pribadače |
Pribadača ARM-7 LPC2148 |
|
1.Lijeva igla |
- Ve iz GND-a |
GND pribadača |
|
2.Centre Pin |
Regulirani + 3.3V izlaz |
Na potenciometar Ulaz i izlaz potenciometra na P0,28 od LPC2148 |
|
3. Desna pribadača |
+ Ve od 5V ULAZNI |
+ 5V |
Bodovi koje treba zabilježiti
1. Ovdje se koristi regulator napona od 3,3 V za pružanje analogne ulazne vrijednosti ADC pinu (P0,28) LPC2148. Kako koristimo snagu od 5 V, moramo regulirati napon regulatorom napona od 3,3 V.
2. Potenciometar se koristi za promjenu napona između (0V do 3,3V) za pružanje analognog ulaza (ADC) na LPC2148 pin P0.28
3. Osovinica P0.1 LPC2148 pruža PWM izlaz na servo motor za kontrolu položaja motora.
4. Prema vrijednosti analognog ulaza (ADC), položaj servo motora se mijenja od (0 do 180 stupnjeva) kroz PWM izlazni zatik na P0,1 od LPC2148.
Programiranje ARM7-LPC2148 za upravljanje servo motorom
Za programiranje ARM7-LPC2148 potreban nam je alat keil uVision & Flash Magic. Koristimo USB kabel za programiranje ARM7 Stick putem mikro USB priključka. Napisujemo kod pomoću Keila i stvaramo hex datoteku, a zatim se HEX datoteka bljeska na ARM7 stick pomoću Flash Magic. Da biste saznali više o instaliranju keil uVision i Flash Magic, te kako ih koristiti, slijedite vezu Početak rada s mikrokontrolerom ARM7 LPC2148 i programirajte ga pomoću Keil uVision.
Koraci uključeni u konfiguriranje LPC2148 za PWM i ADC za upravljanje servo motorom
Korak 1: - Uključite potrebne datoteke zaglavlja za kodiranje LPC2148
#include
Korak 2: - Sljedeća stvar je konfiguriranje PLL-a za generiranje takta jer postavlja sistemski sat i periferni sat LPC2148 prema potrebi programera. Maksimalna taktna frekvencija za LPC2148 je 60 MHz. Sljedeći se redovi koriste za konfiguriranje generiranja PLL sata.
void InitilizePLL (void) // Funkcija za korištenje PLL-a za generiranje sata { PLL0CON = 0x01; PLL0CFG = 0x24; PLL0FEED = 0xAA; PLL0FEED = 0x55; dok (! (PLL0STAT & 0x00000400)); PLL0CON = 0x03; PLL0FEED = 0xAA; PLL0FEED = 0x55; VPBDIV = 0x01; }
Korak 3: - Sljedeće što treba učiniti je odabrati PWM pinove i PWM funkciju LPC2148 pomoću PINSEL registra. Koristimo PINSEL0 kao što koristimo P0.1 za PWM izlaz LPC2148.
PINSEL0 - = 0x00000008; // Postavljanje pina P0.1 LPC2148 kao PWM3
Korak 4: - Zatim moramo RESETIRATI mjerače vremena pomoću PWMTCR (Registar kontrole vremena).
PWMTCR = 0x02; // Resetiranje i onemogućavanje brojača za PWM
A zatim se slijedeća vrijednost pretkale postavlja koja određuje razlučivost PWM-a.
PWMPR = 0x1D; // Vrijednost registra pretkola
Korak 5: - Zatim postavite PWMMCR (PWM registar kontrole podudaranja) dok postavlja radnju poput resetiranja, prekida za PWMMR0 i PWMMR3.
PWMMCR = 0x00000203; // Resetiranje i prekid na utakmici MR0, prekid na utakmici MR3
Korak 6: - Maksimalno razdoblje PWM kanala postavlja se pomoću PWMMR0, a tona radnog ciklusa PWM u početku je postavljena na 0,65 ms
PWMMR0 = 20000; // Vremensko razdoblje PWM vala, 20 ms PWMMR3 = 650; // Tona PWM vala 0,65 msec
Korak 7: - Dalje, moramo postaviti Omogući zaključavanje na odgovarajuće registre podudaranja pomoću PWMLER-a
PWMLER = 0x09; // Omogući zasun za PWM3 i PWM0
(Koristimo PWMMR0 i PWMMR3) Dakle, omogućite odgovarajući bit postavljanjem 1 u PWMLER
Korak 8: - Da bismo omogućili PWM izlaz na pin, moramo koristiti PWMTCR za omogućavanje PWM brojača i PWM modula.
PWMPCR = 0x0800; // Omogući PWM3 i PWM 0, PWM s jednim rubom PWMTCR = 0x09; // Omogući PWM i brojač
Korak 9: - Sada moramo dobiti vrijednosti potenciometra za podešavanje radnog ciklusa PWM iz ADC pina P0.28. Dakle, koristimo ADC modul u LPC2148 za pretvaranje analognog ulaza potenciometara (0 do 3,3 V) u vrijednosti ADC (0 do 1023).
Korak 10: - Za odabir ADC pina P0.28 u LPC2148 koristimo
PINSEL1 = 0x01000000; // Postavljanje P0.28 kao ADC INPUT AD0CR = (((14) << 8) - (1 << 21)); // Postavljanje sata i PDN-a za A / D pretvorbu
Sljedeći redovi zahvaćaju analogni ulaz (0 do 3,3 V) i pretvaraju ga u digitalnu vrijednost (0 do 1023). A zatim se ove digitalne vrijednosti dijele sa 4 da bi se pretvorile u (0 do 255) i konačno napojile kao PWM izlaz u P0,1 pinu LPC2148. Ovdje pretvaramo vrijednosti od 0-1023 u 0-255 dijeljenjem s 4 jer PWM LPC2148 ima 8-bitnu razlučivost (28).
AD0CR - = (1 << 1); // Odaberite AD0.1 kanal u vremenu kašnjenja registra ADC (10); AD0CR - = (1 << 24); // Pokreni A / D pretvorbu while ((AD0DR1 & (1 << 31)) == 0); // Provjerite GOTOVO bit u ADC registru podataka adcvalue = (AD0DR1 >> 6) & 0x3ff; // Dobivanje REZULTATA iz ADC registra podataka dutycycle = adcvalue / 4; // formula za dobivanje vrijednosti radnog ciklusa od (0 do 255) PWMMR1 = radni ciklus; // postavimo vrijednost radnog ciklusa na PWM registar podudaranja PWMLER - = (1 << 1); // Omogući PWM izlaz s vrijednošću radnog ciklusa
Korak 11: - Zatim te vrijednosti prikazujemo u LCD (16X2) modulu prikaza. Stoga dodajemo sljedeće redove za inicijalizaciju modula LCD zaslona
Void LCD_INITILIZE (void) // Funkcija pripreme LCD-a { IO0DIR = 0x0000FFF0; // postavlja pin P0.12, P0.13, P0.14, P0.15, P0.4, P0.6 kao IZLAZNO vrijeme odgode (20); LCD_SEND (0x02); // Inicijalizirajte lcd u 4-bitnom načinu rada LCD_SEND (0x28); // 2 retka (16X2) LCD_SEND (0x0C); // Prikaz na pokazivaču isključen LCD_SEND (0x06); // Kursor za automatsko povećanje LCD_SEND (0x01); // Prikažite jasan LCD_SEND (0x80); // Prva pozicija prvog retka }
Kako smo LCD u 4-bitnom načinu povezali s LPC2148, trebamo slati vrijednosti koje će se prikazivati grickajući po grickanje (gornji grickač i donji grickač). Dakle, koriste se sljedeći redovi.
void LCD_DISPLAY (char * msg) // Funkcija ispisa jednog po jednog poslanog znaka { uint8_t i = 0; while (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // šalje gornji grickanje IO0SET = 0x00000050; // RS HIGH & Omogući HIGH za ispis podataka IO0CLR = 0x00000020; // RW LOW način zakašnjenja u načinu pisanja (2); IO0CLR = 0x00000040; // EN = 0, RS i RW nepromijenjeni (tj. RS = 1, RW = 0) vrijeme odgode (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12)); // šalje donji grickanje IO0SET = 0x00000050; // RS & EN HIGH IO0CLR = 0x00000020; vrijeme odgode (2); IO0CLR = 0x00000040; vrijeme odgode (5); i ++; } }
Za prikaz tih vrijednosti ADC i PWM koristimo sljedeće redove u funkciji int main () .
LCD_SEND (0x80); sprintf (displayadc, "adcvalue =% f", radni ciklus); LCD_DISPLAY (displayadc); // Prikaz vrijednosti ADC (0 do 1023) angle = (adcvalue / 5.7); // Formula za pretvaranje vrijednosti ADC u kut (o do 180 stupnjeva) LCD_SEND (0xC0); sprintf (anglevalue, "ANGLE =%. 2f stupnjeva", kut); LCD_DISPLAY (kutna vrijednost);

Kompletni kôd i video opis vodiča dati su u nastavku
