- Componente necesare
- Diagrama circuitului și conexiunile
- Detalii pin SMT32F103C8
- Programare STM32 pentru servomotor
În electronică, motoarele servo sunt utilizate în cea mai mare parte în proiecte de robotică datorită acurateței și manevrării lor ușoare. Servomotorele au dimensiuni mai mici și sunt foarte eficiente și eficiente din punct de vedere energetic. Acestea oferă un cuplu ridicat și pot fi utilizate pentru ridicarea sau împingerea greutăților în conformitate cu specificațiile motoarelor. În acest tutorial vom afla despre Servo Motor și cum să interfațați Servo cu placa STM32F103C8. Un potențiometru este, de asemenea, interfațat pentru a varia poziția arborelui servomotorului și un LCD pentru a afișa valoarea unghiului.
Componente necesare
- Placă STM32F103C8 (Blue Pill)
- Servomotor (SG90)
- LCD (16x2)
- Potențiometru
- Breadboard
- Sârme jumper
Diagrama circuitului și conexiunile
Detalii pin SMT32F103C8
În STM32F103C8, avem 10 pini ADC (PA0-PB1) și aici folosim un singur pini (PA3) pentru citire analogică () pentru setarea poziției arborelui motorului prin potențiometru. De asemenea, printre 15 pini PWM de STM32 (PA0, PA1, PA2, PA3, PA6, PA7, PA8, PA9, PA10, PB0, PB1, PB6, PB7, PB8, PB9), un pin va fi utilizat pentru furnizarea impulsurilor către Servo pinul PWM al motorului (de obicei este de culoare portocalie).
Puteți afla mai multe despre PWM și ADC citind mai jos articolele detaliate:
- Cum se utilizează ADC în STM32F103C8
- Modulația lățimii impulsurilor (PWM) în STM32F103C8
Conexiune între STM32F103C8 și LCD
STM32F103C8 | LCD |
GND | VSS |
+ 5V | VDD |
La codul PIN al centrului potențiometrului | V0 |
PB0 | RS |
GND | RW |
PB1 | E |
PB10 | D4 |
PB11 | D5 |
PC13 | D6 |
PC14 | D7 |
+ 5V | A |
GND | K |
Conexiune între servomotor și STM32F103C8
STM32F103C8 |
SERVO |
+ 5V |
ROȘU (+ 5V) |
PA0 |
ORANGE (pin PWM) |
GND |
MARO (GND) |
Conexiuni cu potențiometre
Am folosit DOUĂ potențiometre aici
1. Potențiometrul din dreapta este utilizat pentru a varia contrastul LCD. Are trei pini, pinul stâng este pentru + 5V și dreapta este pentru GND, iar pinul central este conectat la V0 al ecranului LCD.
2. Potențiometrul din stânga este utilizat pentru a varia poziția arborelui servomotorului prin controlul tensiunii de intrare analogice, pinul stâng are intrare 3.3V și dreapta are GND, iar ieșirea centrală este conectată la (PA3) a STM32
Programare STM32 pentru servomotor
La fel ca tutorialul nostru anterior, am programat STM32F103C8 cu Arduino IDE prin port USB fără a folosi programator FTDI. Putem continua să-l programăm ca un Arduino. Codul complet este dat mai jos la sfârșitul proiectului.
Mai întâi am inclus fișiere de bibliotecă pentru funcții servo și LCD:
#include
Apoi a declarat pinii pentru afișajul LCD și l-a inițializat. De asemenea, au declarat câteva alte variabile pentru PWM și potențiometru:
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;
Aici am creat servo variabil cu tip de date Servo și l-am atașat la pinul PWM declarat anterior.
Servo servo; servo.attach (servoPin);
Apoi citiți Valoarea analogică de la pinul PA3, deoarece este un pin ADC, convertește tensiunea analogică (0-3,3) în formă digitală (0-4095)
analogRead (potPin);
Deoarece ieșirea digitală are o rezoluție de 12 biți, trebuie să obținem valori în intervalul de grade (0-170), împarte valoarea ADC (0-4096) în funcție de unghiul maxim de 170 grade, astfel încât să împărțim cu 24.
unghiul = (citire / 24);
Declarația de mai jos face ca servomotorul să rotească arborele la unghiul dat.
servo.scrie (unghi);
Codul complet este dat mai jos și bine explicat prin comentarii.