Tartalomjegyzék:
- 1. lépés: Hardver- és szoftverkövetelmények
- 2. lépés: STM32CubeMX konfiguráció
- 3. lépés: Keil UVision kódolás
- 4. lépés: Az eredmény:)
Videó: Szervo motorvezérlés STM32F4 ARM MCU -val: 4 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:41
Üdv ismét haverok:) Tehát ebben a projektben egy szervo motort fogunk vezérelni STM32F4 ARM MCU -val. Esetemben a felfedező táblát fogom használni, de ha felfogja a probléma lényegét, akkor minden MCU -ra alkalmazhatja. Így. Lássunk neki:)
1. lépés: Hardver- és szoftverkövetelmények
Ami a hardvert illeti, szükségünk lesz:
- Egy MCU, ami az én esetemben STM32f4 Discovery board
- Egy közös szervomotor, mint az SG90 vagy bármely más
Ami a szoftvert illeti, szükségünk lesz:
- STM32CubeMX
- Keil uVision
Ha mindez megvan, ugorjon a következő lépésre:)
2. lépés: STM32CubeMX konfiguráció
Mint tudják, a szervomotor vezérléséhez PWM jelre van szükségünk. A PWM jelre vonatkozó követelmények a következők:
- A PWM periódusnak 20 mS -nak kell lennie
- Az időnek 0,5 mS és 2,5 mS között kell lennie. Ha az idő 0,5 mS, akkor a szervó 0 fokot, 1,5 mS 90 fokot és 2,5 mS 180 fokot fog fordítani.
Tehát be kell állítanunk a PWM -et, és ehhez a Timer1 -et fogjuk használni.
- Először válassza a TIM1 lehetőséget az Időzítők részben. Ezt a lépést
-
Ezután a Mód szakaszból
- Válassza a Belső óra lehetőséget
- PWM generáció CH1 Ez a lépés
-
Ezután a Konfiguráció részben
- Állítsa az előskálázót 160 -ra Ez a lépés
- Állítsa a számlálási periódust 2000 -re Ez a lépés
- Pulzus beállítása 50 -re Ez a lépés
- Ezenkívül az Óra konfigurációból állítsa az APB1 időzítő óráját 16 MHz -re. Ezt a lépést
Most beszéljünk egy kicsit erről a lépésről:
APB1 időzítőnk frekvenciája 16MHz. Tehát ez azt jelenti, hogy 16 000 000 kullancs szükséges 1 másodperc eléréséhez. Az előskálázót azonban 160 -ra állítottuk. Ez azt jelenti, hogy elosztjuk gyakoriságunkat ezzel a számmal, és 100 000 -re csökkentjük a kullancsok számát. Tehát 1 másodpercig 100 000 kullancsra van szükségünk. Mindazonáltal szükségünk van 20 mS PWM időszakra, amint azt korábban említettük. Tehát egyszerű matematika alapján 2000 kullancsra van szükségünk 20 mS -ért. Tehát a számláló periódus 2000 -re állításával meghatározzuk a PWM jel periódusát, amely 20 mS. Most meg kell határoznunk a kullancs számát a bekapcsolási idők eléréséhez 0,5 mS és 2,5 mS között. Ezt az egyenletet egyszerű matematikából kaphatjuk meg, és ez:
On_Time = (Tick_Number / 100). Ne feledje, hogy ez az on_time, amely megváltoztatja a szervomotor szögét. Tehát az alábbi képen összefoglalom ezt a lépést. Ha bármilyen kérdése van, írjon megjegyzéseket, és a lehető leggyorsabban válaszolok.
Számítások képe
Mindezek után készíts kódot:)
3. lépés: Keil UVision kódolás
Tehát először határozzuk meg, mit akarunk tenni? Azt akarjuk, hogy írjunk egy függvényt, amely elfogadja a fokozatot, és írja be a szervóba. Szóval, hogyan fogjuk ezt megtenni? Amint azt korábban mondtuk, a szög megváltoztatásához meg kell változtatnunk az időben. A szögeink [0, 180] és a kullancsok száma között változnak, ami meghatározza az időbeli változásokat [50, 250] között. Tehát szükségünk van egy leképezési funkcióra, amely az adott szöget a kullancsok tartományához rendeli. Például 0 fok 50 kullancs, 180 fok 250 kullancs és így tovább … Írjuk le tehát a térképészeti függvényünket:
int térkép (int st1, int fn1, int st2, int fn2, int value) {return (1,0*(érték-st1))/((fn1-st1)*1,0)*(fn2-st2)+st2; }
Ez a mi térképészeti funkciónk. Érdekel, hogyan származik? Akkor olvasd el azt. Tehát vesszük a tartományokat és a feltérképezni kívánt értéket.
Írjunk most egy függvényt, amely elfogadja a szöget, és leképezi a kullancstartományra:
void servo_write (int szög) {htim1. Instance-> CCR1 = térkép (0, 180, 50, 250, szög); }
Mint látható, ez a kód elfogadja a szöget, és a kullancsok számának tartományához rendeli hozzá. Ezután a kullancsok száma megadásra kerül a CCR1 regiszterben, amely szabályozza a bekapcsolási időt és a szöget.
Annak érdekében azonban, hogy mindezek működjenek, először elindítjuk a pwm -t, amelyet csak egy kódsor segítségével lehet megtenni:
HAL_TIM_PWM_Start (& htim1, TIM_CHANNEL_1);
Tehát van egy függvényünk, amely elfogadja a szöget és írja be a szervóba. Próbáljuk ki, és írjuk le a sweep funkciónkat, ami nagyon egyszerű:
void servo_sweep (void) {for (int i = 0; i <= 180; i ++) {servo_write (i); HAL_Késleltetés (10); } for (int i = 180; i> = 0; i--) {servo_write (i); HAL_Késleltetés (10); }}
Tehát csak 180 -ig, majd 0 -ig számoljon, és írja be ezeket az értékeket a szervóba:) Szóval, lássuk az eredményt!
4. lépés: Az eredmény:)
Szóval, ez a vég. Ha bármilyen kérdése van, kérjük, tegye fel. Örömmel válaszolok rájuk. Nagyon köszönöm, hogy elolvastad, és remélem, találkozunk a következő projektben:)
Ajánlott:
Érintkezésmentes és korróziómentes vízszintjelző és motorvezérlés: 5 lépés
Érintkezésmentes és korróziómentes vízszintjelző és motorvezérlés: HI, Ebben az oktatóanyagban megnézzük, hogyan lehet a víztartály állapotát a felső tartály vízszintje (magas, közepes, alacsony) alapján három különböző színű led segítségével használni Nem érintkező módon ultrahangos érzékelő és Arduino uno kártya segítségével. P
DC motorvezérlés Arduino Uno R3: 6 lépés
DC motorvezérlés Arduino Uno R3: Ebben a kísérletben megtanuljuk, hogyan lehet egy kis méretű egyenáramú motor irányát és sebességét az L293D meghajtó chip segítségével szabályozni. Egyszerű kísérleteket végezve csak a motort forgatjuk balra és jobbra, és automatikusan gyorsítunk vagy lassítunk
Arduino bemutató - Szervo motorvezérlés joystick -kal: 4 lépés
Arduino bemutató - Szervo motorvezérlés a joystick segítségével: Ebben az oktatóanyagban megtanuljuk, hogyan kell használni a szervót a joystick segítségével. 1 db szervomotort fogunk vezérelni 1 joystick segítségével. Robotkaros projektjeit az oktatóanyag segítségével hajthatja végre. Természetesen külső akkumulátort / energiát fogunk használni, amikor
Arduino bemutató - Szervo motorvezérlés potenciométerrel: 5 lépés
Arduino bemutató - Szervo motorvezérlés potenciométerrel: Ez az oktatható az " Arduino: Hogyan vezérelhető a szervomotor potenciométerrel " YouTube -videó, amelyet nemrég töltöttem fel. Erősen ajánlom, hogy nézze meg. Látogassa meg a YouTube -csatornát
Arduino bemutató - Szervo motorvezérlés Arduino segítségével: 5 lépés
Arduino bemutató - Szervo motorvezérlés Arduino -val: Ez az oktatható az " Arduino: Hogyan lehet szabályozni a szervomotort Arduino -val " YouTube -videó, amelyet nemrég töltöttem fel. Erősen ajánlom, hogy nézze meg. Látogassa meg a YouTube -csatornát