- Būtini komponentai
- Grandinės schema ir jungtys
- SMT32F103C8 kaiščių informacija
- STM32 programavimas servovarikliui
Elektronikoje servo varikliai dažniausiai naudojami robotikos projektuose dėl jų tikslumo ir paprasto valdymo. Servovarikliai yra mažesnio dydžio, jie yra labai efektyvūs ir energiją taupantys. Jie užtikrina didelį sukimo momentą ir gali būti naudojami kilnoti ar stumti svorius pagal variklių specifikacijas. Šioje pamokoje sužinosime apie servo variklį ir kaip suderinti servo su STM32F103C8 plokšte. Taip pat yra sąsaja su potenciometru, kad būtų galima pakeisti servo variklio veleno padėtį, ir LCD, kad būtų rodoma kampo vertė.
Būtini komponentai
- STM32F103C8 („Blue Pill“) lenta
- Servo variklis (SG90)
- LCD (16x2)
- Potenciometras
- Bandomoji Lenta
- Šuolių laidai
Grandinės schema ir jungtys
SMT32F103C8 kaiščių informacija
Į STM32F103C8, rasta 10 ADC kaiščių (PA0-PB1), ir čia mes naudoti tik vieną kaištį (PA3) už analogread () nustatymo veleno padėtį variklio potenciometru. Taip pat tarp 15 STM32 kaiščių (PA0, PA1, PA2, PA3, PA6, PA7, PA8, PA9, PA10, PB0, PB1, PB6, PB7, PB8, PB9), vienas kaištis bus naudojamas impulsams servo tiekti variklio PWM kaištis (paprastai jis yra oranžinės spalvos).
Toliau perskaitydami išsamius straipsnius galite sužinoti daugiau apie PWM ir ADC:
- Kaip naudoti ADC programoje STM32F103C8
- Impulso pločio moduliacija (PWM) sistemoje STM32F103C8
Ryšys tarp STM32F103C8 ir LCD
STM32F103C8 | LCD ekranas |
BND | VSS |
+ 5 V | VDD |
Į potenciometro centro PIN kodą | V0 |
PB0 | RS |
BND | RW |
PB1 | E |
PB10 | D4 |
PB11 | D5 |
PC13 | D6 |
PC14 | D7 |
+ 5 V | A |
BND | K. |
Jungtis tarp servo variklio ir STM32F103C8
STM32F103C8 |
SERVO |
+ 5 V |
RAUDONA (+ 5 V) |
PA0 |
ORANGE (PWM kaištis) |
BND |
RUDA (GND) |
Potenciometrų jungtys
Čia mes panaudojome DU potenciometrų
1. Dešinėje pusėje esantis potenciometras naudojamas LCD kontrastui keisti. Jame yra trys kaiščiai, kairysis kaištis skirtas + 5 V, o dešinysis - GND, o centrinis kaištis yra prijungtas prie LCD V0.
2. Kairėje esantis potenciometras naudojamas servovariklio veleno padėčiai keisti valdant analoginės įėjimo įtampą, kairiajame kaište yra 3,3 V įėjimas, dešiniajame - GND, o centrinis išėjimas yra prijungtas prie STM32
STM32 programavimas servovarikliui
Kaip ir ankstesnę mokymo programą, mes užprogramavome STM32F103C8 su „Arduino IDE“ per USB prievadą, nenaudodami FTDI programuotojo. Mes galime tęsti jo programavimą kaip „Arduino“. Pilnas kodas pateiktas projekto pabaigoje.
Pirmiausia įtraukėme bibliotekos failus servo ir LCD funkcijoms:
# įtraukti
Tada paskelbė LCD ekrano kaiščius ir jį inicializavo. Taip pat paskelbė keletą kitų PWM ir potenciometro kintamųjų:
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;
Čia mes sukūrėme kintamą servo su duomenų tipu Servo ir pridėjome jį prie anksčiau deklaruoto PWM kaiščio.
Servo servo; servo.attach (servoPin);
Tada perskaitykite analoginę vertę iš kaiščio PA3, nes jis yra ADC kaištis, kuris konvertuoja analoginę įtampą (0-3,3) į skaitmeninę formą (0-4095)
analogRead (potPin);
Kadangi skaitmeninė išvestis yra 12 bitų skiriamoji geba, turime gauti reikšmes laipsnių diapazone (0–170), ji padalija ADC (0–4096) vertę pagal maksimalų 170 laipsnių kampą, taigi mes padalijame iš 24.
kampas = (skaitymas / 24);
Žemiau pateiktas teiginys priverčia servo variklį sukti veleną nurodytu kampu.
servo.write (kampas);
Pilnas kodas pateiktas žemiau ir gerai paaiškintas komentarais.