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.

Arduino ile motor ve servo kontrol

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.

DC motor

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.

Kollektör Motor Dübelleri

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ü

Elektrikli DC Motor

Ş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.

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.

Arduino DC Motor Bağlantı Şeması

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.

Devrenin yürütücü ve tanımlayıcı kısmı

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

DC motor ve arduino

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.

PWM Kontrol Fonksiyonu

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

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.

Arduino ve servo

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.

Servonun çalışma prensibi

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.

Arduino için Sevroprivod

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.

Servo kontrol ve Arduino

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.

Servo2 Kütüphanesi

İşte bir servo sürücü ile deneyler için kullandığım kodun bir örneği, standart örnekler kümesinde:

#include // kütüphaneyi bağlayın

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

 

Servoyu Arduino'ya bağlarız

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:

  • Servo nasıl düzenlenir ve çalışır?
  • Arduino ve step motor: temel bilgiler, diyagramlar, bağlantı ve kontrol
  • Cihazları Arduino'ya bağlayan özellikler
  • Asenkron motorun DC motordan ayırt edilmesi
  • Arduino'ya artımlı kodlayıcı nasıl bağlanır

  •