
Satura rādītājs:
2025 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2025-01-23 14:59


Sveiki vēlreiz draugi:) Tātad, šajā projektā mēs kontrolēsim servomotoru ar STM32F4 ARM MCU. Manā gadījumā es izmantošu atklāšanas paneli, bet, ja jūs saprotat problēmas būtību, varat to izmantot katram MCU. Tātad. sāksim:)
1. darbība. Prasības aparatūrai un programmatūrai
Aparatūras ziņā mums būs nepieciešams:
- MCU, kas manā gadījumā ir STM32f4 atklāšanas dēlis
- Parasts servomotors, piemēram, SG90 vai jebkurš cits
Runājot par programmatūru, mums būs nepieciešams:
- STM32CubeMX
- Keil uVision
Ja jums tas viss ir, pārejiet pie nākamās darbības:)
2. darbība: STM32CubeMX konfigurācija
Kā jūs zināt, lai kontrolētu servomotoru, mums ir nepieciešams PWM signāls. PWM signāla prasības ir šādas:
- PWM periodam jābūt 20 mS
- Laika intervālam jābūt no 0,5 līdz 2,5 mS. Kad laiks ir 0,5 mS, tad servo pagriezīsies par 0 grādiem, 1,5 mS par 90 grādiem un 2,5 mS par 180 grādiem.
Tātad, mums ir jākonfigurē PWM, un šim nolūkam mēs izmantosim taimeri 1.
- Pirmkārt, sadaļā Taimeri izvēlieties TIM1. Šis solis
-
Pēc tam sadaļā Mode
- Izvēlieties Iekšējais pulkstenis Šis solis
- PWM Generation CH1 Šis solis
- Pēc tam sadaļā Konfigurācija
- Iestatiet Prescaler uz 160 Šis solis
- Iestatīt skaitītāja periodu uz 2000 Šis solis
- Iestatiet impulsu uz 50 Šis solis
- Turklāt no pulksteņa konfigurācijas iestatiet APB1 taimera pulksteņus uz 16 MHz. Šis solis
Tagad parunāsim mazliet par šo soli:
Mūsu APB1 taimera pulksteņa frekvence ir 16 MHz. Tātad, tas nozīmē, ka 1 sekundes iegūšanai ir nepieciešami 16 000 000 ērču. Tomēr mēs iestatījām savu prescaler uz 160. Tas nozīmē, ka mēs dalām savu frekvenci ar šo skaitli un samazinājām ērču skaitu līdz 100 000. Tātad, 1 sekundi mums vajag 100 000 ērču. Tomēr mums ir nepieciešams 20 mS PWM periods, kā mēs teicām iepriekš. Tātad, pamatojoties uz vienkāršu matemātiku, mums vajag 2000 ērču 20mS. Tātad, iestatot skaitītāja periodu uz 2000, mēs nosakām PWM signāla periodu, kas ir 20mS. Tagad mums ir jānosaka ērču skaits, lai saņemtu ieslēgšanās laiku no 0,5 mS līdz 2,5 mS. Mēs varam iegūt šo vienādojumu no vienkāršas matemātikas, un tas ir:
Ieslēgšanas laiks = (atzīme_skaitlis / 100). Paturiet prātā, ka tas ir on_time, kas maina servodzinēja leņķi. Tātad, zem attēla es apkopoju šo soli. Ja jums ir kādi jautājumi, rakstiet komentāros, un es atbildēšu pēc iespējas ātrāk.
Aprēķinu attēls
Pēc visu šo darbību veikšanas ģenerējiet kodu:)
3. darbība: Keil UVision kodēšana
Tātad, vispirms noteiksim, ko mēs vēlamies darīt? Mēs vēlamies uzrakstīt funkciju, kas pieņem grādu, un ierakstīt to servo. Tātad, kā mēs to darīsim? Kā jau teicām iepriekš, lai mainītu leņķi, mums ir jāmaina laiks. Mūsu leņķi mainās starp [0, 180] un ērču skaitu, kas nosaka laika izmaiņas starp [50, 250]. Tātad, mums ir nepieciešama kartēšanas funkcija, kas kartē noteikto leņķi ar ērču skaita diapazonu. Piemēram, 0 grādu 50 ērcēm, 180 grādu 250 ērcēm un tā tālāk … Tātad, uzrakstīsim mūsu kartēšanas funkciju:
int karte (int st1, int fn1, int st2, int fn2, int value) {return (1,0*(vērtība-st1))/((fn1-st1)*1,0)*(fn2-st2)+st2; }
Šī ir mūsu kartēšanas funkcija. Vai jūs interesē, kā tas tiek iegūts? Tad izlasiet to. Tātad, mēs ņemam savus diapazonus un vērtību, ko vēlamies kartēt.
Tagad uzrakstīsim funkciju, kas pieņem leņķi un kartē to ērču diapazonam:
void servo_write (int leņķis) {htim1. Instance-> CCR1 = karte (0, 180, 50, 250, leņķis); }
Kā redzat, šis kods pieņem leņķi un kartē to ērču skaita diapazonā. Pēc tam ērču skaits tiek piešķirts CCR1 reģistram, kas kontrolē ieslēgšanas laiku un tā leņķi.
Tomēr, lai tas viss darbotos, vispirms sākam pwm, ko var izdarīt, izmantojot tikai koda rindu:
HAL_TIM_PWM_Start (& htim1, TIM_CHANNEL_1);
Tātad, mums ir funkcija, kas pieņem leņķi un uzraksta to servo. Pārbaudīsim to un uzrakstīsim mūsu slaucīšanas funkciju, kas ir ļoti vienkārša:
void servo_sweep (void) {for (int i = 0; i <= 180; i ++) {servo_write (i); HAL_Delay (10); } par (int i = 180; i> = 0; i--) {servo_write (i); HAL_Delay (10); }}
Tātad, vienkārši saskaitiet līdz 180 un pēc tam līdz 0 un ierakstiet šīs vērtības servo:) Tātad, redzēsim rezultātu!
4. solis: rezultāts:)
Tātad, tas ir beigas. Ja jums ir kādi jautājumi, lūdzu, jautājiet. Es priecāšos, ja atbildēšu uz viņiem. Liels paldies par lasīšanu un ceru, ka tiksimies nākamajā projektā:)
Ieteicams:
ESP8266 RGB LED STRIP WIFI vadība - NODEMCU kā IR tālvadības pults LED joslai, kas tiek kontrolēta, izmantojot Wifi - RGB LED STRIP viedtālruņa vadība: 4 soļi

