kategoriler: Mikrodenetleyici devreleri
Görüntülenme sayısı: 19709
Makaleye Yorumlar: 0
Arduino ile motor ve servo kontrol
Basit otomasyon sistemlerinin tasarımlarında, genellikle sadece sensörlerin okumalarını okumakla kalmaz, aynı zamanda hareket mekanizmalarını ayarlamak da gereklidir. Bunun için çeşitli elektrik motorları kullanılır. En basit ve en popüler seçenek bir DC motordur. Erişilebilirliği, hız ayar kolaylığı ile aşıkların sevgisini kazandı. Görev herhangi bir mekanizmayı belirli bir açıya veya mesafeye taşımaksa, bir servo sürücü veya bir step motor kullanmak uygundur.
Bu makalede, servolara ve küçük DC motorlara bakıyoruz, bunları bir Arduino kartına bağlıyor ve DCT'yi ayarlıyoruz.

DC motor
Taşınabilir cihazlarda, oyuncaklarda, radyo kontrollü modellerde ve diğer cihazlarda kullanılan en yaygın elektrik motoru. Kalıcı mıknatıslar statordaki küçük elektrik motoruna ve rotorda bir sarım üzerine sabitlenir.

Sargıya fırça düzeneğinden akım verilir. Fırçalar grafitten yapılır, bazen bakır kayan kontaklar bulunur. Fırçalar, rotorun bir ucunda bulunan lameller üzerinde kayar. Detaylara girmezseniz, dönüş hızı armatür sargı akımına bağlıdır.

Büyük DC motorlarda, statorda, rotor sargısına (fırça tertibatı aracılığıyla) belirli bir şekilde (sıralı, paralel veya karışık uyarma) bağlanan bir uyarma sarımı bağlanır. Böylece istenen tork ve devir sayısı elde edilir.
Hız kontrolü

Şebekeye bağlandığında, DC motor nominal hızda dönmeye başlar. Hızı azaltmak için akımı sınırlamanız gerekir. Bunu yapmak için balast dirençleri ortaya çıkar, ancak bu bir bütün olarak tesisin verimliliğini azaltır ve aşırı bir ısı kaynağı ortaya çıkar. Gerilim ve akımın daha etkili bir şekilde düzenlenmesi için başka bir yöntem kullanılır - PWM düzenlemesi.

Darbe genişliği modülasyonlu sinyali (voltaj) kontrol etmenin bir yöntemi, darbe genişliğini değiştirerek sabit bir süre (frekans) ile istenen voltaj değerini üretmektir.
Yani, dönem iki bölüme ayrılmıştır:
1. Dürtü süresi.
2. Zamanı duraklatın.
Nabız süresinin dönemin toplam süresine oranı görev döngüsü olarak adlandırılır:
Ks = ti / tper
karşılıklı "görev döngüsü" olarak adlandırılır:
D = 1 / KZ = tper / t ve
PWM kontrol cihazının çalışma modunu tanımlamak için her iki kavram da kullanılır: hem görev döngüsü hem de görev döngüsü.
Motorun mevcut tüketimi gücüne bağlıdır. Söylendiği gibi devir sayısı akıma bağlıdır. Akım, sargılara uygulanan voltaj miktarını değiştirerek ayarlanabilir. Aslında, motor pasaportuna göre nominal değeri aşan bir voltajla güç verildiğinde, hızı da nominal hızı aşacaktır. Bununla birlikte, bu tür çalışma modları motor için tehlikelidir, çünkü sargılardaki daha büyük bir akım akar ve bu da ısınmasının artmasına neden olur.
Kısa süreli darbelerden veya tekrar tekrar kısa süreli çalışma modlarından kaynaklanan motor hasarı minimum ise, yüksek voltaj ve devirlerde uzun süreli çalışma sırasında yanar veya yatakları ısınır ve sıkışır ve daha sonra güç kaynağı bağlantısı kesilirse sargılar yanar.
Giriş voltajı çok düşükse, küçük motorun hareket etmek için yeterli gücü olmayabilir. Bu nedenle, nominal değeri aşmayan belirli bir motor için normal hız ve voltajı deneysel olarak bulmak gerekir.
Arduino'ya bağlanıyoruz
Küçük bir motorum vardı, kaset çalardan geliyor, bu da nominal voltajının 5 voltun altında olacağı anlamına geliyor, o zaman arduino'nun çıkış gücü yeterli olacak. 5V pininden güç alacağım, yani. tahta üzerinde bulunan doğrusal stabilizörün çıkışından. Aşağıda gördüğünüz şemaya göre.
Bu motorun akımını bilmiyorum, bu yüzden gücü güce bağladım ve motor ile güç pimi arasına, PWM çıkışından bir sinyal uygulanan kapıya bir alan etkili transistör taktım, mevcut olanlardan herhangi biri kullanılabilir.

