Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-23 15:04
Bună ziua, prieteni:) Deci, în acest proiect vom controla un servomotor cu STM32F4 ARM MCU. În cazul meu, voi folosi placa de descoperire, dar dacă înțelegeți esența problemei, atunci o puteți aplica pentru fiecare MCU. Asa de. să începem:)
Pasul 1: Cerințe hardware și software
În ceea ce privește hardware-ul, vom avea nevoie de:
- Un MCU care este în cazul meu placa Discovery STM32f4
- Un servomotor comun, cum ar fi SG90 sau orice altul
În ceea ce privește software-ul, vom avea nevoie de:
- STM32CubeMX
- Keil uVision
Dacă aveți toate acestea, treceți la pasul următor:)
Pasul 2: Configurare STM32CubeMX
După cum știți, pentru controlul unui servomotor avem nevoie de semnal PWM. Cerințele în ceea ce privește semnalul PWM sunt astfel:
- Perioada PWM trebuie să fie de 20 mS
- La timp trebuie să fie între 0,5 mS și 2,5 mS. Când timpul este de 0,5 mS, atunci servo se va întoarce la 0 grade, 1,5 mS pentru 90 de grade și 2,5 mS pentru 180 de grade.
Deci, trebuie să configurăm PWM și în acest scop vom folosi Timer1.
- Mai întâi, selectați TIM1 din secțiunea Cronometre. Acest pas
-
Apoi, din secțiunea Mode
- Alegeți Ceas intern Acest pas
- PWM Generation CH1 Acest pas
-
Apoi, din secțiunea Configurare
- Setați Prescalerul la 160 Acest pas
- Setați Perioada contorului la 2000 Acest pas
- Setați Pulse la 50 Acest pas
- În plus, din Configurarea ceasului setați ceasurile APB1 Timer la 16 MHz. Acest pas
Acum, să vorbim puțin despre acest pas:
Frecvența ceasului APB1 Timer este de 16 MHz. Deci, înseamnă că este nevoie de 16, 000, 000 de căpușe pentru a obține o secundă. Cu toate acestea, ne-am setat prescalerul la 160. Înseamnă că ne împărțim frecvența la acel număr și am redus numărul de căpușe până la 100 000. Deci, pentru o secundă avem nevoie de 100 000 de căpușe. Cu toate acestea, avem nevoie de 20mS de perioadă PWM așa cum am menționat anterior. Deci, pe baza matematicii simple, avem nevoie de 2000 de căpușe pentru 20mS. Deci, setând Perioada contorului la 2000, determinăm perioada semnalului PWM care este de 20mS. Acum trebuie să determinăm numărul de bifare pentru obținerea timpilor de pornire de la 0,5mS la 2,5mS. Putem obține această ecuație dintr-o matematică simplă și este:
On_Time = (Tick_Number / 100). Rețineți că acesta este timpul de pornire care modifică unghiul servomotorului. Deci, în imaginea de mai jos rezum acest pas. Dacă aveți vreo întrebare scrieți în comentarii și voi răspunde cât mai repede posibil.
Imagine a calculelor
După ce ați făcut toate acestea, generați cod:)
Pasul 3: Codificare UVil Keil
Deci, să stabilim mai întâi ce vrem să facem? Vrem să scriem o funcție care acceptă gradul și să o scriem în servo. Deci, cum vom face asta? După cum am mai spus, pentru a schimba unghiul, trebuie să schimbăm timpul. Unghiurile noastre se schimbă între [0, 180] și numărul nostru de căpușe, care determină schimbările de timp între [50, 250]. Deci, avem nevoie de o funcție de cartografiere care să mapeze unghiul dat în funcție de numărul de căpușe. De exemplu, pentru 0 grade 50 căpușe, pentru 180 grade 250 căpușe și așa mai departe … Deci, să scriem funcția noastră de cartografiere:
harta int (int st1, int fn1, int st2, int fn2, valoare int) {return (1.0 * (value-st1)) / ((fn1-st1) * 1.0) * (fn2-st2) + st2; }
Aceasta este funcția noastră de cartografiere. Vă interesează cum este derivat? Atunci citește asta. Deci, luăm gamele noastre și valoarea pe care dorim să o mapăm.
Acum, să scriem o funcție care acceptă unghiul și să o mapeze la intervalul de căpușe:
void servo_write (int angle) {htim1. Instance-> CCR1 = map (0, 180, 50, 250, angle); }
După cum puteți vedea, acest cod acceptă unghiul și îl mapează la intervalul de număr de căpușe. Apoi, numărul de căpușe este dat registrului CCR1 care controlează unghiul de timp și deci.
Cu toate acestea, pentru ca toate acestea să funcționeze, începem mai întâi pwm, care se poate face doar printr-o linie de cod:
HAL_TIM_PWM_Start (& htim1, TIM_CHANNEL_1);
Deci, avem o funcție care acceptă unghiul și o scrie pe servo. Să-l testăm și să scriem funcția noastră de măturare, care este foarte ușoară:
void servo_sweep (void) {for (int i = 0; i <= 180; i ++) {servo_write (i); HAL_Delay (10); } pentru (int i = 180; i> = 0; i--) {servo_write (i); HAL_Delay (10); }}
Deci, numără până la 180 și apoi la 0 și scrie aceste valori pe servo:) Deci, să vedem rezultatul!
Pasul 4: Rezultatul:)
Deci, acesta este sfârșitul. Dacă aveți întrebări, vă rugăm să întrebați. Voi fi fericit pentru a le răspunde. Vă mulțumesc foarte mult pentru lectură și sper să ne vedem în următorul proiect:)
Recomandat:
Ventilator rotativ cu servomotor și control al vitezei: 6 pași
Ventilator rotativ folosind servomotor și control al vitezei: În acest tutorial vom învăța cum să rotiți un ventilator cu viteză reglabilă folosind servomotor, potențiometru, arduino și Visuino. Urmăriți videoclipul
Control acces acces la hrană pentru pisici (ESP8266 + servomotor + imprimare 3D): 5 pași (cu imagini)
Controlul accesului la hrană pentru pisici (ESP8266 + Servomotor + imprimare 3D): Acest proiect trece peste procesul pe care l-am folosit pentru a crea un castron automat pentru hrană pentru pisici, pentru pisica mea în vârstă, diabetică Chaz. Vezi, trebuie să mănânce micul dejun înainte să-și poată lua insulina, dar uit de multe ori să-i iau mâncarea înainte să mă culc, ceea ce strică
Tutorial Arduino - Servomotor de control cu joystick: 4 pași
Tutorial Arduino - Servomotor Control cu Joystick: În acest tutorial, vom învăța cum să folosim servo cu Joystick. Vom controla 1 servomotor cu 1 joystick. Puteți implementa proiectele dvs. de brațe robotizate cu referire la acest tutorial. Desigur, vom folosi bateria externă / energie atunci când facem
Tutorial Arduino - Control servomotor cu potențiometru: 5 pași
Tutorial Arduino - Servomotor de control cu potențiometru: Acest instructable este versiunea scrisă a "Arduino: Cum se controlează servomotor cu potențometru" al meu Videoclip YouTube pe care l-am încărcat recent. Vă recomand cu tărie să o verificați. Accesați canalul YouTube
Tutorial Arduino - Servomotor Control cu Arduino: 5 pași
Tutorial Arduino - Servo Motor Control With Arduino: Acest instructable este versiunea scrisă a " Arduino: How To Control Servo Motor with Arduino " Videoclip YouTube pe care l-am încărcat recent. Vă recomand cu tărie să o verificați. Accesați canalul YouTube