Isi kandungan:
- Langkah 1: Keperluan Perkakasan dan Perisian
- Langkah 2: Konfigurasi STM32CubeMX
- Langkah 3: Keil UVision Coding
- Langkah 4: Hasilnya:)
Video: Kawalan Motor Servo Dengan STM32F4 ARM MCU: 4 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:09
Halo lagi kawan-kawan:) Oleh itu, dalam projek ini kita akan mengawal motor servo dengan STM32F4 ARM MCU. Dalam kes saya, saya akan menggunakan papan penemuan, tetapi jika anda memahami inti masalah, maka anda boleh menggunakannya untuk setiap MCU. Jadi. Mari kita mulakan:)
Langkah 1: Keperluan Perkakasan dan Perisian
Dari segi perkakasan, kami memerlukan:
- MCU yang terdapat dalam dewan STM32f4 Discovery saya
- Motor servo biasa, seperti SG90 atau yang lain
Dari segi perisian, kami memerlukan:
- STM32CubeMX
- Keil uVision
Sekiranya anda mempunyai semua ini, lompat ke langkah seterusnya:)
Langkah 2: Konfigurasi STM32CubeMX
Seperti yang anda ketahui, untuk mengawal motor servo kita memerlukan isyarat PWM. Keperluan dari segi isyarat PWM adalah seperti:
- Tempoh PWM mestilah 20 mS
- Tepat masa mesti antara 0.5 mS hingga 2.5 mS. Apabila tepat waktu 0,5 mS, maka servo akan berubah 0 darjah, 1,5 mS selama 90 darjah, dan 2,5 mS selama 180 darjah.
Jadi, kita perlu mengkonfigurasi PWM dan untuk tujuan itu kita akan menggunakan Timer1.
- Pertama, pilih TIM1 dari bahagian Pemasa. Langkah ini
-
Kemudian, dari bahagian Mod
- Pilih Jam Dalaman Langkah ini
- Generasi PWM CH1 Langkah ini
-
Kemudian, dari bahagian Konfigurasi
- Tetapkan Prescaler ke 160 Langkah ini
- Tetapkan Tempoh Kaunter hingga 2000 Langkah ini
- Tetapkan Pulse ke 50 Langkah ini
- Selain itu, dari Jam Konfigurasi tetapkan jam Pemasa APB1 ke 16MHz. Langkah ini
Sekarang, mari kita bincangkan sedikit mengenai langkah ini:
Kekerapan jam Pemasa APB1 kami ialah 16MHz. Jadi, ini bermaksud bahawa diperlukan 16, 000, 000 kutu untuk mendapatkan 1 saat. Walau bagaimanapun, kami menetapkan preskalaer kami ke 160. Ini bermaksud, kami membahagikan kekerapan kami dengan nombor itu dan menurunkan bilangan kutu menjadi 100, 000. Jadi, selama 1 saat, kami memerlukan 100, 000 kutu. Walau bagaimanapun, kita memerlukan 20mS tempoh PWM seperti yang kita nyatakan sebelumnya. Oleh itu, berdasarkan matematik sederhana, kita memerlukan 2000 kutu untuk 20mS. Oleh itu, dengan menetapkan Counter Period hingga 2000 kita menentukan tempoh isyarat PWM iaitu 20mS. Sekarang kita perlu menentukan nombor centang untuk mendapatkan waktu On dari 0.5mS hingga 2.5mS. Kita boleh mendapatkan persamaan ini dari matematik sederhana dan ia adalah:
On_Time = (Tandakan_Nombor / 100). Perlu diingat bahawa ini adalah on_time yang mengubah sudut motor servo. Jadi, di bawah gambar saya meringkaskan langkah ini. Sekiranya anda mempunyai sebarang pertanyaan, tulislah di komen dan saya akan menjawab secepat mungkin.
Gambar pengiraan
Setelah melakukan semua ini menghasilkan kod:)
Langkah 3: Keil UVision Coding
Oleh itu, mari kita tentukan terlebih dahulu apa yang ingin kita lakukan? Kami mahu, untuk menulis fungsi yang menerima darjah dan menuliskannya ke servo. Jadi, bagaimana kita akan melakukannya? Seperti yang telah kita katakan sebelumnya, untuk mengubah sudut kita perlu mengubah tepat pada waktunya. Sudut kami berubah antara [0, 180] dan jumlah kutu kami yang menentukan perubahan masa antara [50, 250]. Oleh itu, kita memerlukan fungsi pemetaan yang memetakan sudut yang diberikan kepada julat bilangan kutu. Sebagai contoh, untuk 0 darjah 50 kutu, untuk 180 darjah 250 kutu dan seterusnya … Oleh itu, mari tulis fungsi pemetaan kami:
peta int (int st1, int fn1, int st2, int fn2, nilai int) {return (1.0 * (nilai-st1)) / ((fn1-st1) * 1.0) * (fn2-st2) + st2; }
Ini adalah fungsi pemetaan kami. Adakah anda berminat bagaimana ia dihasilkan? Kemudian baca itu. Oleh itu, kami mengambil julat dan nilai yang ingin kami petakan.
Sekarang, mari tulis fungsi yang menerima sudut dan memetakannya ke jarak kutu:
kekosongan servo_write (sudut int) {htim1. Instance-> CCR1 = peta (0, 180, 50, 250, sudut); }
Seperti yang anda lihat, kod ini menerima sudut dan memetakannya ke julat bilangan kutu. Kemudian, bilangan kutu diberikan kepada daftar CCR1 yang mengawal sudut tepat pada masanya.
Walau bagaimanapun, agar semuanya berfungsi, kita mulakan pwm yang boleh dilakukan hanya dengan sebaris kod:
HAL_TIM_PWM_Mulakan (& htim1, TIM_CHANNEL_1);
Jadi, kita mempunyai fungsi yang menerima sudut dan menuliskannya ke servo. Mari uji dan tuliskan fungsi sapuan kami yang sangat mudah:
void servo_sweep (void) {untuk (int i = 0; i <= 180; i ++) {servo_write (i); HAL_Delay (10); } untuk (int i = 180; i> = 0; i--) {servo_write (i); HAL_Delay (10); }}
Jadi, ia hanya menghitung hingga 180 dan kemudian turun ke 0 dan tuliskan nilai-nilai ini kepada servo:) Oleh itu, mari lihat hasilnya!
Langkah 4: Hasilnya:)
Jadi, inilah akhirnya. Sekiranya anda mempunyai sebarang pertanyaan, sila tanya. Saya akan gembira untuk menjawabnya. Terima kasih banyak kerana membaca dan berharap saya dapat melihat anda dalam projek seterusnya:)
Disyorkan:
Kawalan Akses Makanan Kucing (ESP8266 + Motor Servo + Percetakan 3D): 5 Langkah (dengan Gambar)
Kawalan Akses Makanan Kucing (ESP8266 + Servo Motor + Percetakan 3D): Projek ini menjalani proses yang saya gunakan untuk membuat mangkuk makanan kucing automatik, untuk kucing diabetes saya yang berumur. Lihat, dia perlu makan sarapan sebelum dapat mengambil insulinnya, tetapi saya sering lupa mengambil makanannya sebelum saya tidur, yang
Tutorial Arduino - Kawalan Motor Servo Dengan Joystick: 4 Langkah
Tutorial Arduino - Kawalan Motor Servo Dengan Joystick: Dalam tutorial ini, kita akan belajar bagaimana menggunakan servo dengan Joystick. Kami akan mengawal motor servo 1 pcs dengan 1 Joystick. Anda boleh melaksanakan projek lengan robot anda dengan merujuk kepada tutorial ini. Sudah tentu kita akan menggunakan bateri / kuasa luaran ketika melakukan
Tutorial Arduino - Kawalan Motor Servo Dengan Potensiometer: 5 Langkah
Tutorial Arduino - Kawalan Motor Servo Dengan Potensiometer: Instruktif ini adalah versi bertulis dari " Arduino: Cara Mengendalikan Motor Servo dengan Potensiometer " Video YouTube yang saya muat naik baru-baru ini. Saya sangat mengesyorkan anda memeriksanya. Lawati Saluran YouTube
Mengemas Motor Servo Langkah Dengan Kawalan Bersiri Melalui Arduino Menggunakan Pencetak 3D - Langkah 4: 8
Merangkumi Step Servo Motor Dengan Serial Control Via Arduino Menggunakan 3D Printer - Pt4: Dalam video keempat siri Motor Step ini, kami akan menggunakan apa yang telah kami pelajari sebelumnya untuk membina motor servo stepper dengan kawalan melalui komunikasi bersiri dan nyata maklum balas kedudukan menggunakan pengekod resistif yang dipantau oleh Arduino. Dalam
Kawalan Kelajuan Motor DC Menggunakan Algoritma PID (STM32F4): 8 Langkah (dengan Gambar)
Kawalan Kelajuan Motor DC Menggunakan Algoritma PID (STM32F4): halo semua, Ini tahir ul haq dengan projek lain. Kali ini STM32F407 sebagai MC. Ini adalah akhir projek semester pertengahan. Harap anda menyukainya. Ia memerlukan banyak konsep dan teori sehingga kita membincangkannya terlebih dahulu. Dengan munculnya komputer dan