Hızı ayarlamak için, devreye A0 analog girişine bağlayan bir değişken direnç ekledim. Hızlı bir bağlantı için, aynı zamanda breadboard olarak da adlandırılan lehimsiz bir breadboard kullandım.
Transistör kablolarına bir akım sınırlayıcı direnç taktım (kapı şarj akımını azaltmak için, bu bağlantı noktasını yanmadan ve mikrodenetleyicinin güç kaynağını çökme ve donmadan koruyacak) ve bunu 240 khm'a kadar çekti ve 12 kOhm direnç ile yere çekti deklanşör tankı daha hızlı çalıştı ve boşaltıldı.
Açıklanan alan etkili transistörlerin detayları web sitemizdeki bir makalede. N kanallı ve dahili IRF840 ters diyotlu güçlü, yaygın ve çok pahalı olmayan bir mosfet kullandım.

Laboratuar standı montajım şöyle görünüyor:

AnalogWrite komutuyla (pin, değer) 0 ile 255 arasındaki ilgili çıkış (3, 5, 6, 9, 10, 11) değerlerine yazarken PWM kontrol fonksiyonu çağrılır. Çalışmalarının mantığı aşağıdaki grafiklerde tasvir edilmiştir.

Böyle bir sinyal transistörün kapısına uygulanır:

Utanç için program kodu kısa ve basittir, tüm bu işlevler ayrıntılı olarak açıklanmıştır arduino hakkında önceki yazılarda.
int sensorPin = A0; // potansiyometreden giriş
int motorPin = 3; // Kameranın kapısına PWM çıkışı
void setup () {
pinMode (motorPin, OUTPUT);
}
void loop () {
analogWrite (motorPin, harita (analogRead (sensorPin), 0, 1023, 0, 256));
}
AnalogWrite işlevinde, PWM çıkışına bir değer atarım, map komutuyla, kullanımı birkaç kod satırını ve bir değişkeni kaldırmanıza izin verir.
Bu bir çalışma şemasıdır ve yük gücünü, LED'lerin parlaklığını, motorların hızını kontrol ederken süreçleri gözlemlemek için mükemmeldir, sadece motor yerine istenen yükü bağlamanız gerekir. Bu durumda, 5V yerine yüke herhangi bir voltaj uygulanabilir, örneğin 12V, negatif gücü kontağa bağlamayı unutmayın, örneğin 12V, negatif gücü mikrodenetleyici kartındaki GND pinine bağlamayı unutmayın.
Arduino'da PWM frekansı, analogWrite fonksiyonu ile çağrıldığında, sadece 400 Hz'dir, minimum voltaj değerlerinde, motor sargılarından karşılık gelen frekansın bir uğultusu duyuldu.

Servo
Önceden belirlenmiş bir konumda olabilen ve harici faktörlere maruz kaldığında, örneğin milin zorla sapması durumunda, motor konumunu değiştirmez - servo sürücü olarak adlandırılır. Genel olarak, tanım biraz farklı geliyor:
Servo negatif geri beslemeli bir motordur.
Genellikle, üç tel bir servo sürücüden çıkar:
-
Artı güç.
-
Daha az güç.
-
Kontrol sinyali.
Servo sürücü şunlardan oluşur:
-
DC motor (veya fırçasız motor);
-
Yönetim ücretleri;
-
Konum vericisi (360 ° dönüş açısına sahip servolar için kodlayıcı veya 180 ° dönüş açısına sahip servolar için bir potansiyometre);
-
Vites küçültme (motor devrini düşürür ve tahrik milindeki torku arttırır).
Kontrol ünitesi, yerleşik konum sensöründeki sinyali ve kontrol telinden gelen sinyali karşılaştırır, eğer farklılarsa, sinyal arasındaki farkın dengelendiği bir açıda bir dönüş vardır.

