Mikrodenetleyici olmadan PWM üretmenin en basit yolu nedir?


15

Bir servo motoru kontrol etmek için bir Mikrodenetleyici olmadan PWM üretmenin hızlı ve zarif yolu nedir? Potansiyometre veya görev döngüsünü sabit süre ile kontrol etmenin diğer yolları ile.

  • karışıklık için üzgünüm, bir hobi servo kontrol etmek istiyorum.

Gerçekten bir motoru servo kontrol sisteminin bir parçası olarak kontrol etmek mi demek istediniz, yoksa bir "hobi servo" nun kontrolünü mü istiyorsunuz? Cevabımın eklenmesine bakın.
Olin Lathrop

1
Neden PWM istiyorsun? PWM genellikle bir mikro için bir analog kontrol fonksiyonuna yaklaşmanın bir yoludur. Gerçekten istediğiniz bir analog voltaj veya akımsa, bunu yapmanın muhtemelen daha iyi yolları vardır.
Foton

2
@Resim Eğer bir hobi servo kontrol ediyorsa, PWM kontrol sinyali olarak gereklidir.
Nick Johnson

Sabit süre gereksinimini düşürürseniz, bir delta-sigma osilatörü çok basit bir çözüm olacaktır. Tek bir opamp ve bir avuç direnç / kapasitör ile uygulamalar gördüm. Bu RC-servo'dan bahsetmediğinizi varsayar.
jippie

1
@jippie - Delta-sigma osilatörü nedir? Bir delta-sigma ADC'nin bir osilatöre ihtiyacı olduğunu biliyorum, ama her zaman ortak bir şey olduğunu varsaydım, çünkü dönüştürücünün kendisinin bir parçası değil.
stevenvh

Yanıtlar:


25

" GASP!) 555 Zamanlayıcıyı" kararsız "modda öneririm . İhtiyacınız olan her şeyi linkte bulacaksınız, ama onları sadece sizin için buraya kopyaladım!

Kararsız mod, değişken bir PWM frekansı sağlar ve ayarlanabilir bir görev döngüsüne de izin verir (bağlantıdaki yüksek ve düşük zaman denklemleri).

Devre:

555 Timer, astable mode

Not: Güç kaynağı voltajındaki düşüşlerin etkisini azaltmak için Vcc (pozitif uç) ve GND (negatif uç) arasında bir elektrolitik kapak eklerim.

PWM frekansı:

Output frequency of 555 Timer in astable mode

Cevabım için bu yazıda diğerlerine kıyasla biraz savunma. Diğer cevapların çoğu, ortak üçgen dalga / karşılaştırıcı yöntemi gibi değişken bir PWM sinyali üretmek için bir ara dalga formu gerektirir. Üçgen dalga jeneratörünün (kendi başına önemli bir devre) inşa edilmesinde sadece probleminizi çözmek için bir ara adım olarak fazla bir şey görmüyorum.

555 harika bir analog çip ve ihtiyacınız olanı yapıyor. Keşke insanlar onlardan o kadar nefret etmiyorlardı.


2
555'lerden hoşlanıyorum, ancak bence Supercat, tek bir 555'in size sabit frekanslı, değişken görev oranı sinyali veremeyeceği konusunda haklı. C, R1 + R2 ile doldurulur ve R2 ile boşaltılır. R2'yi artırırsanız, hem açık hem de kapalı zamanları ve dolayısıyla süreyi artıracaksınız. R1'i artırırsanız, yalnızca açılış zamanını değil, süreyi de artırırsınız. C'yi artırırsanız, dönem de dahil olmak üzere her zaman artacaktır. İki 555'e ihtiyacınız var. Biri, kararsız modda, süreyi belirleyecek, ikinci bir süreyi tetikleyecek, tekli modda, görev oranını belirleyecektir.
Telaclavo

5
"İhtiyacınız olan her şeyi linkte bulacaksınız". Hayır. Bu cevaplamanın doğru yolu değil. Ayrıntıları buraya girin.
stevenvh

