- Komponenter krävs
- Kretsschema och anslutningar
- SMT32F103C8 stiftdetaljer
- Programmering STM32 för servomotor
Inom elektronik används servomotorer mest i robotprojekt på grund av deras noggrannhet och enkel hantering. Servomotorer är mindre i storlek och de är mycket effektiva och energieffektiva. De ger högt vridmoment och kan användas för att lyfta eller skjuta vikter enligt motorns specifikation. I denna handledning lär vi oss om Servo Motor och hur man gränssnitt Servo med STM32F103C8-kortet. En potentiometer är också gränssnitt för att variera positionen på servomotorns axel och en LCD för att visa vinkelvärdet.
Komponenter krävs
- STM32F103C8 (Blue Pill) Board
- Servomotor (SG90)
- LCD (16x2)
- Potentiometer
- Bakbord
- Bygeltrådar
Kretsschema och anslutningar
SMT32F103C8 stiftdetaljer
I STM32F103C8 har vi 10 ADC-stift (PA0-PB1), och här använder vi bara en stift (PA3) för analogläsning () för att ställa in motorns axelposition med potentiometer. Bland 15 PWM-stift av STM32 (PA0, PA1, PA2, PA3, PA6, PA7, PA8, PA9, PA10, PB0, PB1, PB6, PB7, PB8, PB9) kommer en stift att användas för att tillhandahålla pulser till Servo motorns PWM-stift (vanligtvis är den orange i färg).
Du kan lära dig mer om PWM och ADC genom att läsa nedan för detaljerade artiklar:
- Hur man använder ADC i STM32F103C8
- Pulsbreddsmodulering (PWM) i STM32F103C8
Anslutning mellan STM32F103C8 och LCD
STM32F103C8 | LCD |
GND | VSS |
+ 5V | VDD |
Till Potentiometer Center PIN | V0 |
PB0 | RS |
GND | RW |
PB1 | E |
PB10 | D4 |
PB11 | D5 |
PC13 | D6 |
PC14 | D7 |
+ 5V | A |
GND | K |
Anslutning mellan servomotor och STM32F103C8
STM32F103C8 |
SERVO |
+ 5V |
RÖD (+ 5V) |
PA0 |
ORANGE (PWM-stift) |
GND |
BRUN (GND) |
Potentiometersanslutningar
Vi har använt två potentiometrar här
1. Potentiometern till höger används för att variera LCD-kontrasten. Den har tre stift, vänster stift är för + 5V och höger är för GND och mittstift är ansluten till V0 på LCD-skärmen.
2. Potentiometern till vänster används för att ändra servomotorns axelposition genom att kontrollera den analoga ingångsspänningen, den vänstra stiftet har ingång 3,3V och höger har GND och mittutgången är ansluten till (PA3) på STM32
Programmering STM32 för servomotor
Liksom vår tidigare handledning programmerade vi STM32F103C8 med Arduino IDE via USB-port utan att använda FTDI-programmerare. Vi kan fortsätta programmera det som en Arduino. Komplett kod ges nedan i slutet av projektet.
Först har vi inkluderat biblioteksfiler för servo- och LCD-funktioner:
#omfatta
Sedan deklarerade stift för LCD-skärm och initialiserades. Förklarade också några andra variabler för PWM och potentiometer:
konst 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;
Här har vi skapat variabel servo med datatyp Servo och bifogat den till tidigare deklarerad PWM-stift.
Servoservo; servo.attach (servoPin);
Läs sedan Analogt värde från stift PA3 eftersom det är ett ADC-stift, det konverterar analog spänning (0-3.3) till digital form (0-4095)
analogRead (potPin);
Eftersom den digitala utgången är 12-bitars upplösning, måste vi få värden i graden (0-170), den delar ADC-värdet (0-4096) enligt maxvinkeln 170 grader så vi delar med 24.
vinkel = (läsning / 24);
Nedanstående uttalande gör att servomotorn roterar axeln i angiven vinkel.
servo.write (vinkel);
Komplett kod ges nedan och förklaras väl av kommentarer.