ESP8266 RGB LED STRIP WIFI vadība | NODEMCU kā IR tālvadības pults LED joslai, kas tiek kontrolēta, izmantojot Wifi | RGB LED STRIP viedtālruņa vadība: Sveiki, puiši, šajā apmācībā mēs iemācīsimies izmantot nodemcu vai esp8266 kā IR tālvadības pulti, lai kontrolētu RGB LED sloksni, un Nodemcu vadīs ar viedtālruni, izmantojot wifi. Tātad būtībā jūs varat kontrolēt RGB LED STRIP ar savu viedtālruni
Arduino apmācība - Servo motora vadība ar kursorsviru: 4 soļi

Arduino apmācība - servomotoru vadība ar kursorsviru: šajā apmācībā mēs iemācīsimies izmantot servo ar kursorsviru. Mēs kontrolēsim 1 gab servomotoru ar 1 kursorsviru. Jūs varat īstenot savus robotu roku projektus, atsaucoties uz šo apmācību. Protams, mēs izmantosim ārēju akumulatoru / enerģiju, veicot
Arduino apmācība - Servo motora vadība ar potenciometru: 5 soļi

Arduino apmācība - Servo motora vadība ar potenciometru: šī pamācība ir mana " Arduino: Kā vadīt servomotoru ar potenciometru " rakstiskā versija. Nesen augšupielādēts YouTube videoklips. Es ļoti iesaku jums to pārbaudīt. Apmeklējiet YouTube kanālu
Arduino apmācība - Servo motora vadība ar Arduino: 5 soļi

Arduino apmācība - Servo motora vadība ar Arduino: Šī pamācība ir mana " Arduino: Kā vadīt servomotoru ar Arduino " rakstiskā versija. Nesen augšupielādēts YouTube videoklips. Es ļoti iesaku jums to pārbaudīt. Apmeklējiet YouTube kanālu
Servo motora tastatūras vadība: 7 soļi

Servomotora tastatūras vadība: vispirms ir jāiestata servomotors. Vidējais vads iet uz 5V portu Kreisais iet uz GND portu Pievienojiet pēdējo (vadības vadu) pie porta 9