1
555'ten nefret etmiyorum, sadece insanların her şey için en iyi çözüm olduğunu söylememelerini dilerim . Tek bir 555, hobi servolarını kontrol etmenin en iyi yolu değildir.
stevenvh

1
@Telaclavo - Haklısın; görev döngüsünü değiştiremez ve frekansı sabit tutamazsınız. Bununla birlikte, WoutervanOoijen'in belirttiği gibi, bir servo çalıştırmak için sabit olarak sabitlenmiş bir frekansa ihtiyacınız yoktur. Görev döngüsünü değiştirmek muhtemelen nabız frekansında yaklaşık% 10-20 (kaba tahmin) yalpalama oluşturur, bu da çoğu servo için yeterince doğru olmalıdır. Ve sonra, yine de, bir servo kontrol etmek için görev döngüsünü gerçekten ayarlamanıza gerek yoktur.
kevlar1818

2
@stevenvh Wikipedia öldüğünde bana haber ver. Öyle olsa bile, Dean'in yukarıdaki yorumuyla gösterdiği gibi, 555 o kadar yaygındı ki, onlar hakkında bilgi içeren eski bir kitap, küçük blog veya hobi web sitesi bulmak zor olurdu.
kevlar1818

8

Analog kontrollü görev döngüsü ile PWM yapmanın Ye Olde Phashioned yolu, analog kontrol sinyalini bir üçgen dalga ile karşılaştırmaktır. İstediğiniz PWM frekansında çalışan bir üçgen dalga üreteci yaparsınız. Bu, bir karşılaştırıcının negatif girişine ve analog kontrol sinyaline pozitif girişe beslenir. Sonuç tam yüksek veya tam düşüktür, ancak görev döngüsü kontrol sinyali ile doğrusal olarak orantılıdır. Örneğin, erken D sınıfı ses amfileri bu prensip üzerinde çalıştı.

Birçok durumda PWM'nin süper doğrusal olması gerekmez, bu nedenle üçgen dalganın mükemmel düz kenarlara sahip olması gerekmez. Biraz üstel olmalarına izin vermek devreyi basitleştirebilir.

Katma:

Mark Rages, "servo motor" dediğinizde, model uçaklarda ve benzerlerinde kullanılan küçük konum kontrollü hobi motorlarından bahsedebileceğinizi belirtti. Cevabım, motoru ne kadar zorlamak istediğinizle orantılı bir analog voltajınız olduğunu varsayarak bir motoru kontrol etmek için geçerlidir. Bu "hobi servoları" için geçerli değildir. Bunlar, bu terimin ortak anlamıyla PWM tarafından kontrol edilmez, ancak genellikle her 20 ila 50 ms'de bir tekrarlanan 1 ila 2 ms arasında olması gereken darbelerin genişliği ile kontrol edilmez. Bu soru gerçekten hobi servoları ile ilgiliyse, bunu netleştirmek için düzeltilmelidir.


Bu görevi yerine getirirken, @pstan'ın bir servo sürmek istediğini ve bu nedenle uygulamasında bir işlev oluşturucunun büyük olasılıkla çok taşınabilir olmayacağını belirtmek önemlidir.
kevlar1818

1
Servo motor çalışma çevrimleri genellikle% 10 veya daha az gibi oldukça düşüktür. Servo darbe genişliğini ortalama değer değil doğrudan kullanır, bu nedenle darbe genişliğini tekrar hızından ayıran bir devre kullanmak daha iyidir.
markrages

1
@kevlar: Cevabımı tekrar kontrol ettim ve hala bir fonksiyon üretecinden bahsetmiyorum. Söylediğim tek şey bir üçgen dalgaya ya da yeterince yakın bir şeye ihtiyacın oldu. Bunlardan birini yapmak için kesinlikle bir fonksiyon jeneratörüne ihtiyacınız yoktur.
Olin Lathrop

