Teach Urruneko laborategidun ikasgaiak

Teach ikasgaia

STM32 Mbed CodeIDE (7/8): serbomotorraren posizio-kontrola

Kontrolatu serbomotorra Mbed-en PWM pultsuekin, probatu posizioak emandako mugen barruan eta jaso mugimenduaren ebidentzia urruneko STM32 muntaketan.

  • STM32 Nucleo (Mbed)
  • 60 min
  • Batxilergoa / Elektronikako Lanbide Heziketako hasierako maila
  • eu
  • Embedded systems

Hasi saioa irakasle-kontu batekin klase-saioa prestatzeko. Ikasleak klase-kode batekin sartzen dira.

Pot. pot2 kontrola PC_1 pinean: AnalogIn bidezko 0,0–1,0 irakurketa pulse_us bidezko 700–2300 mikrosegundora bihurtzen da, PA_15 serbomotor-irteeran erabiltzeko.
STM32 Nucleo (Mbed)

Ikaskuntza-emaitzak

  • Serbomotorraren seinalea kontrolatzea Mbed-en PwmOut erabiliz.

  • Potentziometroaren irakurketa angelu-eskala batera bihurtzea.

  • Serieko ebidentzia erabiltzea kameran zehazki bereizten zaila den behaketa osatzeko.

Ikaslearen jardueraren aurrebista

Jardueraren edukia

Aurrebista soilik. Klase-saio batean, ikasleek erantzunak bete eta lana irakasleari bidal diezaiokete.

1

Serbomotorraren pultsu-zabalera

10 min

STM32 Mbed CodeIDE ikastaroa · 8 saiotatik 7.a. Irteera batzuek mugimendua sortu behar dute. Serbomotorrak erabiltzen dira zerbait orientatzeko, irekitzeko, blokeatzeko edo posizio jakin batera eramateko. Ikasgai honetan, potentziometroaren irakurketa serbomotorraren posizio-aginduarekin lotuko duzu.

Aurreikusi laborategiko 42 minutu inguru eta bi konpilazio/karga: hiru posizio finko eta potentziometro bidezko programa osatua. Ilaran, prestatu aurreikuspena eta bi TODO adierazpenak. Konpilazio gehigarria diagnostikatutako arazoa zuzentzeko soilik.

LEDaren PWM bidez batez besteko distira doitzen da. Serbomotor honek ere errepikatutako pultsuak erabiltzen ditu, baina posizio-agindua pultsuaren zabalerak adierazten du:

  • 700 mikrosegundo inguru: ibilbidearen alde bateko posizioa.
  • 1500 mikrosegundo inguru: erdiko posizioaren ingurua.
  • 2300 mikrosegundo inguru: beste aldeko posizioa.

Mbed-en, PwmOut erabiliko duzu. servo.period_ms(20) deitzean periodoa 20 ms da, hau da, 50 pultsu segundoko. servo.pulsewidth_us(...) deitzean maila altuko pultsuaren zabalera ezartzen da, mikrosegundotan.

Benetako angelu mekanikoa muntaketaren araberakoa da. Ikasgai honetan mantendu aginduak 700–2300 us tartean. Ez bidali tarte horretatik kanpoko baliorik. Besoak etengabe dardara egiten badu, muga mekaniko baten kontra bultzatzen ari dela badirudi edo ez bada egonkortzen, eten exekuzioa eta jakinarazi irakasleari. Ez saiatu konpontzen tartea zabalduz.

Erakutsi sarreraren eta mugimenduaren arteko lotura: potentziometroaren balio baxu batekin posizio bat, eta balio altu batekin beste bat. Serieko balioek kodeko bihurketarekin bat etorri behar dute.

Kameran serbomotorraren besoa txikia izan daiteke. angle kodeak kalkulatutako angelu-balio nominala da, ez neurtutako angelua. Ebidentzia erabilgarria da agindutako pulse_us zabalera, kalkulatutako angelua eta kameran bereizten den posizio-aldaketa batera jasotzea. position posizio-etiketa da; low/middle/high, baxua/erdikoa/altua; percent, sarreraren ehunekoa. Kopiatu serie-lerroak bere horretan eta azaldu haien esanahia euskaraz.

Ikasgai honetako pinak eta ebidentziak:

  • Serbomotorraren seinale-irteera: PA_15.
  • Bigarren probako potentziometroa: Pot. pot2 → PC_1.
  • Serieko derrigorrezko ebidentzia: pulse_us (agindutako pultsu-zabalera mikrosegundotan).
  • Kamerako ebidentzia: argi bereiz daitekeen posizio-aldaketa, ez angeluaren neurketa zehatza.

Potentziometrotik serbomotorraren pultsura

Pot. pot2 kontrola PC_1 pinean: AnalogIn bidezko 0,0–1,0 irakurketa pulse_us bidezko 700–2300 mikrosegundora bihurtzen da, PA_15 serbomotor-irteeran erabiltzeko.

Erabili kamera posizio-aldaketa behatzeko, eta kontsola pulse_us agindu zehatza kopiatzeko. Diagramak aginduaren bidea erakusten du, ez neurtutako angelu zehatza.

Kodeak potentziometroaren balio baxua 700 mikrosegundora eta altua 2300 mikrosegundora bihurtzen baditu, zer espero duzu potentziometroa baxutik altura mugitzean?

2

Probatu hiru posizio finko

