- Необходими компоненти
- Електрическа схема и връзки
- SMT32F103C8 Подробности за щифта
- Програмиране на STM32 за серво мотор
В електрониката серво мотори се използват най-вече в проекти за роботика поради тяхната точност и лесна работа. Серво моторите са с по-малки размери и са много ефективни и енергийно ефективни. Те осигуряват висок въртящ момент и могат да се използват за повдигане или избутване на тежести според спецификацията на двигателите. В този урок ще научим за Servo Motor и как да свържем Servo с платката STM32F103C8. Потенциометърът също е свързан за промяна на позицията на вала на сервомотора и LCD за показване на стойността на ъгъла.
Необходими компоненти
- STM32F103C8 (Синьо хапче) дъска
- Серво мотор (SG90)
- LCD (16x2)
- Потенциометър
- Макет
- Джъмперни проводници
Електрическа схема и връзки
SMT32F103C8 Подробности за щифта
В STM32F103C8 имаме 10 ADC щифта (PA0-PB1) и тук използваме само един щифт (PA3) за аналогов четец () за задаване на положението на вала на двигателя чрез потенциометър. Също така сред 15 PWM щифта на STM32 (PA0, PA1, PA2, PA3, PA6, PA7, PA8, PA9, PA10, PB0, PB1, PB6, PB7, PB8, PB9), един щифт ще бъде използван за подаване на импулси към серво ШИМ на двигателя (обикновено той е оранжев на цвят).
Можете да научите повече за ШИМ и ADC, като прочетете по-долу за подробни статии:
- Как да използвам ADC в STM32F103C8
- Модулация с широчина на импулса (ШИМ) в STM32F103C8
Връзка между STM32F103C8 и LCD
STM32F103C8 | LCD |
GND | VSS |
+ 5V | VDD |
Към ПИН на центъра на потенциометъра | V0 |
PB0 | RS |
GND | RW |
PB1 | Е. |
PB10 | D4 |
PB11 | D5 |
PC13 | D6 |
PC14 | D7 |
+ 5V | A |
GND | К |
Връзка между серво мотор и STM32F103C8
STM32F103C8 |
СЕРВО |
+ 5V |
ЧЕРВЕН (+ 5V) |
PA0 |
ОРАНЖЕВ (ШИМ щифт) |
GND |
КАФЯВ (GND) |
Потенциометри Връзки
Тук сме използвали ДВЕ потенциометри
1. Потенциометърът отдясно се използва за промяна на LCD контраста. Той има три щифта, левият щифт е за + 5V и десният е за GND, а централният щифт е свързан към V0 на LCD.
2. Потенциометърът отляво се използва за промяна на положението на вала на сервомотора чрез управление на аналоговото входно напрежение, левият щифт има вход 3.3V, а десният има GND, а централният изход е свързан към (PA3) на STM32
Програмиране на STM32 за серво мотор
Подобно на нашия предишен урок, ние програмирахме STM32F103C8 с Arduino IDE през USB порт, без да използваме FTDI програмист. Можем да продължим да го програмираме като Arduino. Пълният код е даден по-долу в края на проекта.
Първо включихме библиотечни файлове за серво и LCD функции:
#include
След това декларира пинове за LCD дисплей и го инициализира. Също така декларирани няколко други променливи за ШИМ и потенциометър:
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;
Тук създадохме променлива сервосигнализация с тип данни Servo и я прикачихме към предварително деклариран PWM щифт.
Серво серво; servo.attach (servoPin);
След това прочетете аналогова стойност от щифт PA3, тъй като е ADC щифт, той преобразува аналоговото напрежение (0-3,3) в цифрова форма (0-4095)
analogRead (potPin);
Тъй като цифровият изход е 12-битова разделителна способност, трябва да получим стойности в диапазон на степен (0-170), той разделя стойността на ADC (0-4096) според максималния ъгъл 170 градуса, така че разделяме с 24.
ъгъл = (четене / 24);
По-долу изявлението прави серво мотора да върти вала под даден ъгъл.
servo.write (ъгъл);
Пълният код е даден по-долу и е добре обяснен с коментари.