@Markrages: Ha? Motorlar, yeterince hızlıysa nabız dizisinin ortalamasını görür. Birkaç 100 Hz, çoğu motor için bu konuda yeterince iyidir. Servo kısmı, OP'nin sormadığı kontrol şeması ile gerçekleştirilir. Motorun ne kadar zor sürüleceğine orantılı bir analog seviyesi var gibi görünüyor.
Olin Lathrop

@Markrages: Bana her 20 ms'de bir 1-2 ms darbe isteyen hobi servolarından bahsettiğiniz oldu mu? Yorumunuz bu ışıkta bir anlam ifade ediyor, ancak OP hobi servosundan hiç bahsetmedi.
Olin Lathrop

7

Üçgen dalga. Karşılaştırıcı. Kontrol eşiği. Bunu yapmanın temel yolu bu.

PP üçgeninde, karşılaştırıcının eşiğini 4.5V ile 4.75V arasında değiştirmeniz gerekir. Herhangi bir sapma ve servoyu tüm aralığı üzerinde kontrol edemezsiniz. Bu hassas bileşenler gerektirir. Ayrıca, üçgen dalga jeneratörünün 2 opampa ihtiyacı var ve sonra karşılaştırıcı var .. Daha iyi bir yol var.

enter image description here

Önce 50Hz kare dalga üretin. En basit yol:

enter image description here

Ω direnç ve 100nF kapasitör size 20 süre verecektir.

REXTCEXT

T=R,EXTxCEXT

μΩ

ΩΩ

Bunu iki LM555 ile yapabilirdim, ama daha fazla harici bileşene ihtiyacım vardı.

düzenlemek (mikrodenetleyiciler hakkında)
Ben Olin kabul ediyorum (yorumlara bakın) bir mikrodenetleyici hariç görmezden (Olin dedi "saçma"). Bir mikrodenetleyici için geliştirmenin karmaşık olduğu bir zaman vardı, ama bugün artık doğru değil. Ayrıca birkaç avroluk bir programlama arayüzüne sahip olabilirsiniz. Çözüm o zaman o kadar kolay görünecek ki, denetleyici olmayan bir çözüm onunla rekabet edemez: SOT23-6'da ATTiny5 (Olin bir PIC10F220 alır) alırsınız. Güç bağlantılarına bir ayırma kapasitörü ve ADC girişine potmetre bağlayın. Bu kadar! 3 (üç) bileşen. ADC okumasını bir darbe genişlik çıkışına dönüştürmek o kadar kolaydır ki, bir başlangıç ​​programcısı için bile neredeyse saçmadır.

Onlarla başladıktan sonra, mikrodenetleyicilerin diğer IC'lerden veya ayrık bileşenlerden daha basit ve daha esnek bir çözüm sunduğunu göreceksiniz.

Bir not
diğer sorunuza itibaren Bunu görmek yapmak kullanımı mikrokontrollör. Neden onlardan kaçınmak istiyorsun?


Üçgen dalga elde etmenin yolu nedir?
m.Alin

1
@ m.Alin - Çok temiz bir üçgen istiyorsanız bu doğru yoldur. Ama osilatörümdeki invertör girişi de bir üçgene yaklaşıyor, ancak eğimler gerçekten üstel.
stevenvh

1
yerel olarak konuşursak, 555 burada 74HCT1G14'ten daha ucuzdur. +1 BTW. \
Standart Sandun

3
@stevenvh "Çok temiz bir üçgen istiyorsanız bu doğru yoldur." Mantıklarınızla bu tamamen kabul edilemez. Lütfen bunu çok bilgilendirici ve eksiksiz cevabınıza ekleyin.
kevlar1818

2
@pstan - Teknik özellikleriniz çok yüksek değilse muhtemelen 555 devresini kullanırsınız. Mükemmel olmaktan uzak: frekans, görev döngüsüne göre değişir ve kontrol doğrusal değildir. Üçgen jeneratör + karşılaştırma bu dezavantajları çözmektedir.
stevenvh