Servoların temel özellikleri:
-
Dönüş hızı (şaftın 60 ° 'lik bir açıyla dönme süresi);
-
Tork (kg / cm, yani motor şafttan 1 cm kolda kaç kilogram dayanabilir);
-
Besleme gerilimi;
-
Akım tüketimi;
-
Kontrol yöntemiyle (analog veya dijital, önemli bir fark yoktur, ancak dijital daha hızlı ve daha kararlıdır).
Tipik olarak, sinyal süresi 20 ms'dir ve kontrol darbesinin süresi:
-
544 μs - 0 ° 'ye karşılık gelir;
-
2400 μs - 180 ° 'lik bir açıya karşılık gelir.
Nadir durumlarda, darbe uzunluğu sırasıyla 760 ve 1520 μs değişebilir, bu bilgi sürücünün teknik belgelerinde açıklanabilir. En popüler hobi servolarından biri Tower Pro SG90 ve benzeri modellerdir.Ucuz - yaklaşık 4 dolar.

Mil üzerinde 1.8 kg / cm tutar ve bununla birlikte mil için splinelı montaj vidaları ve kollarıdır. Aslında, bu bebek oldukça güçlüdür ve bir parmakla durdurmak çok sorunludur - sürücünün kendisi parmaklardan düşmeye başlar - bu onun gücüdür.
Servo kontrol ve Arduino
Daha önce de belirtildiği gibi, kontrol darbe süresini değiştirerek gerçekleştirilir, ancak bu yöntemi PWM (PWM) ile karıştırmayın, doğru adı PDM'dir (Darbe Süresi Modülasyonu). Sinyal frekansındaki hafif sapmalar (20 ms - süre, frekans 50 Hz) özel bir rol oynamaz. Ancak frekanstan 10 Hz'den fazla sapmayın, motor sarsıntılı olarak çalışabilir veya yanabilir.

Arduino'ya bağlantı oldukça basittir, ayrıca sürücüyü 5v pinten de besleyebilirsiniz, ancak istenmez. Gerçek şu ki, başlangıçta akımda küçük bir sıçrama var, bu bir güç düşüşüne neden olabilir ve Yanlış mikrodenetleyici çıkışları. Her ne kadar 1 küçük sürücü (tip SG90) mümkün, ancak artık yok.
Bu tür servoları arduino ile kontrol etmek için IDE'de yerleşik olan Servo kütüphanesine sahipsiniz, küçük bir komut seti var:
-
attach () - raptiyeye bir değişken ekleyin. Örnek: sürücü adı. Ataç (9) - pim 9'a bir servo bağlayın. Sürücünüz standart olmayan uzunluklarda kontrol darbeleri (544 ve 2400 μs) gerektiriyorsa, pin numarasından sonra virgülle ayrılabilirler, örneğin: servo.attach (pim, min açı (μs), ISS'de maksimum açı));
-
write () - şaftın dönüş açısını derece olarak ayarlar;
-
writeMicroseconds () - mikrosaniye cinsinden darbe uzunluğu boyunca açıyı ayarlar;
-
read () - şaftın mevcut konumunu belirler;
-
attached () - Servo bağlı bir pimin ayarlanıp ayarlanmadığını kontrol eder;
-
detach () - ekleme komutunu iptal eder.
Bu kütüphane UNO, Nano ve benzeri panolardan (mega368 ve 168) 12 servoyu kontrol etmenizi sağlarken, 9 ve 10 pimlerinde PWM kullanma yeteneği kaybolur. MEGA'nız varsa, 48. sunucuları kontrol edebilirsiniz, ancak 11 ve 12 numaralı pinlerdeki PWM kaybolacaktır, 12'ye kadar servo kullanırsanız, PWM tüm kontaklarda tamamen işlevsel kalacaktır.
Bu kütüphaneyi bağladıysanız, 433 MHz alıcı / vericilerle çalışamazsınız. Bunun için bir Servo2 kütüphanesi vardır, aksi takdirde aynıdır.

İşte bir servo sürücü ile deneyler için kullandığım kodun bir örneği, standart örnekler kümesinde:
#include
Servo myservo; // myservo servo için değişken adı bildirildi
int potpin = 0; // ayar potansiyometresini bağlamak için pin
int val; // potansiyometreden sinyal okuma sonuçlarını kaydetmek için değişken
void setup () {
myservoattak (9); // 9 pimi servo için kontrol çıkışı olarak ayarla
}
void loop () {
val = analogOkuma (potpin); // trans'de kaydedilen potansiyometreyi okuma sonuçları. val, 0 ila 1023 aralığında olacaklar
val = harita (val, 0, 1023, 0, 180); // ölçüm aralığını 0-1023 analog girişinden çevirin
// servo 0-180 derece için görev aralığında
myservo.write (val); // dönüşümü geç pot-ra'dan kontrole sinyal servo giriş
gecikme (15); // sistemin kararlı çalışması için gecikme gerekli

Sonuç
Bir arduino ile eşleştirilmiş en basit elektrik motorlarını kullanmak oldukça basit bir iştir, bu malzemeye hakim olmak otomasyon ve robotik alanındaki yeteneklerinizi arttırır. En basit robotlar veya radyo kontrollü otomobil modelleri bu tür motorlardan oluşur ve tekerleklerin dönüşünü kontrol etmek için servolar kullanılır.
Dikkate alınan örneklerde, dönme açısını veya dönme hızını ayarlamak için bir potansiyometre kullanıldı, bunun yerine başka bir sinyal kaynağı kullanılabilir, örneğin, sensörlerden alınan bilgilerin bir sonucu olarak dönüş veya hızda değişiklik meydana gelebilir.
Alternatif enerjide servo kullanımına bir örnek: güneş ışığının insidans açısının izlenmesi ve güneş enerjisi panellerindeki güneş panellerinin konumunun ayarlanması.
Böyle bir algoritmayı uygulamak için birkaç algoritma kullanabilirsiniz. photoresistler veya gelen ışık miktarını ölçmek için diğer optoelektronik cihazlar ve okumalarına bağlı olarak güneş panelinin dönüş açısını ayarlayın.
Ayrıca bkz. electro-tr.tomathouse.com
: