Apa cara paling sederhana untuk menghasilkan PWM tanpa Mikrokontroler?

15

Apa cara cepat dan elegan untuk menghasilkan PWM tanpa Mikrokontroler untuk mengendalikan motor servo? Dengan potensiometer atau cara lain untuk mengontrol siklus tugas dengan periode perbaikan.

  • maaf tentang kekacauan ini, saya ingin mengendalikan hobi servo.
pstan
sumber
Apakah Anda benar-benar bermaksud mengendalikan motor sebagai bagian dari sistem kontrol servo, atau apakah Anda bertanya tentang mengendalikan "hobby servo"? Lihat tambahan jawaban saya.
Olin Lathrop
1
Mengapa Anda menginginkan PWM? PWM seringkali hanya cara bagi mikro untuk memperkirakan fungsi kontrol analog. Jika yang Anda inginkan adalah tegangan atau arus analog, mungkin ada banyak cara yang lebih baik untuk melakukannya.
The Photon
2
@ThePhoton Jika dia mengendalikan hobi servo, PWM adalah apa yang diperlukan sebagai sinyal kontrol.
Nick Johnson
Jika Anda membatalkan persyaratan periode tetap, osilator delta-sigma akan menjadi solusi yang sangat sederhana. Saya telah melihat implementasi dengan opamp tunggal dan beberapa resistor / kapasitor. Ini mengasumsikan Anda tidak berbicara tentang RC-servo.
jippie
1
@ jippie - Apa itu osilator delta-sigma? Saya tahu delta-sigma ADC membutuhkan osilator, tetapi saya selalu menganggap itu adalah hal yang umum, karena itu bukan bagian dari konverter itu sendiri.
stevenvh

Jawaban:

25

Saya merekomendasikan (GASP!) 555 Timer dalam mode "astable" . Anda akan menemukan semua yang Anda butuhkan di tautan, tetapi saya menyalinnya di sini hanya untuk Anda!

Mode astable memberi Anda frekuensi PWM variabel, dan memungkinkan untuk siklus tugas yang dapat disesuaikan juga (persamaan waktu tinggi dan waktu rendah dalam tautan).

Sirkuit:

555 Timer, mode astable

Catatan: Saya akan menambahkan tutup elektrolitik di Vcc (timah positif) dan GND (timah negatif) untuk mengurangi efek penurunan tegangan listrik.

Frekuensi PWM:

Frekuensi output dari 555 Timer dalam mode astable

Beberapa pembelaan untuk jawaban saya dibandingkan dengan yang lain di pos ini. Sebagian besar jawaban lain memerlukan bentuk gelombang menengah untuk menghasilkan sinyal PWM variabel, seperti metode gelombang segitiga / pembanding umum. Saya tidak melihat banyak gunanya dalam membangun generator gelombang segitiga (sirkuit signifikan di-dan-dari dirinya sendiri) hanya sebagai langkah perantara untuk menyelesaikan masalah Anda.

555 adalah chip analog yang hebat dan melakukan apa yang Anda butuhkan. Saya berharap orang-orang tidak membenci mereka juga.

kevlar1818
sumber
2
Saya suka 555-an, tapi saya pikir @supercat benar karena 555 tunggal tidak akan bisa memberi Anda frekuensi-tetap, sinyal variabel-tugas-rasio. C akan diisi melalui R1 + R2, dan dikeluarkan melalui R2. Jika Anda meningkatkan R2, Anda akan meningkatkan waktu on dan off, dan karenanya periode. Jika Anda meningkatkan R1, Anda hanya menambah waktu, tetapi juga periode. Jika Anda meningkatkan C, Anda akan meningkat setiap saat, termasuk periode. Anda membutuhkan dua 555-an. Satu, dalam mode astable, yang akan menentukan periode, memicu yang kedua, dalam mode monostable, yang akan menentukan rasio tugas.
Telaclavo
5
"Anda akan menemukan semua yang Anda butuhkan di tautan". Tidak. Itu bukan cara yang tepat untuk menjawab. Berikan detailnya di sini.
stevenvh
1
Saya tidak membenci 555, saya hanya berharap orang tidak akan merujuk mereka sebagai solusi terbaik untuk semuanya . Satu 555 bukanlah cara terbaik untuk mengendalikan servo hobi.
stevenvh
1
@Telaclavo - Anda benar; Anda tidak dapat memvariasikan siklus tugas dan menjaga frekuensi konstan. Namun, seperti yang disebutkan WoutervanOoijen, Anda tidak perlu frekuensi yang kaku untuk menjalankan servo. Memvariasikan siklus tugas mungkin menciptakan sekitar 10-20% (perkiraan kasar) goyangan dalam frekuensi pulsa, yang seharusnya cukup akurat untuk sebagian besar servos. Dan lagi, Anda tidak perlu menyesuaikan siklus tugas untuk mengontrol servo.
kevlar1818
2
@stevenvh Anda memberi tahu saya ketika Wikipedia mati. Bahkan jika itu benar, seperti yang ditunjukkan Dean dengan komentarnya di atas, 555 itu (sudah) ada di mana-mana akan sulit untuk tidak menemukan buku lama, blog kecil, atau situs web hobi dengan info tentang mereka.
kevlar1818
8

