Përmbajtje:
- Hapi 1: Kërkesat për harduer dhe softuer
- Hapi 2: Konfigurimi STM32CubeMX
- Hapi 3: Kodimi Keil UVision
- Hapi 4: Rezultati:)
Video: Servo Motor Control Me STM32F4 ARM MCU: 4 Hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:19
Përshëndetje përsëri miq:) Pra, në këtë projekt ne do të kontrollojmë një servo motor me STM32F4 ARM MCU. Në rastin tim, unë do të përdor tabelën e zbulimit, por nëse kuptoni thelbin e problemit, atëherë mund ta aplikoni për çdo MCU. Kështu që. le të fillojmë:)
Hapi 1: Kërkesat për harduer dhe softuer
Për sa i përket harduerit do të na duhen:
- Një MCU e cila është në rastin tim bordi i zbulimit STM32f4
- Një servo motor i zakonshëm, si SG90 ose ndonjë tjetër
Për sa i përket softuerit do të na duhen:
- STM32CubeMX
- Keil uVision
Nëse i keni të gjitha këto, hidheni në hapin tjetër:)
Hapi 2: Konfigurimi STM32CubeMX
Siç e dini, për kontrollin e një servo motori ne kemi nevojë për sinjal PWM. Kërkesat për sa i përket sinjalit PWM janë si më poshtë:
- Periudha e PWM duhet të jetë 20 mS
- Koha duhet të jetë midis 0.5 mS dhe 2.5 mS. Kur në kohë është 0.5 mS, atëherë servo do të kthehet 0 gradë, 1.5 mS për 90 gradë dhe 2.5 mS për 180 gradë.
Pra, ne duhet të konfigurojmë PWM dhe për këtë qëllim ne do të përdorim Timer1.
- Së pari, zgjidhni TIM1 nga seksioni Kohëmatësit. Ky hap
-
Pastaj, nga seksioni Mode
- Zgjidhni Ora e Brendshme Ky hap
- PWM Generation CH1 Ky hap
-
Pastaj, nga seksioni Konfigurimi
- Vendosni Prescaler në 160 Ky hap
- Vendos Periudhën e Kundërsulmit në 2000 Ky hap
- Vendosni Pulsin në 50 Ky hap
- Për më tepër, nga Konfigurimi i orës vendosni orët e kohëmatësit APB1 në 16MHz. Ky hap
Tani, le të flasim pak për këtë hap:
Frekuenca e orës sonë APB1 Timer është 16MHz. Pra, do të thotë që kërkohen 16, 000, 000 rriqra për të marrë 1 sekondë. Megjithatë, ne e vendosëm presalen tonë në 160. Kjo do të thotë, ne e ndajmë frekuencën tonë me atë numër dhe e ulim numrin e rriqrave në 100, 000. Pra, për 1 sekondë na duhen 100, 000 rriqra. Megjithatë, ne kemi nevojë për 20mS të periudhës PWM siç kemi deklaruar më parë. Pra, bazuar në matematikë të thjeshtë, na duhen 2000 rriqra për 20mS. Pra, duke vendosur Periudhën e Counter në 2000 ne përcaktojmë periudhën e sinjalit PWM e cila është 20mS. Tani duhet të përcaktojmë numrin e rriqrës për marrjen në kohë nga 0.5mS në 2.5mS. Ne mund ta marrim këtë ekuacion nga matematika e thjeshtë dhe është:
On_Time = (Numri i shënimit / 100). Mbani në mend se kjo është koha në kohë që ndryshon këndin e servo motorit. Pra, nën imazhin unë përmbledh këtë hap. Nëse keni ndonjë pyetje, shkruani në komente dhe unë do t'ju përgjigjem sa më shpejt që të jetë e mundur.
Imazhi i llogaritjeve
Pasi të keni bërë të gjitha këto, krijoni kod:)
Hapi 3: Kodimi Keil UVision
Pra, le të përcaktojmë së pari se çfarë duam të bëjmë? Ne duam, të shkruajmë një funksion që pranon gradën dhe ta shkruajmë atë në servo. Pra, si do ta bëjmë atë? Siç kemi thënë më parë, për të ndryshuar këndin duhet të ndryshojmë në kohë. Këndet tona ndryshojnë midis [0, 180] dhe numri ynë i rriqrave që përcakton në kohë ndryshon midis [50, 250]. Pra, ne kemi nevojë për një funksion të hartës që harton këndin e dhënë në gamën e numrit të rriqrave. Për shembull, për rriqrat 0 gradë 50, për rriqrat 180 gradë 250 e kështu me radhë … Pra, le të shkruajmë funksionin tonë të hartës:
int harta (int st1, int fn1, int st2, int fn2, vlera int) {kthimi (1.0*(vlera-st1))/((fn1-st1)*1.0)*(fn2-st2)+st2; }
Ky është funksioni ynë i hartës. A jeni i interesuar se si rrjedh? Pastaj lexoni atë. Pra, marrim vargjet tona dhe vlerën që duam të hartojmë.
Tani, le të shkruajmë një funksion që pranon këndin dhe e harton atë në rangun e rriqrave:
void servo_write (int angle) {htim1. Instance-> CCR1 = hartë (0, 180, 50, 250, kënd); }
Siç mund ta shihni, ky kod pranon këndin dhe e harton atë në rangun e numrit të rriqrave. Pastaj, numri i rriqrave i jepet regjistrit CCR1 i cili kontrollon këndin në kohë dhe kështu, Sidoqoftë, në mënyrë që të funksionojnë të gjitha këto, fillimisht fillojmë pwm, e cila mund të bëhet vetëm me një linjë kodi:
HAL_TIM_PWM_Start (& htim1, TIM_CHANNEL_1);
Pra, ne kemi një funksion që pranon këndin dhe e shkruan atë në servo. Le ta testojmë dhe të shkruajmë funksionin tonë të spastrimit i cili është shumë i lehtë:
void servo_sweep (void) {for (int i = 0; i <= 180; i ++) {servo_write (i); HAL_Vonesë (10); } për (int i = 180; i> = 0; i--) {servo_write (i); HAL_Vonesë (10); }}
Pra, thjesht numëroni deri në 180 dhe pastaj në 0 dhe shkruani këto vlera në servo:) Pra, le të shohim rezultatin!
Hapi 4: Rezultati:)
Pra, ky është fundi. Nëse keni ndonjë pyetje, ju lutemi pyesni. Do të jem i lumtur për t'iu përgjigjur atyre. Faleminderit shumë për leximin dhe shpresoj të shihemi në projektin tjetër:)
Recommended:
Fpga e kontrolluar RC Servo Motor Robot Arm - Konkurs Digilent: 3 Hapa
Fpga Controlled RC Servo Motor Robot Arm - Digilent Contest: FPGA kontrolluar servo motorin e robotit Qëllimi i këtij projekti është të krijojë një sistem të programueshëm që mund të kryejë operacione bashkimi në pllakën e perf. Sistemi bazohet në bordin e zhvillimit Digilent Basys3 dhe do të jetë i aftë të bashkojë
Arduino Tutorial - Servo Motor Control Me Joystick: 4 Hapa
Arduino Tutorial - Servo Motor Control With Joystick: Në këtë tutorial, ne do të mësojmë se si të përdorim servo me Joystick. Ne do të kontrollojmë 1 copë servo motor me 1 Joystick. Ju mund të zbatoni projektet tuaja të krahut robotik duke iu referuar këtij tutoriali. Sigurisht që ne do të përdorim bateri / energji të jashtme kur bëjmë
Arduino Tutorial - Servo Motor Control Me Potentiometer: 5 Hapa
Arduino Tutorial - Servo Motor Control Me Potentiometer: Ky udhëzues është versioni i shkruar i im " Arduino: Si të Kontrolloj Servo Motor me Potenciometër " Videoja në YouTube që kam ngarkuar kohët e fundit. Unë ju rekomandoj fuqimisht që ta kontrolloni. Vizitoni YouTube Channel
Arduino Tutorial - Servo Motor Control Me Arduino: 5 hapa
Arduino Tutorial - Kontrolli i Servo Motor Me Arduino: Ky udhëzues është versioni i shkruar i " Arduino: Si të Kontrolloj Servo Motor me Arduino " Videoja në YouTube që kam ngarkuar kohët e fundit. Unë ju rekomandoj fuqimisht që ta kontrolloni. Vizitoni YouTube Channel
Servo Servo Servo Controller Servo: 6 hapa
Servo Servo Servo Controller Servo: Ky është një kontrollues i thjeshtë serial për servos të shumtë bazuar në Arduino. (e para ime e mësueshme :)) Pjesa më e madhe e punës në këtë erdhi nga marrja e softuerit për të folur me arduino dhe bërja e një protokolli për transferimin e të dhënave. Si f