- Kinakailangan ang Mga Bahagi
- Circuit Diagram at Mga Koneksyon
- Mga Detalye ng SMT32F103C8 Pin
- Programming STM32 para sa Servo Motor
Sa electronics, ang mga Servo motor ay kadalasang ginagamit sa Mga Proyekto ng Robotiko dahil sa kanilang katumpakan at madaling paghawak. Ang mga motor ng servo ay mas maliit sa laki at ang mga ito ay napaka-epektibo at mahusay sa enerhiya. Nagbibigay ang mga ito ng mataas na metalikang kuwintas at maaaring magamit upang iangat o itulak ang mga timbang ayon sa pagtutukoy ng motor. Sa tutorial na ito malalaman natin ang tungkol sa Servo Motor at Paano i-interface ang Servo sa board ng STM32F103C8. Ang isang potensyomiter ay din interfaced upang mag-iba ang posisyon ng baras ng servo motor, at isang LCD upang ipakita ang halaga ng anggulo.
Kinakailangan ang Mga Bahagi
- STM32F103C8 (Blue Pill) Lupon
- Servo Motor (SG90)
- LCD (16x2)
- Potensyomiter
- Breadboard
- Jumper Wires
Circuit Diagram at Mga Koneksyon
Mga Detalye ng SMT32F103C8 Pin
Sa STM32F103C8, mayroon kaming 10 ADC pin (PA0-PB1), at dito gumagamit lamang kami ng isang pin (PA3) para sa analogread () para sa pagtatakda ng posisyon ng baras ng motor ayon sa potensyomiter. Kabilang din sa 15 PWM na pin ng STM32 (PA0, PA1, PA2, PA3, PA6, PA7, PA8, PA9, PA10, PB0, PB1, PB6, PB7, PB8, PB9), isang pin ang gagamitin para sa pagbibigay ng mga pulso sa Servo PWM pin ng motor (karaniwang kulay kahel ito).
Maaari kang matuto nang higit pa tungkol sa PWM at ADC sa pamamagitan ng pagbabasa sa ibaba ng mga detalyadong artikulo:
- Paano gamitin ang ADC sa STM32F103C8
- Pulse width Modulation (PWM) sa STM32F103C8
Koneksyon sa pagitan ng STM32F103C8 at LCD
STM32F103C8 | LCD |
GND | VSS |
+ 5V | VDD |
Sa Potentiometer Center PIN | V0 |
PB0 | Ang RS |
GND | RW |
PB1 | E |
PB10 | D4 |
PB11 | D5 |
PC13 | D6 |
PC14 | D7 |
+ 5V | A |
GND | K |
Koneksyon sa pagitan ng Servo motor at STM32F103C8
STM32F103C8 |
SERVO |
+ 5V |
PULA (+ 5V) |
PA0 |
ORANGE (PWM pin) |
GND |
BROWN (GND) |
Mga Koneksyon ng Potenometro
DALAWA ang potentiometers na ginamit namin dito
1. Ang potensyomiter sa kanan ay ginagamit upang ibahin ang kaibahan ng LCD. Mayroon itong tatlong mga pin, ang kaliwang pin ay para sa + 5V at ang kanan ay para sa GND at ang center pin ay konektado sa V0 ng LCD.
2. Ang potensyomiter sa kaliwa ay ginagamit upang maiiba ang posisyon ng baras ng servo motor sa pamamagitan ng pagkontrol sa boltahe ng input ng analog, ang kaliwang pin ay may input na 3.3V at ang kanan ay may GND at ang gitna ng output ay konektado sa (PA3) ng STM32
Programming STM32 para sa Servo Motor
Tulad ng aming nakaraang tutorial, pinrograma namin ang STM32F103C8 kasama ang Arduino IDE sa pamamagitan ng USB port nang hindi gumagamit ng FTDI programmer. Maaari naming magpatuloy sa pag-program nito tulad ng isang Arduino. Ang kumpletong code ay ibinibigay sa ibaba sa pagtatapos ng proyekto.
Una ay isinama namin ang mga file ng silid-aklatan para sa mga pagpapaandar ng servo at LCD:
# isama
Pagkatapos ay idineklara ang mga pin para sa pagpapakita ng LCD at pinasimulan ito. Idineklara rin ang ilang iba pang mga variable para sa PWM at 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;
Dito nilikha namin ang variable servo na may datatype Servo at ikinabit ito sa dating idineklarang PWM pin.
Servo servo; servo.attach (servoPin);
Pagkatapos basahin ang halaga ng Analog mula sa pin PA3 dahil ito ay isang ADC pin na pinapalitan nito ang analog voltage (0-3.3) sa digital form (0-4095)
analogRead (potPin);
Tulad ng digital na output ay 12-bit na resolusyon, kailangan naming makakuha ng mga halaga sa saklaw ng degree (0-170), hinahati nito ang halaga ng ADC (0-4096) ayon sa max na anggulo 170 deg kaya't hinati tayo sa 24.
anggulo = (nagbabasa / 24);
Sa ibaba ng pahayag ay ginagawang paikutin ng servo motor ang baras sa anggulo na ibinigay.
servo.write (anggulo);
Ang kumpletong code ay ibinibigay sa ibaba at mahusay na ipinaliwanag ng mga komento.