20 min

  1. Ireki STM32 Mbed CodeIDE laborategia jarduera honetatik.

  2. Ireki main.cpp.

  3. Ordeztu fitxategia hurrengo programarekin.

  4. Gorde, konpilatu eta kargatu.

  5. Behatu kamera eta kontsola batera.

  6. Bilatu serbomotorraren hiru posizio bereizgarri.

  7. Jaso serieko pultsu-zabalerak eta kameran behatutakoa.

Klase-saio batean erabilgarri

#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(700);
        printf("pulse_us=700 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(2300);
        printf("pulse_us=2300 position=high\n");
        ThisThread::sleep_for(2000ms);
    }
}

Bete hiru errenkada, pultsu-zabalera finko bakoitzeko bat: 700 us, 1500 us eta 2300 us. Pultsu-zabalera mikrosegundotan emandako zenbakia da (us); Inprimatutako posizioa, kontsolako etiketa zehatza; eta Behatutako mugimendua edo posizioa, kamerako deskribapen orokorra. Ondo ikusten ez bada, hautatu ez oso argia eta deskribatu ikusten duzuna, angelurik asmatu gabe. Utzi hutsik errenkada gehigarriak. Servo three-position test start mezuak hiru posizioen proba hasi dela adierazten du. low, middle eta high pultsu txiki, ertain eta handiaren etiketak dira; ez dute biraketa-noranzko unibertsalik adierazten.

Serbomotorraren pultsu finkoen taula

Bete 700 us, 1500 us eta 2300 us-ko errenkadak. Utzi hutsik erabiltzen ez dituzun errenkada gehigarriak.

Pultsu-zabalera us Inprimatutako posizioa Behatutako mugimendua edo posizioa Behaketaren argitasuna
3

Bihurtu potentziometroaren irakurketa posizio-agindu

22 min

Orain, bihurtu PC_1 sarrerako AnalogIn irakurketa kalkulatutako angelu-balio eta pultsu-zabalera. Erabili Pot. pot2 graduatzailea.

  1. Ordeztu main.cpp hurrengo programarekin.

  2. Bete TODO 1: bihurtu 0,0–1,0 tarteko irakurketa 700–2300 mikrosegundora.

  3. Bete TODO 2: ezarri kalkulatutako pultsu-zabalera serbomotorrean.

  4. Gorde, konpilatu eta kargatu. Aurreikusitako bigarren konpilazioa da.

  5. Mugitu Pot. pot2 graduatzailea posizio baxu, ertain eta altuetara.

  6. Jaso ehunekoa, kalkulatutako angelua, pultsu-zabalera eta behatutako mugimendua.

Klase-saio batean erabilgarri

#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);
        // TODO 1: ordeztu 700 irakurketa 700-2300 us tartera bihurtzen duen adierazpenarekin.
        int pulse_us = 700;

        // TODO 2: ordeztu 700 kalkulatutako pulse_us aldagaiarekin.
        servo.pulsewidth_us(700);

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

Bete hiru kasuak: posizio baxua, ertaina eta altua. Serieko ehunekoa % unitatean dago; Kalkulatutako angelua, gradutan emandako kalkulua da, ez kamerako neurketa; Serieko pultsu-zabalera, mikrosegundotan dago (us); eta kamerako eremuan posizioaren deskribapen orokorra idatziko duzu. Kopiatu errenkada bakoitzeko hiru zenbakiak kontsolako lerro beretik. Utzi hutsik errenkada gehigarriak. Potentiometer servo control start mezuak potentziometro bidezko programa hasi dela adierazten du. (int) bihurketek zati hamartarra kentzen dute.

Serieko balioak aldatzen badira baina mugimendua ez bada argi ikusten, erabili hiru posizio finkoen proba ikusgarritasuna egiaztatzeko. Ez ondorioztatu angelu mekaniko zehatzik serieko kalkulutik edo kameratik. Dardara iraunkorra edo muga mekanikoaren aurkako bultzada ikusiz gero, eten exekuzioa eta jakinarazi irakasleari; ez zabaldu 700–2300 us tartea.

Potentziometrotik serbomotorrera: ebidentzien taula

Bete posizio baxu, ertain eta altuko errenkadak kontsolako balioekin eta kamerako deskribapen orokorrarekin. Utzi hutsik errenkada gehigarriak.

Potentziometroaren posizioa Serieko ehunekoa % Kalkulatutako angelua gradu Serieko pultsu-zabalera us Behatutako serbomotor-posizioa

Erabili posizio baxu, ertain eta altuko errenkadak potentziometroak serbomotorra espero bezala kontrolatu duen azaltzeko. Aipatu serieko pulse_us balioen joera eta kameran ikusitako mugimendua.

4

Bidali zure kodea

8 min

Erantsi gordetako azken main.cpp fitxategia

Sakatu Comprobar archivos guardados (egiaztatu gordetako fitxategiak), ziurtatu main.cpp fitxategiak potentziometroz kontrolatutako serbomotorraren bertsioa duela eta sakatu Adjuntar código guardado (erantsi gordetako kodea). Ondoren, sakatu Enviar entrega (bidali lana), jardueraren amaieran.

Bihurtu aurrebista hau klase-saio batean

Jarraitu LabsLand Teach-era ikasgai hau ikasleekin erabiltzeko eta kontuaren sarbidea berrikusteko.