Cara Ye Olde Phashioned untuk membuat PWM dengan siklus tugas yang dikontrol analog adalah dengan membandingkan sinyal kontrol analog dengan gelombang segitiga. Anda membuat generator gelombang segitiga yang beroperasi pada frekuensi PWM yang diinginkan. Ini diumpankan ke input negatif komparator dan sinyal kontrol analog ke input positif. Hasilnya adalah penuh tinggi atau penuh rendah, tetapi siklus tugas sebanding secara linear dengan sinyal kontrol. Amp audio kelas D bekerja pada prinsip ini, misalnya.

Dalam banyak kasus, PWM tidak perlu super linier, sehingga gelombang segitiga tidak harus memiliki tepi lurus sempurna. Mengizinkan mereka sedikit eksponensial dapat menyederhanakan sirkuit.

Ditambahkan:

Mark Rages menunjukkan bahwa ketika Anda mengatakan "motor servo", Anda bisa merujuk pada motor hobi yang dikendalikan oleh posisi kecil yang digunakan pada pesawat model dan sejenisnya. Jawaban saya berlaku untuk mengendalikan motor dengan asumsi Anda memiliki tegangan analog sebanding dengan seberapa keras Anda ingin menggerakkan motor. Itu tidak berlaku untuk "hobi hobi" ini. Mereka tidak dikendalikan oleh PWM dalam pengertian umum dari istilah itu, tetapi oleh lebar pulsa yang biasanya perlu dari 1 hingga 2 ms diulang setiap 20 hingga 50 ms atau lebih. Jika pertanyaan ini benar-benar tentang hobi hobi, maka itu harus diperbaiki untuk membuatnya menjadi jelas.

Olin Lathrop
sumber
Walaupun ini menyelesaikan tugas, penting untuk dicatat bahwa @pstan ingin mengendarai servo, dan memiliki fungsi generator dalam implementasinya mungkin tidak akan terlalu portabel.
kevlar1818
1
Siklus tugas motor servo umumnya cukup rendah, seperti 10% atau kurang. Dan servo menggunakan lebar pulsa secara langsung, bukan nilai rata-rata, jadi lebih baik menggunakan sirkuit yang memisahkan lebar pulsa dari tingkat pengulangan.
markrages
1
@ kevlar: Saya memeriksa kembali jawaban saya dan saya masih tidak melihat penyebut fungsi di sana. Yang saya katakan adalah Anda membutuhkan gelombang segitiga atau sesuatu yang cukup dekat. Anda tentu tidak memerlukan generator fungsi untuk membuatnya.
Olin Lathrop
@ Markark: Hah? Motor melihat rata-rata kereta pulsa jika cukup cepat. Beberapa 100 Hz cukup baik dalam hal itu untuk sebagian besar motor. Bagian servo diselesaikan oleh skema kontrol, yang tidak ditanyakan oleh OP. Sepertinya dia sudah memiliki level analog sebanding dengan seberapa keras motor yang akan digerakkan.
Olin Lathrop
@ Markark: Hanya terjadi kepada saya bahwa Anda berbicara tentang servos hobi, yang ingin pulsa 1-2 ms setiap 20 ms atau lebih? Komentar Anda masuk akal dalam hal itu, tetapi OP tidak menyebutkan hobi sama sekali.
Olin Lathrop
7

Gelombang segitiga. Pembanding. Ambang kontrol. Itulah cara dasar untuk melakukannya.

PP

masukkan deskripsi gambar di sini

Pertama menghasilkan gelombang persegi 50Hz. Cara paling sederhana:

masukkan deskripsi gambar di sini

Ω

REXTCEXT

T=REXT×CEXT

μΩ , dan C dalam nF.

ΩΩ potmeter .

Saya bisa melakukan ini dengan dua LM555, tetapi saya membutuhkan lebih banyak komponen eksternal.

sunting (tentang mikrokontroler)
Saya setuju dengan Olin (lihat komentar) bahwa mengecualikan mikrokontroler adalah rabun (Olin berkata "konyol"). Ada waktu ketika mengembangkan untuk mikrokontroler rumit, tetapi hari ini itu tidak lagi benar. Anda juga dapat memiliki antarmuka pemrograman dengan biaya beberapa euro. Solusinya kemudian akan terlihat sangat mudah sehingga tidak ada solusi non-controller yang dapat bersaing dengannya: Anda mengambil ATTiny5 (Olin mengambil PIC10F220) dalam SOT23-6. Hubungkan kapasitor decoupling ke koneksi daya dan potmeter ke input ADC. Itu dia! 3 (tiga) komponen. Mengkonversi pembacaan ADC ke output lebar pulsa sangat mudah sehingga hampir konyol, bahkan untuk programmer pemula.

Setelah Anda mulai dengan mereka, Anda akan menemukan bahwa mikrokontroler sering menawarkan solusi yang lebih sederhana dan lebih fleksibel daripada dengan IC lain atau komponen diskrit.

