Teach Lecciones con laboratorios remotos

Lección Teach

STM32 Mbed CodeIDE (7/8): control de posición de servo

El alumnado controla un servo con pulsos PWM de Mbed, prueba posiciones con seguridad y registra evidencia aproximada de movimiento en el montaje remoto STM32.

  • STM32 Nucleo (Mbed)
  • 60 min
  • Secundaria (16–19 años)
  • Español
  • Sistemas embebidos
STM32 Nucleo (Mbed)
STM32 Nucleo (Mbed)

Resultados de aprendizaje

  • Controlar una salida de servo con PwmOut de Mbed.

  • Mapear una lectura de potenciómetro a un ángulo aproximado.

  • Usar evidencia serie para apoyar una observación que puede ser difícil de juzgar visualmente.

Vista previa de la actividad del estudiante

Contenido de la actividad

Solo vista previa. En una sesión de clase, los estudiantes pueden completar respuestas y entregar su trabajo al docente.

1

Conceptos básicos de ancho de pulso de servo

10 min

PWM para un LED cambia el brillo medio. Un servo también usa pulsos repetidos, pero el valor importante es el ancho del pulso:

- unos 500 microsegundos: un extremo del recorrido
- unos 1500 microsegundos: centro
- unos 2500 microsegundos: otro extremo del recorrido

En Mbed, la señal de servo se produce con PwmOut. servo.period_ms(20) fija el periodo de repetición habitual de 20 ms, y servo.pulsewidth_us(...) cambia el ancho del pulso alto que el servo interpreta como posición.

El ángulo mecánico exacto puede variar. Tu tarea es mostrar una relación controlada: un valor bajo del potenciómetro da una posición, un valor alto da otra, y la salida serie coincide con tu mapeo.

La cámara puede mostrar el servo solo como un brazo pequeño en la placa de entrenamiento. Trata angle como una estimación calculada por tu código. La evidencia más fuerte es la combinación de pulse_us serie, estimación de ángulo serie y un cambio visible amplio en la posición del servo.

Lista de pines y evidencias para esta lección:

- Salida de señal de servo: PA_15
- Potenciómetro usado después: Pot. pot2 -> PC_1
- Evidencia serie requerida: pulse_us
- Evidencia de cámara: cambio amplio de posición del servo, no una medición precisa de ángulo

Servo, Pot. pot2 y evidencia serie

Captura etiquetada del laboratorio STM32WB que muestra el brazo de servo controlado desde PA15, Pot. pot2 como entrada analógica PC1 y líneas de consola con evidencia de percent, angle y pulse_us.

Usa la cámara para evidencia de posición amplia y la consola para evidencia exacta de ancho de pulso. No afirmes ángulos mecánicos precisos solo a partir de la vista de cámara.

Si tu código mapea un valor bajo del potenciómetro a 500 microsegundos y un valor alto a 2500 microsegundos, ¿qué debería ocurrir al mover el potenciómetro de bajo a alto?

2

Ejecutar una prueba de tres posiciones

20 min

  1. Abre el laboratorio STM32 Mbed CodeIDE.

  2. Abre main.cpp.

  3. Reemplaza el archivo con el programa siguiente.

  4. Guarda, compila y carga.

  5. Observa la cámara y la consola a la vez.

  6. Busca tres posiciones amplias del servo.

  7. Registra los anchos de pulso serie y lo que observaste.

#include "mbed.h"

PwmOut servo(PA_15);

void set_servo_us(int pulse_us) {
    servo.pulsewidth_us(pulse_us);
}

int main() {
    servo.period_ms(20);
    printf("Servo three-position test start\n");

    while (true) {
        set_servo_us(500);
        printf("pulse_us=500 position=low\n");
        ThisThread::sleep_for(2000ms);

        set_servo_us(1500);
        printf("pulse_us=1500 position=middle\n");
        ThisThread::sleep_for(2000ms);

        set_servo_us(2500);
        printf("pulse_us=2500 position=high\n");
        ThisThread::sleep_for(2000ms);
    }
}

Rellena tres filas, una por cada ancho de pulso fijo: 500 us, 1500 us y 2500 us. Copia el ancho de pulso impreso y la posición impresa. En la columna Confianza, escribe clara, parcial o poco clara según si la cámara mostró un cambio visible de posición. Si el movimiento no se ve claro, escribe poco clara y describe lo que sí pudiste ver en vez de inventar un ángulo preciso.

Tabla de anchos de pulso fijos de servo

Ancho de pulso Posición impresa Movimiento o posición observado Confianza
3

Mapear potenciómetro a ángulo de servo

22 min

Ahora mapea AnalogIn PC_1 a un ángulo y un ancho de pulso aproximados. Usa el deslizador Pot. pot2 para PC_1.

  1. Reemplaza main.cpp con el programa siguiente.

  2. Guarda, compila y carga.

  3. Mueve el deslizador Pot. pot2 a posiciones baja, media y alta.

  4. Registra el porcentaje, ángulo, ancho de pulso y movimiento observado.

#include "mbed.h"

AnalogIn pot(PC_1);
PwmOut servo(PA_15);

int main() {
    servo.period_ms(20);
    printf("Potentiometer servo control start\n");

    while (true) {
        float reading = pot.read();
        int percent = (int)(reading * 100.0f);
        int angle = (int)(reading * 180.0f);
        int pulse_us = 500 + (int)(reading * 2000.0f);

        servo.pulsewidth_us(pulse_us);

        printf("percent=%d angle=%d pulse_us=%d\n",
               percent,
               angle,
               pulse_us);
        ThisThread::sleep_for(500ms);
    }
}

Rellena tres filas para posiciones baja, media y alta del potenciómetro. Copia el porcentaje, la estimación de ángulo y el ancho de pulso impresos antes de juzgar el movimiento. El valor serie pulse_us es evidencia obligatoria; la observación de cámara es solo una comprobación amplia de posición.

Tabla de evidencia de potenciómetro a servo

Posición del potenciómetro Porcentaje serie Estimación de ángulo serie pulse_us serie Posición de servo observada

Usa tus filas baja, media y alta para explicar si el potenciómetro controló el servo como se esperaba. Incluye la tendencia serie de pulse_us y la observación amplia de la cámara.

4

Enviar tu código

8 min

Adjunta tu main.cpp final guardado

Pulsa Comprobar archivos guardados, confirma que main.cpp contiene la versión de servo controlado por potenciómetro y luego pulsa Adjuntar código guardado. Después de adjuntar el código, pulsa Enviar entrega al final de la actividad.