4

PWM sinyali üretmenin en basit yolu, testere dişi dalgasını veya üçgen dalgasını bir analog karşılaştırıcının bir girişine ve kontrol voltajını diğerine beslemektir. Bir kişi saf bir üçgen dalga elde edemezse, bir RC filtresinden kare bir dalga geçirerek, filtrenin çıkışı kabaca 1 / 4VDD ve 3 / 4VDD arasında sallanacak ve ardından kontrol voltajını ölçeklendirerek makul bir dalga olabilir. % 0,01 görev döngüsü vermesi gereken bir kontrol voltajının, filtrelenmiş kare dalganın en düşük voltajına çevrilmesi ve% 99,99 görev döngüsü vermesi gereken kontrol voltajı, filtrelenmiş en yüksek voltaja çevrilecektir. kare dalgası. Bu, genlikle oldukça doğrusal orantılı olmayan, ancak birçok amaç için yeterince yakın olan bir darbe genişliği verecektir.


1
Ve bu NE555 devresinin kevlar1818 tarafından önerildiği gibi yaptığı şey ...
Cees Meijer

2
@CeesMeijer: Poster değişken bir görev döngüsü ve sabit bir süre istedi. Bir kontrol voltajını sabit frekanslı değişken görev döngüsü dalgasına dönüştürmek için tek bir 555 kullanmanın hiçbir yolunu bilmiyorum. Bununla birlikte, bir karşılaştırıcıya beslemek için bir üçgen-ish dalgası oluşturmak çok güzel olabilir.
supercat

Bu devreyi kurduğumdan bu yana 20 yıl geçti, bu yüzden bakmak zorundaydım. Ve gerçekten haklısın. Sabit bir frekans elde etmek için harici bir tetikleyici kullandım. Bunun için ikinci bir 555 kullanabilirsiniz.
Cees Meijer

2

UCC3803 gibi düşük voltajlı (BiCMOS) güç kaynağı kontrol IC'sini kullanmanızı öneririm . Çalışma frekansı basit bir R ve C ile kolayca ayarlanabilir ve görev döngüsü kontrolü bir potansiyometre ile kolayca yapılabilir. 5V ray üzerinde çalışacaktır.

excerpt from TI UC3842 data sheet

UCC3803, UCx84x serisi PWM kontrol cihazlarıyla pin uyumludur. Kolay PWM yapmak istiyorsanız, yukarıdaki şemayı kullanabilirsiniz, R1, 2N2222 ve 5k ISENSE ayar kabını (sadece pimi 3 toprağa bağlayın) atlayarak kullanabilirsiniz. Muhtemelen hata amplifikatörü ayar potu ile seri olarak iki 4.7k direnç atlayabilir ve doğrudan Vref ve Gnd'ye gidebilir veya ayarlama gerekli değilse açık bir voltaj bölücü kullanabilirsiniz. (Görev döngüsünü kolayca değiştirmeniz gerekip gerekmediğini belirtmediniz).

IC, 1A akım etrafında sürüş yapabilir. (Servomotorunuzda bir PWM girişi varsa, bu bir tartışma noktasıdır.)


msgstr "motora güç sağlamak için harici bir sürücüye ihtiyaç duyulabilir". Emin misiniz? Her zaman PWM girişinin sadece düşük akım sinyal seviyesi olduğunu düşündüm. Güç için bir servo üçüncü bir bağlantıya sahiptir.
stevenvh

Ayrıca, görev döngüsünün sadece% 5 ila 10 olduğunu hatırlıyorum. Bu, güç sağlamanın doğru yolu olabilir.
stevenvh

Bu güzel. Ancak yine de çok sayıda harici bileşen sayar.
Standart Sandun

Daha çok bir UEMIG: Gereksiz EMI Jeneratörü gibi görünüyor. :-(
stevenvh

Ayrıca minimum 10V girişe ihtiyaç duyduğu görülüyor. Belki de en iyi seçim değil ...
stevenvh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.