- Komponenter, der kræves
- Kredsløbsdiagram og forbindelser
- SMT32F103C8 Pin-detaljer
- Programmering STM32 til servomotor
Inden for elektronik bruges servomotorer mest i robotprojekter på grund af deres nøjagtighed og nem håndtering. Servomotorer er mindre i størrelse, og de er meget effektive og energieffektive. De giver højt drejningsmoment og kan bruges til at løfte eller skubbe vægte i henhold til motorens specifikation. I denne vejledning lærer vi om Servo Motor og hvordan man bruger interface Servo med STM32F103C8-kortet. Et potentiometer er også grænseflade for at variere placeringen af servomotorens aksel og et LCD-display for at vise vinkelværdien.
Komponenter, der kræves
- STM32F103C8 (Blue Pill) Board
- Servomotor (SG90)
- LCD (16x2)
- Potentiometer
- Brødbræt
- Jumper Wires
Kredsløbsdiagram og forbindelser
SMT32F103C8 Pin-detaljer
I STM32F103C8 har vi 10 ADC-ben (PA0-PB1), og her bruger vi kun en ben (PA3) til analoglæsning () til indstilling af motorens akselposition med potentiometer. Blandt de 15 PWM-ben på STM32 (PA0, PA1, PA2, PA3, PA6, PA7, PA8, PA9, PA10, PB0, PB1, PB6, PB7, PB8, PB9), vil en ben bruges til at give pulser til servoen motorens PWM-pin (normalt er den orange i farven).
Du kan lære mere om PWM og ADC ved at læse nedenfor for detaljerede artikler:
- Sådan bruges ADC i STM32F103C8
- Pulsbreddemodulation (PWM) i STM32F103C8
Forbindelse mellem STM32F103C8 og LCD
STM32F103C8 | LCD |
GND | VSS |
+ 5V | VDD |
Til Potentiometer Center PIN | V0 |
PB0 | RS |
GND | RW |
PB1 | E |
PB10 | D4 |
PB11 | D5 |
PC13 | D6 |
PC14 | D7 |
+ 5V | EN |
GND | K |
Forbindelse mellem servomotor og STM32F103C8
STM32F103C8 |
SERVO |
+ 5V |
RØD (+ 5V) |
PA0 |
ORANGE (PWM-pin) |
GND |
BRUN (GND) |
Potentiometreforbindelser
Vi har brugt TO potentiometre her
1. Potentiometeret til højre bruges til at variere LCD-kontrasten. Den har tre ben, venstre ben er til + 5V, og højre er til GND, og midterstift er forbundet til V0 på LCD'et.
2. Potentiometeret til venstre bruges til at variere akselmotoren på servomotoren ved at kontrollere den analoge indgangsspænding, den venstre pin har indgang 3.3V og højre har GND og centerudgangen er forbundet til (PA3) på STM32
Programmering STM32 til servomotor
Som vores tidligere tutorial programmerede vi STM32F103C8 med Arduino IDE via USB-port uden at bruge FTDI-programmerer. Vi kan fortsætte med at programmere det som en Arduino. Komplet kode er angivet nedenfor i slutningen af projektet.
Først har vi inkluderet biblioteksfiler til servo- og LCD-funktioner:
#omfatte
Derefter erklærede stifter til LCD-skærm og initialiserede den. Også erklæret få andre variabler for PWM og potentiometer:
const int rs = PB0, en = PB1, d4 = PB10, d5 = PB11, d6 = PC13, d7 = PC14; LiquidCrystal lcd (rs, en, d4, d5, d6, d7); int servoPin = PA0; int potPin = PA3;
Her har vi oprettet variabel servo med datatype Servo og knyttet den til tidligere erklæret PWM-pin.
Servo servo; servo.attach (servoPin);
Læs derefter Analog værdi fra pin PA3, da det er en ADC-pin, den konverterer analog spænding (0-3.3) til digital form (0-4095)
analogRead (potPin);
Da den digitale udgang er 12-bit opløsning, er vi nødt til at få værdier inden for graden (0-170), den deler ADC (0-4096) -værdien i henhold til den maksimale vinkel 170 grader, så vi deler med 24.
vinkel = (aflæsning / 24);
Nedenstående erklæring får servomotoren til at rotere akslen i den givne vinkel.
servo.write (vinkel);
Komplet kode er angivet nedenfor og godt forklaret med kommentarer.