- Componenten vereist
- Schakelschema en aansluitingen
- SMT32F103C8 Pin-gegevens
- Programmering STM32 voor servomotor
In de elektronica worden servomotoren meestal gebruikt in robotica-projecten vanwege hun nauwkeurigheid en eenvoudige bediening. Servomotoren zijn kleiner van formaat en ze zijn zeer effectief en energiezuinig. Ze bieden een hoog koppel en kunnen worden gebruikt om gewichten te heffen of te duwen volgens motorspecificatie. In deze tutorial zullen we leren over Servo Motor en hoe Servo te communiceren met STM32F103C8 board. Een potentiometer is ook aangesloten om de positie van de servomotoras te variëren, en een LCD om de hoekwaarde weer te geven.
Componenten vereist
- STM32F103C8 (blauwe pil) bord
- Servomotor (SG90)
- LCD (16x2)
- Potentiometer
- Breadboard
- Doorverbindingsdraden
Schakelschema en aansluitingen
SMT32F103C8 Pin-gegevens
In STM32F103C8 hebben we 10 ADC-pinnen (PA0-PB1), en hier gebruiken we slechts één pin (PA3) voor analogread () voor het instellen van de aspositie van de motor met een potentiometer. Onder 15 PWM-pinnen van STM32 (PA0, PA1, PA2, PA3, PA6, PA7, PA8, PA9, PA10, PB0, PB1, PB6, PB7, PB8, PB9), zal één pin worden gebruikt voor het leveren van pulsen aan de servo motor PWM-pin (meestal is deze oranje van kleur).
U kunt meer te weten komen over PWM en ADC door onderstaande gedetailleerde artikelen te lezen:
- Hoe ADC te gebruiken in STM32F103C8
- Pulsbreedtemodulatie (PWM) in STM32F103C8
Verbinding tussen STM32F103C8 en LCD
STM32F103C8 | LCD |
GND | VSS |
+ 5V | VDD |
Naar Potentiometer Center PIN | V0 |
PB0 | RS |
GND | RW |
PB1 | E. |
PB10 | D4 |
PB11 | D5 |
PC13 | D6 |
PC14 | D7 |
+ 5V | EEN |
GND | K |
Verbinding tussen Servomotor en STM32F103C8
STM32F103C8 |
SERVO |
+ 5V |
ROOD (+ 5V) |
PA0 |
ORANJE (PWM-pin) |
GND |
BRUIN (GND) |
Potentiometers aansluitingen
We hebben hier TWEE potentiometers gebruikt
1. De potentiometer aan de rechterkant wordt gebruikt om het LCD-contrast te variëren. Het heeft drie pinnen, linker pin is voor + 5V en rechts is voor GND en middelste pin is verbonden met V0 van het LCD-scherm.
2. De potentiometer aan de linkerkant wordt gebruikt om de aspositie van de servomotor te variëren door de analoge ingangsspanning te regelen, de linkerpin heeft een ingang van 3.3V en de rechter heeft GND en de centrale uitgang is verbonden met (PA3) van STM32
Programmering STM32 voor servomotor
Net als onze vorige tutorial hebben we de STM32F103C8 geprogrammeerd met Arduino IDE via USB-poort zonder FTDI-programmeur te gebruiken. We kunnen doorgaan met het programmeren als een Arduino. De volledige code wordt hieronder aan het einde van het project gegeven.
Eerst hebben we bibliotheekbestanden voor servo- en LCD-functies toegevoegd:
# omvatten
Vervolgens pinnen voor LCD-scherm verklaard en geïnitialiseerd. Verklaarde ook enkele andere variabelen voor PWM en 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;
Hier hebben we een variabele servo gemaakt met datatype Servo en deze aan een eerder gedeclareerde PWM-pin bevestigd.
Servo servo; servo.attach (servoPin);
Lees vervolgens Analoge waarde van pin PA3, want het is een ADC-pin die analoge spanning (0-3.3) omzet in digitale vorm (0-4095)
analogRead (potPin);
Omdat de digitale uitvoer een resolutie van 12 bits heeft, moeten we waarden binnen het bereik van graden (0-170) krijgen, het verdeelt de ADC-waarde (0-4096) volgens de maximale hoek van 170 graden, dus we delen door 24.
hoek = (lezen / 24);
Onderstaande verklaring maakt dat de servomotor de as onder een bepaalde hoek roteert.
servo.write (hoek);
De volledige code wordt hieronder gegeven en goed uitgelegd door opmerkingen.