- Componentes requeridos
- Diagrama de circuito y conexiones
- Detalles del pin SMT32F103C8
- Programación de STM32 para servomotor
En electrónica, los servomotores se utilizan principalmente en proyectos de robótica debido a su precisión y fácil manejo. Los servomotores son de menor tamaño y son muy eficaces y energéticamente eficientes. Proporcionan un par elevado y se pueden utilizar para levantar o empujar pesos según las especificaciones del motor. En este tutorial aprenderemos sobre el servomotor y cómo interconectar el servo con la placa STM32F103C8. También se interconecta un potenciómetro para variar la posición del eje del servomotor y una pantalla LCD para mostrar el valor del ángulo.
Componentes requeridos
- Tablero STM32F103C8 (píldora azul)
- Servomotor (SG90)
- LCD (16x2)
- Potenciómetro
- Tablero de circuitos
- Cables de puente
Diagrama de circuito y conexiones
Detalles del pin SMT32F103C8
En STM32F103C8, tenemos 10 pines ADC (PA0-PB1), y aquí usamos solo un pin (PA3) para lectura analógica () para configurar la posición del eje del motor por potenciómetro. También entre los 15 pines PWM de STM32 (PA0, PA1, PA2, PA3, PA6, PA7, PA8, PA9, PA10, PB0, PB1, PB6, PB7, PB8, PB9), se utilizará un pin para proporcionar pulsos al Servo pin PWM del motor (normalmente es de color naranja).
Puede obtener más información sobre PWM y ADC leyendo a continuación los artículos detallados:
- Cómo utilizar ADC en STM32F103C8
- Modulación de ancho de pulso (PWM) en STM32F103C8
Conexión entre STM32F103C8 y LCD
STM32F103C8 | LCD |
GND | VSS |
+ 5V | VDD |
Al PIN central del potenciómetro | V0 |
PB0 | RS |
GND | RW |
PB1 | mi |
PB10 | D4 |
PB11 | D5 |
PC13 | D6 |
PC14 | D7 |
+ 5V | UN |
GND | K |
Conexión entre el servomotor y STM32F103C8
STM32F103C8 |
SERVO |
+ 5V |
ROJO (+ 5V) |
PA0 |
NARANJA (pin PWM) |
GND |
MARRÓN (GND) |
Conexiones de potenciómetros
Hemos usado DOS potenciómetros aquí
1. El potenciómetro de la derecha se usa para variar el contraste de la pantalla LCD. Tiene tres pines, el pin izquierdo es para + 5V y el derecho es para GND y el pin central está conectado a V0 de la pantalla LCD.
2. El potenciómetro de la izquierda se usa para variar la posición del eje del servomotor controlando el voltaje de entrada analógica, el pin izquierdo tiene una entrada de 3.3V y el derecho tiene GND y la salida central está conectada a (PA3) de STM32
Programación de STM32 para servomotor
Al igual que nuestro tutorial anterior, programamos el STM32F103C8 con Arduino IDE a través del puerto USB sin usar el programador FTDI. Podemos proceder a programarlo como un Arduino. El código completo se proporciona a continuación al final del proyecto.
Primero hemos incluido archivos de biblioteca para funciones de servo y LCD:
#incluir
Luego declaró los pines para la pantalla LCD y los inicializó. También declaró algunas otras variables para PWM y potenciómetro:
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;
Aquí hemos creado un servo variable con el tipo de datos Servo y lo hemos adjuntado al pin PWM previamente declarado.
Servo servo; servo.attach (servoPin);
Luego lea el valor analógico del pin PA3, ya que es un pin ADC que convierte el voltaje analógico (0-3.3) en forma digital (0-4095)
analogRead (potPin);
Como la salida digital tiene una resolución de 12 bits, necesitamos obtener valores en el rango de grados (0-170), divide el valor ADC (0-4096) de acuerdo con el ángulo máximo de 170 grados, por lo que dividimos con 24.
ángulo = (lectura / 24);
La siguiente declaración hace que el servomotor gire el eje en el ángulo dado.
servo.write (ángulo);
El código completo se proporciona a continuación y se explica bien en los comentarios.