Isi kandungan:

Penjanaan Isyarat PWM Resolusi Tinggi untuk Servos RC Dengan Peranti STM32: 3 Langkah
Penjanaan Isyarat PWM Resolusi Tinggi untuk Servos RC Dengan Peranti STM32: 3 Langkah

Video: Penjanaan Isyarat PWM Resolusi Tinggi untuk Servos RC Dengan Peranti STM32: 3 Langkah

Video: Penjanaan Isyarat PWM Resolusi Tinggi untuk Servos RC Dengan Peranti STM32: 3 Langkah
Video: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, Julai
Anonim
Penjanaan Isyarat PWM Resolusi Tinggi untuk Servos RC Dengan Peranti STM32
Penjanaan Isyarat PWM Resolusi Tinggi untuk Servos RC Dengan Peranti STM32
Penjanaan Isyarat PWM Resolusi Tinggi untuk Servos RC Dengan Peranti STM32
Penjanaan Isyarat PWM Resolusi Tinggi untuk Servos RC Dengan Peranti STM32
Penjanaan Isyarat PWM Resolusi Tinggi untuk Servos RC Dengan Peranti STM32
Penjanaan Isyarat PWM Resolusi Tinggi untuk Servos RC Dengan Peranti STM32

Pada masa ini, saya sedang membina pemancar / penerima RC berdasarkan cip SX1280 RF. Salah satu tujuan untuk projek ini ialah saya mahukan resolusi servo 12 bit dari stik hingga ke servo. Sebahagiannya kerana servo digital moden mempunyai resolusi 12 bit kedua, pemancar mewah menggunakan 12 bit pula. Saya sedang menyiasat bagaimana saya dapat menghasilkan isyarat PWM resolusi tinggi pada peranti STM32. Saya menggunakan pil hitam (STM32F103C8T8) buat masa ini untuk prototaip.

Langkah 1: Senarai Bahagian

Perkakasan

  • Mana-mana papan pengembangan STM32F103 (pil biru, pil hitam, dll.)
  • Bank kuasa USB sebagai bekalan kuasa
  • Pengaturcara STM32 (Segmen j-link, ST-LINK / V2, atau sekadar klon st-pautan)

Perisian

  • STM32CubeMX
  • Atollic TrueSTUDIO untuk STM32
  • Sumber projek dari github

Langkah 2: Penyelesaian yang Jelas

Penyelesaian Yang Jelas
Penyelesaian Yang Jelas
Penyelesaian yang Jelas
Penyelesaian yang Jelas
Penyelesaian Yang Jelas
Penyelesaian Yang Jelas

Mungkin penyelesaian paling mudah adalah menggunakan salah satu pemasa yang dapat menghasilkan isyarat PWM, seperti TIM1-3 pada STM32F103. Untuk servo digital moden, kadar bingkai boleh turun hingga 5 ms atau lebih, tetapi untuk servo analog lama mestilah 20 ms atau 50 Hz. Oleh itu, sebagai senario terburuk mari kita menghasilkannya. Dengan resolusi jam 72 MHz dan penghitung pemasa 16 bit, kita perlu menetapkan pemasa pemasa ke minimum 23 agar dapat merangkumi kadar bingkai 20 ms. Saya memilih 24 kerana ketika itu selama 20 ms, saya perlu menetapkan kaunter tepat ke 60000. Anda dapat melihat persediaan CubeMX dan isyarat PWM 1 dan 1.5 ms yang dihasilkan dalam tangkapan skrin. Malangnya, untuk 1ms penghitung pemasa harus ditetapkan ke 3000, yang hanya akan memberi kita resolusi 11 bit. Tidak buruk, tetapi matlamatnya adalah 12 bit, jadi mari kita mencuba yang lain.

Sudah tentu Sekiranya saya memilih pengawal mikro dengan penghitung pemasa 32 bit, seperti STM32L476 resolusi ini boleh menjadi lebih tinggi dan masalahnya akan dapat diselesaikan.

Tetapi di sini, saya ingin mencadangkan penyelesaian alternatif yang akan meningkatkan lagi resolusi walaupun pada STM32F103.

Langkah 3: Pemasa Bertingkat untuk Penyelesaian Lebih Tinggi

Pemasa Bertingkat untuk Penyelesaian Lebih Tinggi
Pemasa Bertingkat untuk Penyelesaian Lebih Tinggi
Pemasa Bertingkat untuk Penyelesaian Lebih Tinggi
Pemasa Bertingkat untuk Penyelesaian Lebih Tinggi
Pemasa Bertingkat untuk Penyelesaian Lebih Tinggi
Pemasa Bertingkat untuk Penyelesaian Lebih Tinggi

Masalah utama dengan penyelesaian sebelumnya adalah bahawa kadar bingkai (20 ms) relatif tinggi berbanding dengan isyarat PWM yang dihasilkan (antara 1 dan 2 ms), jadi kami membuang beberapa bit berharga untuk baki 18 ms ketika kami sedang menunggu kerangka seterusnya. Ini dapat diselesaikan dengan lata pemasa menggunakan ciri pautan pemasa untuk penyegerakan.

Ideanya ialah saya akan menggunakan TIM1 sebagai master untuk menghasilkan kadar bingkai (20 ms) dan TIM2, TIM3 untuk mengatasi isyarat PWM sebagai hamba. Apabila tuan mencetuskan hamba, mereka hanya menghasilkan isyarat PWM dalam satu mod nadi. Oleh itu, saya hanya perlu menempuh jarak 2 ms pada pemasa tersebut. Nasib baik anda dapat merangkumi pemasa dalam perkakasan sehingga penyegerakan ini tidak memerlukan campur tangan dari pemproses dan sangat tepat juga, jitter berada di wilayah ps. Anda dapat melihat persediaan CubeMX pada tangkapan skrin.

Seperti yang anda lihat, saya memilih 3 sebagai prescalar jadi untuk 2 ms saya perlu menetapkan 48000 di kaunter pemasa. Ini memberi kita 24000 untuk 1 ms yang sebenarnya lebih banyak yang kita perlukan untuk resolusi 14 bit. Tadaaaa…

Sila lihat tangkapan skrin osiloskop di intro untuk hasil akhir. Saluran 3 (ungu) adalah gangguan pemasa utama yang akan mencetuskan saliran untuk menghasilkan satu nadi. Saluran 1 dan 4 (rasuk kuning dan hijau) adalah isyarat PWM sebenar yang dihasilkan oleh pemasa yang berbeza. Perhatikan bahawa mereka diselaraskan tetapi mereka diselaraskan di tepi belakang, itu kerana mod PWM 2. Ini tidak menjadi masalah, kerana kadar PWM untuk servo tertentu masih betul.

Manfaat lain dari penyelesaian ini adalah untuk mengubah kadar bingkai bermaksud mengubah tempoh dalam TIM1 sahaja. Untuk servo digital moden, anda boleh turun hingga 200-300 Hz, tetapi sila baca manual servo jika anda ingin memperbaikinya.

Disyorkan: