Daftar Isi:
2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-23 14:49
Halo lagi sobat:) Nah, pada project kali ini kita akan mengontrol sebuah motor servo dengan STM32F4 ARM MCU. Dalam kasus saya, saya akan menggunakan papan penemuan, tetapi jika Anda memahami inti masalahnya, maka Anda dapat menerapkannya untuk setiap MCU. Jadi. mari kita mulai:)
Langkah 1: Persyaratan Perangkat Keras dan Perangkat Lunak
Dalam hal perangkat keras kita akan membutuhkan:
- MCU yang ada di papan Discovery STM32f4 kasus saya
- Motor servo umum, seperti SG90 atau lainnya
Dalam hal perangkat lunak kita akan membutuhkan:
- STM32CubeMX
- Keil uVision
Jika Anda memiliki semua ini, lompat ke langkah berikutnya:)
Langkah 2: Konfigurasi STM32CubeMX
Seperti yang Anda ketahui, untuk mengendalikan motor servo kita membutuhkan sinyal PWM. Persyaratan dalam hal sinyal PWM adalah seperti itu:
- Periode PWM harus 20 mS
- Tepat waktu harus antara 0,5 mS hingga 2,5 mS. Saat on time 0,5 mS, maka servo akan berputar 0 derajat, 1,5 mS untuk 90 derajat, dan 2,5 mS untuk 180 derajat.
Jadi, kita perlu mengkonfigurasi PWM dan untuk itu kita akan menggunakan Timer1.
- Pertama, pilih TIM1 dari bagian Timer. Langkah ini
-
Kemudian, dari bagian Mode
- Pilih Jam Internal Langkah ini
- PWM Generasi CH1 Langkah ini
-
Kemudian, dari bagian Konfigurasi
- Atur Prescaler ke 160 Langkah ini
- Atur Periode Penghitung ke 2000 Langkah ini
- Atur Pulse ke 50 Langkah ini
- Selain itu, dari Konfigurasi Jam, atur jam Timer APB1 ke 16MHz. Langkah ini
Sekarang, mari kita bicara sedikit tentang langkah ini:
Frekuensi jam APB1 Timer kami adalah 16MHz. Jadi, itu berarti dibutuhkan 16.000, 000 tik untuk mendapatkan 1 detik. Namun, kita mengatur prescaler kita menjadi 160. Artinya, kita membagi frekuensi kita dengan angka tersebut dan mengurangi jumlah tick menjadi 100.000. Jadi, untuk 1 detik kita membutuhkan 100.000 tick. Namun, kami membutuhkan 20mS periode PWM seperti yang kami nyatakan sebelumnya. Jadi, berdasarkan matematika sederhana, kita membutuhkan 2000 tick untuk 20mS. Jadi, dengan mengatur Counter Period menjadi 2000 kita menentukan periode sinyal PWM yaitu 20mS. Sekarang kita perlu menentukan nomor centang untuk mendapatkan waktu On dari 0.5mS ke 2.5mS. Kita bisa mendapatkan persamaan ini dari matematika sederhana dan itu adalah:
On_Time = (Tick_Number / 100). Perlu diingat bahwa ini adalah on_time yang mengubah sudut motor servo. Jadi, di bawah gambar saya merangkum langkah ini. Jika Anda memiliki pertanyaan tulis di komentar dan saya akan menjawab secepat mungkin.
Gambar perhitungan
Setelah melakukan semua ini, buat kode:)
Langkah 3: Pengkodean Keil UVion
Jadi, mari kita tentukan dulu apa yang ingin kita lakukan? Kami ingin, menulis fungsi yang menerima derajat dan menulisnya ke servo. Jadi, bagaimana kita akan melakukannya? Seperti yang telah kami katakan sebelumnya, untuk mengubah sudut kita perlu mengubah waktu. Sudut kami berubah antara [0, 180] dan jumlah kutu kami yang menentukan perubahan waktu antara [50, 250]. Jadi, kita membutuhkan fungsi pemetaan yang memetakan sudut yang diberikan ke kisaran jumlah kutu. Misalnya, untuk 0 derajat 50 tick, untuk 180 derajat 250 tick dan seterusnya… Jadi mari kita tulis fungsi pemetaan kita:
int peta(int st1, int fn1, int st2, int fn2, int nilai){ return (1.0*(nilai-st1))/((fn1-st1)*1.0) * (fn2-st2)+st2; }
Ini adalah fungsi pemetaan kami. Apakah Anda tertarik bagaimana itu diturunkan? Kemudian baca itu. Jadi, kami mengambil rentang dan nilai yang ingin kami petakan.
Sekarang, mari kita tulis sebuah fungsi yang menerima sudut dan memetakannya ke kisaran tick:
void servo_write(int angle){ htim1. Instance->CCR1 = map(0, 180, 50, 250, angle); }
Seperti yang Anda lihat, kode ini menerima sudut dan memetakannya ke kisaran jumlah kutu. Kemudian, jumlah tick diberikan ke register CCR1 yang mengontrol waktu tepat dan sudut.
Namun, agar semua ini berfungsi, pertama-tama kita memulai pwm yang dapat dilakukan hanya dengan sebaris kode:
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
Jadi, kita memiliki fungsi yang menerima sudut dan menuliskannya ke servo. Mari kita uji dan tulis fungsi sapuan kita yang sangat mudah:
void servo_sweep(void){ for(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 tinggal hitung sampai 180 lalu turun ke 0 dan tulis nilai-nilai ini ke servo:) Jadi, mari kita lihat hasilnya!
Langkah 4: Hasilnya:)
Jadi, ini adalah akhir. Jika Anda memiliki pertanyaan silahkan bertanya. Saya akan senang untuk menjawabnya. Terima kasih banyak telah membaca dan berharap saya akan melihat Anda di proyek berikutnya:)
Direkomendasikan:
Kontrol Akses Makanan Cat (ESP8266 + Motor Servo + Pencetakan 3D): 5 Langkah (dengan Gambar)
Kontrol Akses Makanan Kucing (ESP8266 + Motor Servo + Pencetakan 3D): Proyek ini membahas proses yang saya gunakan untuk membuat mangkuk makanan kucing otomatis, untuk kucing diabetes tua saya, Chaz. Lihat, dia perlu sarapan sebelum dia bisa mendapatkan insulinnya, tapi aku sering lupa mengambil piring makanannya sebelum aku tidur, yang mana
Kontrol Gerakan Sederhana - Kontrol Mainan RC Anda Dengan Gerakan Lengan Anda: 4 Langkah (dengan Gambar)
Kontrol Gerakan Sederhana - Kontrol Mainan RC Anda Dengan Gerakan Lengan Anda: Selamat datang di 'ible' saya #45. Beberapa waktu yang lalu saya membuat BB8 versi RC yang berfungsi penuh menggunakan bagian Lego Star Wars … https://www.instructables.com/id/Whats-Inside-My-R…Ketika saya melihat betapa kerennya itu Force Band yang dibuat oleh Sphero, saya berpikir: "Ok, saya c
Kontrol Tirai Dengan ESP8266, Integrasi Google Home dan Openhab dan Kontrol Web: 5 Langkah (dengan Gambar)
Kontrol Tirai Dengan ESP8266, Integrasi Google Home dan Openhab dan Kontrol Web: Dalam Instruksi ini saya menunjukkan kepada Anda bagaimana saya menambahkan otomatisasi ke tirai saya. Saya ingin dapat menambah dan menghapus otomatisasi itu, jadi semua instalasi adalah clip on. Bagian utama adalah: Motor stepper Driver stepper dikendalikan bij ESP-01 Gear dan pemasangan
Enkapsulasi Motor Servo Langkah Dengan Kontrol Serial Melalui Arduino Menggunakan Printer 3D - Pt4: 8 Langkah
Enkapsulasi Motor Servo Langkah Dengan Kontrol Serial Melalui Arduino Menggunakan Printer 3D - Pt4: Dalam video keempat dari seri Langkah Motor ini, kita akan menggunakan apa yang telah kita pelajari sebelumnya untuk membangun motor servo stepper dengan kontrol melalui komunikasi serial dan real umpan balik posisi menggunakan encoder resistif yang dipantau oleh Arduino. Di dalam
Kontrol Kecepatan Motor DC Menggunakan Algoritma PID (STM32F4): 8 Langkah (dengan Gambar)
Kontrol Kecepatan Motor DC Menggunakan Algoritma PID (STM32F4): halo semuanya,Ini tahir ul haq dengan proyek lain. Kali ini STM32F407 sebagai MC. Ini adalah proyek akhir semester. Semoga Anda menyukainya. Ini membutuhkan banyak konsep dan teori, jadi kita masuk dulu. Dengan munculnya komputer dan