Sisukord:
- 1. samm: nõuded riistvarale ja tarkvarale
- Samm: STM32CubeMX seadistamine
- Samm: Keil UVisioni kodeerimine
- Neljas samm: tulemus:)
Video: Servomootori juhtimine koos STM32F4 ARM MCU -ga: 4 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:48
Tere jälle sõbrad:) Niisiis, selles projektis juhime servomootorit koos STM32F4 ARM MCU -ga. Minu puhul kasutan avastusplaati, kuid kui mõistate probleemi olemust, saate seda rakendada iga MCU jaoks. Niisiis. alustame:)
1. samm: nõuded riistvarale ja tarkvarale
Riistvara osas vajame:
- MCU, mis on minu puhul STM32f4 avastusplaat
- Tavaline servomootor, nagu SG90 või mõni muu
Tarkvara osas vajame:
- STM32CubeMX
- Keil uVision
Kui teil on need kõik olemas, minge järgmise sammu juurde:)
Samm: STM32CubeMX seadistamine
Nagu teate, vajame servomootori juhtimiseks PWM -signaali. PWM -signaali nõuded on järgmised:
- PWM periood peab olema 20 mS
- Õigeaeg peab olema vahemikus 0,5 mS kuni 2,5 mS. Kui õigeaeg on 0,5 mS, siis servo pöörab 0 kraadi, 1,5 mS 90 kraadi ja 2,5 mS 180 kraadi.
Niisiis, peame konfigureerima PWM ja selleks kasutame taimerit 1.
- Esiteks valige jaotises Taimerid TIM1. See samm
-
Seejärel jaotisest Režiim
- Valige Sisemine kell See samm
- PWM põlvkond CH1 See samm
-
Seejärel jaotisest Konfiguratsioon
- Seadistage eelvalija väärtuseks 160 See samm
- Määra loenduri periood 2000 -le. See samm
- Seadke pulss väärtusele 50 See samm
- Lisaks seadistage kella konfiguratsioonist APB1 taimerite kellaajaks 16 MHz. See samm
Räägime nüüd natuke sellest sammust:
Meie APB1 taimerikella sagedus on 16 MHz. See tähendab, et 1 sekundi saamiseks on vaja 16 000 000 puuki. Sellegipoolest seadsime oma eelseadistajaks 160. See tähendab, et jagame oma sageduse selle arvuga ja vähendame puukide arvu 100 000 -ni. Seega vajame 1 sekundiks 100 000 puuki. Kuid me vajame 20 mS PWM perioodi, nagu me varem märkisime. Niisiis, lihtsa matemaatika põhjal vajame 20 mS jaoks 2000 puuki. Niisiis, määrates loenduriperioodiks 2000, määrame PWM -signaali perioodi, mis on 20 mS. Nüüd peame kindlaks määrama puugi numbri, et saada aega 0,5 mS kuni 2,5 mS. Selle võrrandi saame lihtsast matemaatikast ja see on:
On_Time = (Märgi_arv / 100). Pidage meeles, et see on on_time, mis muudab servomootori nurka. Niisiis, pildi all võtan selle sammu kokku. Kui teil on küsimusi, kirjutage kommentaaridesse ja vastan nii kiiresti kui võimalik.
Arvutuste pilt
Pärast kõigi nende toimingute tegemist genereerige kood:)
Samm: Keil UVisioni kodeerimine
Niisiis, kõigepealt teeme kindlaks, mida me tahame teha? Me tahame kirjutada funktsiooni, mis aktsepteerib kraadi, ja kirjutada see servole. Niisiis, kuidas me seda teeme? Nagu oleme varem öelnud, peame nurga muutmiseks muutma õigeaegselt. Meie nurgad muutuvad vahemikus [0, 180] ja puukide arv, mis määrab ajalised muutused vahemikus [50, 250]. Niisiis, meil on vaja kaardistamisfunktsiooni, mis kaardistab antud nurga puukide arvu vahemiku järgi. Näiteks 0 kraadi 50 puugi, 180 kraadi 250 puugi ja nii edasi … Kirjutame siis meie kaardistamisfunktsiooni:
int kaart (int st1, int fn1, int st2, int fn2, int value) {return (1,0*(väärtus-st1))/((fn1-st1)*1,0)*(fn2-st2)+st2; }
See on meie kaardistamise funktsioon. Kas olete huvitatud sellest, kuidas see on saadud? Siis loe seda. Niisiis, võtame oma vahemikud ja väärtuse, mida soovime kaardistada.
Kirjutame nüüd funktsiooni, mis aktsepteerib nurka ja kaardistab selle puukide vahemikku:
void servo_write (int nurk) {htim1. Aine-> CCR1 = kaart (0, 180, 50, 250, nurk); }
Nagu näete, aktsepteerib see kood nurka ja kaardistab selle puukide arvu vahemikku. Seejärel antakse puukide arv CCR1 registrile, mis kontrollib õigeaegset ja nii nurka.
Kuid selleks, et need kõik toimiksid, käivitame kõigepealt pwm, mida saab teha ainult koodirea abil:
HAL_TIM_PWM_Start (& htim1, TIM_CHANNEL_1);
Niisiis, meil on funktsioon, mis aktsepteerib nurka ja kirjutab selle servole. Proovime seda ja kirjutame oma pühkimisfunktsiooni, mis on väga lihtne:
void servo_sweep (void) {for (int i = 0; i <= 180; i ++) {servo_write (i); HAL_Delay (10); } jaoks (int i = 180; i> = 0; i--) {servo_write (i); HAL_Delay (10); }}
Niisiis, see loeb lihtsalt kuni 180 ja seejärel alla 0 ja kirjutab need väärtused servole:) Niisiis, vaatame tulemust!
Neljas samm: tulemus:)
Niisiis, see on lõpp. Kui teil on küsimusi, küsige. Mul on hea meel neile vastata. Suur tänu lugemise eest ja loodan, et kohtume järgmises projektis:)
Soovitan:
Servomootori Arduino juhtimine: 4 sammu
Servomootori Arduino juhtimise õpetus: Hei poisid! Tere tulemast minu uude õpetusse, ma loodan, et teile juba meeldis minu eelmine juhendatav " Suure samm -mootori juhtimine ". Täna postitan selle informatiivse õpetuse, et õpetada teile mis tahes servomootori juhtimise põhitõdesid, postitasin juba ühe video
Isetegemine Servomootori nurga juhtimine Visuino jada komponendi abil: 10 sammu
DIY Kuidas juhtida servomootori nurka Visuino järjestuskomponendi abil: selles õpetuses kasutame servomootorit ja Arduino UNO ning Visuino servomootori nurga juhtimiseks järjestuskomponendi abil. Järjekomponent sobib ideaalselt olukordadeks, kus soovime käivitada mitu sündmust järjest meie puhul servomootori degr
Arduino kiirendusmõõturi õpetus: Laevasilla juhtimine servomootori abil: 5 sammu
Arduino kiirendusmõõturi õpetus: Laevasilla juhtimine servomootori abil: Kiirendusmõõturi andurid on nüüd enamikus meie nutitelefonides, et anda neile laia valikut kasutusvõimalusi, mida kasutame iga päev, isegi teadmata, et selle eest vastutab kiirendusmõõtur. Üks neist võimalustest on juhtimisseade
3 servomootori juhtimine 3 potentsiomeetri ja Arduinoga: 11 sammu (koos piltidega)
3 servomootori juhtimine 3 potentsiomeetri ja Arduinoga: Tere! See on minu esimene juhendatav, nii et loodan, et olete minuga kannatlik, kui teen selle seadistamisel vigu. See on kirjutatud algajatele, nii et teie seas arenenumad jätavad selle palju vahele ja jõuavad selle juhtmestikku. Eesmärk, mille ma sean, on
Arduino õpetus - servomootori juhtimine juhtkangiga: 4 sammu
Arduino õpetus - servomootori juhtimine juhtkangiga: Selles õpetuses õpime, kuidas kasutada servot juhtkangiga. Me juhime 1 tk servomootorit ühe juhtkangi abil. Selle õpetuse abil saate oma robotkäeprojekte ellu viia. Loomulikult kasutame seda tehes välist akut / energiat