catatan
Dari pertanyaan Anda yang lain saya melihat bahwa Anda lakukan menggunakan mikrokontroler. Mengapa Anda ingin menghindarinya di sini?

stevenvh
sumber
Apa cara mendapatkan gelombang segitiga?
m. Setiap
1
@ m.Alin - Jika Anda ingin segitiga yang sangat bersih ini adalah cara yang tepat. Tetapi input inverter di osilator saya juga mendekati segitiga, meskipun lerengnya benar-benar eksponensial.
stevenvh
1
secara lokal, 555 lebih murah dari 74HCT1G14 di sini. +1 BTW. \
Standard Sandun
3
@stevenvh "Jika Anda ingin segitiga yang sangat bersih ini adalah cara yang tepat." Menurut logika Anda, ini sama sekali tidak dapat diterima. Harap sertakan ini dalam jawaban Anda yang sangat informatif dan lengkap.
kevlar1818
2
@ pstan - Jika spesifikasi Anda tidak terlalu tinggi, Anda mungkin akan menggunakan sirkuit 555. Ini jauh dari sempurna: frekuensinya bervariasi dengan siklus tugas, dan kontrolnya tidak linier. The segitiga Generator + pembanding memecahkan mereka kekurangan.
stevenvh
4

Cara paling sederhana untuk menghasilkan sinyal PWM adalah memberi makan gelombang gigi gergaji atau gelombang segitiga ke dalam satu input komparator analog dan tegangan kontrol ke input lainnya. Jika seseorang tidak bisa mendapatkan gelombang segitiga murni, orang mungkin bisa memperkirakannya dengan melewatkan gelombang persegi melalui filter RC sehingga output dari filter berayun antara kira-kira 1 / 4VDD dan 3 / 4VDD, dan kemudian menskalakan tegangan kontrol yang terjadi. ke dalam komparator sehingga tegangan kontrol yang menghasilkan siklus tugas 0,01% akan diterjemahkan ke tegangan terendah dari gelombang persegi disaring, dan tegangan kontrol yang harus menghasilkan siklus tugas 99,99% akan diterjemahkan ke tegangan tertinggi dari filter gelombang persegi. Ini akan menghasilkan lebar pulsa yang tidak cukup linier sebanding dengan amplitudo, tetapi cukup dekat untuk banyak tujuan.

supercat
sumber
1
Dan inilah yang dilakukan sirkuit NE555 seperti yang diusulkan oleh kevlar1818 ...
Cees Meijer
2
@CeesMeijer: Poster meminta siklus tugas variabel dan periode tetap. Saya tidak tahu cara menggunakan 555 tunggal untuk mengubah tegangan kontrol menjadi gelombang siklus variabel-tugas frekuensi tetap. Ini bisa berfungsi dengan sangat baik untuk menghasilkan gelombang segitiga-ish untuk dimasukkan ke komparator.
supercat
Sudah 20 tahun sejak saya membangun sirkuit ini, jadi saya harus mencarinya. Dan memang Anda benar. Saya menggunakan pemicu eksternal untuk mendapatkan frekuensi konstan. Anda bisa menggunakan 555 kedua untuk itu.
Cees Meijer
2

Saya sarankan menggunakan IC kontrol catu daya bertegangan rendah (BiCMOS) seperti UCC3803 . Frekuensi operasi dapat dengan mudah diatur dengan R dan C sederhana, dan kontrol siklus tugas mudah dilakukan dengan potensiometer. Ini akan beroperasi pada rel 5V.

kutipan dari lembar data TI UC3842

UCC3803 kompatibel dengan pin dengan seri UCx84x pengendali PWM. Jika Anda ingin melakukan PWM mudah, Anda dapat menggunakan skema di atas, menghilangkan R1, 2N2222 dan pot penyesuaian 5k ISENSE 5k (hanya ikat pin 3 ke ground). Anda mungkin juga dapat menghilangkan dua resistor 4.7k secara seri dengan pot kesalahan amp dan langsung menuju ke Vref dan Gnd, atau menggunakan pembagi tegangan eksplisit jika penyesuaian tidak diperlukan. (Anda tidak menentukan apakah Anda perlu dengan mudah mengubah siklus tugas).

IC ini mampu mengemudi di sekitar 1A saat ini. (Jika servomotor Anda memiliki input PWM, ini adalah titik moot.)

Adam Lawrence
sumber
"Mungkin perlu driver eksternal untuk benar-benar menyalakan motor". Apakah kamu yakin Saya selalu berpikir input PWM hanya level sinyal arus rendah. Untuk daya, servo memiliki koneksi ketiga.
stevenvh
Juga, saya hanya ingat siklus tugas hanya 5 hingga 10%. Itu bisa menjadi cara yang tepat untuk memasok daya.
stevenvh
Ini bagus. Tetapi masih banyak komponen eksternal.
Standard Sandun
Terlihat lebih seperti UEMIG: Generator EMI yang tidak perlu. :-(
stevenvh
Tampaknya juga membutuhkan input 10V minimum. Mungkin bukan pilihan terbaik ...
stevenvh