- Componentes necessários
- Diagrama de circuito e conexões
- Detalhes do pino SMT32F103C8
- Programando STM32 para servo motor
Na eletrônica, os servo motores são mais usados em projetos de robótica devido à sua precisão e fácil manuseio. Servo motores são menores em tamanho e são muito eficazes e eficientes em termos de energia. Eles fornecem alto torque e podem ser usados para levantar ou empurrar pesos de acordo com as especificações dos motores. Neste tutorial, aprenderemos sobre Servo Motor e como fazer a interface do Servo com a placa STM32F103C8. Um potenciômetro também é conectado para variar a posição do eixo do servo motor e um LCD para exibir o valor do ângulo.
Componentes necessários
- Placa STM32F103C8 (Pílula Azul)
- Servo motor (SG90)
- LCD (16x2)
- Potenciômetro
- Tábua de pão
- Jumper Wires
Diagrama de circuito e conexões
Detalhes do pino SMT32F103C8
Em STM32F103C8, temos 10 pinos ADC (PA0-PB1), e aqui usamos apenas um pino (PA3) para analógico () para definir a posição do eixo do motor por potenciômetro. Também entre 15 pinos PWM de STM32 (PA0, PA1, PA2, PA3, PA6, PA7, PA8, PA9, PA10, PB0, PB1, PB6, PB7, PB8, PB9), um pino será usado para fornecer pulsos ao Servo pino PWM do motor (geralmente é laranja).
Você pode aprender mais sobre PWM e ADC lendo artigos detalhados abaixo:
- Como usar ADC em STM32F103C8
- Modulação de largura de pulso (PWM) em STM32F103C8
Conexão entre STM32F103C8 e LCD
STM32F103C8 | LCD |
GND | VSS |
+ 5V | VDD |
Para o PIN do centro do potenciômetro | V0 |
PB0 | RS |
GND | RW |
PB1 | E |
PB10 | D4 |
PB11 | D5 |
PC13 | D6 |
PC14 | D7 |
+ 5V | UMA |
GND | K |
Conexão entre servo motor e STM32F103C8
STM32F103C8 |
SERVO |
+ 5V |
VERMELHO (+ 5V) |
PA0 |
LARANJA (pino PWM) |
GND |
MARROM (GND) |
Conexões de potenciômetros
Usamos DOIS potenciômetros aqui
1. O potenciômetro à direita é usado para variar o contraste do LCD. Ele tem três pinos, o pino esquerdo é para + 5V e o direito é para GND e o pino central é conectado a V0 do LCD.
2. O potenciômetro à esquerda é usado para variar a posição do eixo do servo motor controlando a tensão de entrada analógica, o pino esquerdo tem entrada 3,3 V e o direito tem GND e a saída central é conectada a (PA3) do STM32
Programando STM32 para servo motor
Como nosso tutorial anterior, programamos o STM32F103C8 com Arduino IDE através da porta USB sem usar o programador FTDI. Podemos prosseguir com a programação como um Arduino. O código completo é fornecido abaixo no final do projeto.
Primeiro, incluímos arquivos de biblioteca para funções servo e LCD:
#incluir
Em seguida, declarou pinos para o display LCD e o inicializou. Também declarou algumas outras variáveis para PWM e potenciômetro:
const int rs = PB0, en = PB1, d4 = PB10, d5 = PB11, d6 = PC13, d7 = PC14; LiquidCrystal lcd (rs, en, d4, d5, d6, d7); servoPin int = PA0; int potPin = PA3;
Aqui criamos um servo variável com o tipo de dados Servo e o anexamos ao pino PWM previamente declarado.
Servo servo; servo.attach (servoPin);
Em seguida, leia o valor analógico do pino PA3, pois é um pino ADC, ele converte a tensão analógica (0-3.3) em forma digital (0-4095)
analogRead (potPin);
Como a saída digital tem resolução de 12 bits, precisamos obter valores na faixa de graus (0-170), ele divide o valor ADC (0-4096) de acordo com o ângulo máximo de 170 graus, então dividimos com 24.
ângulo = (leitura / 24);
A declaração abaixo faz com que o servo motor gire o eixo no ângulo determinado.
servo.write (ângulo);
O código completo é fornecido abaixo e bem explicado por comentários.