Kategori: Litar mikropengawal
Bilangan pandangan: 19709
Komen pada artikel: 0

Kawalan motor dan servo dengan Arduino

 

Dalam reka bentuk mudah sistem automasi, ia sering diperlukan bukan sahaja untuk membaca bacaan sensor, tetapi juga untuk menetapkan mekanisme gerakan. Untuk ini, pelbagai motor elektrik digunakan. Pilihan yang paling mudah dan paling popular adalah motor DC. Dia memenangi cinta pencinta dengan kemudahannya, memudahkan pelarasan laju. Jika tugasnya adalah untuk memindahkan mekanisme ke sudut atau jarak yang diberikan, mudah untuk menggunakan pemacu servo atau motor stepper.

Dalam artikel ini, kita melihat servos dan motor DC kecil, menyambungkannya ke papan Arduino, dan menyesuaikan DCT.

Kawalan motor dan servo dengan Arduino

Motor DC

Motor elektrik yang paling biasa digunakan dalam peranti mudah alih, mainan, model kawalan radio dan peranti lain. Magnet kekal tetap pada motor elektrik kecil di stator, dan penggulungan pada pemutar.

Motor DC

Semasa dibekalkan kepada penggulungan melalui pemasangan berus. Berus diperbuat daripada grafit, kadang-kadang kenalan gelongsor tembaga dijumpai. Berus meluncur di atas lamellas yang terletak di salah satu hujung pemutar. Jika anda tidak memasuki butiran, maka kelajuan putarannya bergantung kepada arus penggulungan angker.

Pemasang Motor Anchor

Pada motor DC besar, di stator, terdapat pengujaan penggulungan yang terhubung ke penggulungan pemutar (melalui pemasangan berus) dengan cara tertentu (pengujaan berurutan, selari atau bercampur). Oleh itu, tork yang dikehendaki dan bilangan revolusi dicapai.


Kawalan kelajuan

Electric DC Motor

Apabila disambungkan ke induk, motor DC mula berputar pada kelajuan yang diberi nilai. Untuk mengurangkan kelajuan anda perlu mengehadkan semasa. Untuk melakukan ini, rintangan balast diperkenalkan, tetapi ini mengurangkan kecekapan pemasangan secara keseluruhan dan sumber haba yang berlebihan muncul. Untuk peraturan yang lebih berkesan bagi voltan dan arus, kaedah lain digunakan - Peraturan PWM.

Peraturan PWM

Satu kaedah mengawal isyarat termodul (voltan) yang dikawal oleh pulse adalah untuk menjana nilai voltan yang dikehendaki dengan menukar lebar nadi, dengan tempoh masa yang tetap (kekerapan).

Iaitu, tempoh itu dibahagikan kepada dua bahagian:

1. Masa Impuls.

2. Jeda masa.

Nisbah masa nadi untuk masa keseluruhan masa disebut kitaran tugas:

Ks = ti / tper

saling disebut "kitaran tugas":

D = 1 / KZ = tper / t dan

Untuk menerangkan mod pengendalian pengawal PWM, kedua-dua konsep digunakan: kedua-dua kitar tugas dan kitaran tugas.

Penggunaan semasa motor bergantung pada kuasanya. Bilangan revolusi, seperti yang dikatakan, bergantung kepada semasa. Arus boleh diselaraskan dengan menukar jumlah voltan yang digunakan pada belitan. Malah, apabila dikuasakan oleh voltan yang melebihi nilai nominal mengikut pasport motor, kelajuannya juga akan melebihi kelajuan nominal. Walau bagaimanapun, mod operasi sedemikian berbahaya untuk motor, kerana arus yang lebih besar mengalir dalam lilitan, yang menyebabkan peningkatan pemanasan mereka.

Sekiranya kerosakan pada enjin dari impuls jangka pendek atau mod operasi jangka pendek adalah minimum, maka semasa operasi berpanjangan pada voltan tinggi dan revs ia akan terbakar atau galasnya akan panas dan baji, dan kemudian lilitan akan terbakar jika bekalan kuasa tidak diputuskan.

Jika voltan input terlalu rendah, motor kecil mungkin tidak mempunyai kuasa yang cukup untuk bergerak. Oleh itu, adalah perlu untuk secara eksperimen mengetahui kelajuan dan voltan biasa untuk enjin tertentu yang tidak melebihi nominal.


Kami menyambung ke arduino

Saya mempunyai motor kecil, nampaknya dari pemain kaset, yang bermaksud bahawa voltan undiannya akan berada di bawah 5 volt, maka kuasa output arduino akan mencukupi. Saya akan kuasa dari pin 5V, iaitu. dari output penstabil linier yang terletak di papan. Mengikut skim yang anda lihat di bawah.

Saya tidak tahu semasa motor ini, jadi saya menyambungkannya dengan kuasa, dan saya memasang transistor kesan medan di antara motor dan pin kuasa, di pintu yang mana isyarat daripada output PWM digunakan, mana-mana yang boleh digunakan.

Arduino DC Motor Connection Diagram

Untuk melaraskan kelajuan, saya menambahkan perintang variabel ke litar, menyambungkannya ke input analog A0. Untuk sambungan cepat, saya menggunakan papan roti tanpa solder, yang juga dipanggil papan roti.

Saya memasang perintang yang mengehadkan semasa dalam pendawaian transistor (untuk mengurangkan beban cas saat ini, ini akan menjimatkan pelabuhan dari pembakaran dan bekalan kuasa mikrokontroler dari penenggelaman dan pembekuannya) dengan 240 Ohms, dan menariknya ke tanah dengan perintang 12 kOhm, ini mesti dilakukan untuk menjadikannya lebih stabil tangki pengatup bekerja dan dilepaskan lebih cepat.

Butiran mengenai transistor kesan bidang yang diterangkan dalam artikel di laman web kami. Saya menggunakan mosfet yang kuat, biasa dan tidak terlalu mahal dengan saluran n dan terbina dalam IRF840 diod terbalik.

Eksekutif dan menentukan bahagian litar

Inilah yang saya lihat perhimpunan berdiri makmal saya:

DC motor dan arduino

Fungsi kawalan PWM dipanggil ketika menulis ke output yang sama (3, 5, 6, 9, 10, 11) dari 0 hingga 255 dengan arahan AnalogWrite (pin, nilai). Logik karyanya digambarkan dalam graf di bawah.

Fungsi Kawalan PWM

Isyarat sedemikian digunakan pada pintu transistor:

Isyarat sedemikian digunakan pada pintu transistor

Kod program untuk memalukan adalah singkat dan mudah, secara terperinci semua fungsi ini telah diterangkan dalam artikel sebelumnya tentang arduino.

int sensorPin = A0; // input daripada potensiometer

int motorPin = 3; // PWM output ke pintu masuk kamera

void setup () {

pinMode (motorPin, OUTPUT);

}

kekosongan gelung () {

analogWrite (motorPin, peta (analogRead (sensorPin), 0, 1023, 0, 256));

}

Dalam fungsi analogWrite, saya memberikan nilai kepada output PWM, melalui arahan peta, penggunaannya membolehkan anda menghapus beberapa baris kod dan satu pemboleh ubah.


Ini adalah skema kerja dan sangat baik untuk memerhati proses apabila menyesuaikan kuasa beban, kecerahan LED, kelajuan enjin, anda hanya perlu menyambung beban yang diingini dan bukan enjin. Pada masa yang sama, bukannya 5V, sebarang voltan boleh digunakan untuk beban, contohnya 12V, jangan lupa untuk menyambungkan bekalan kuasa tolak ke kenalan, contohnya 12V, jangan lupa untuk menyambung bekalan kuasa tolak ke pin GND pada papan mikrokontroler.

Dalam arduino, kekerapan PWM, apabila dipanggil melalui fungsi analogWrite, adalah hanya 400 Hz, pada nilai voltan minimum, frekuensi yang sepadan dengan frekuensi yang sama didengar dari lilitan motor.

Arduino dan servo

Servos

Sebuah motor yang boleh berada dalam kedudukan yang telah ditetapkan, dan apabila terdedah kepada faktor-faktor luaran, misalnya, pesongan terpaksa aci, mengekalkan kedudukannya tidak berubah - dipanggil memandu servo. Secara umum, takrif bunyi agak berbeza:

Servo adalah motor yang didorong oleh maklum balas negatif.

Biasanya, tiga wayar keluar dari pemacu servo:

  • Kuasa tambahan.

  • Kurang kuasa.

  • Isyarat kawalan.

Pemacu servo terdiri daripada:

  • Motor DC (atau motor brushless);

  • Yuran pengurusan;

  • Sensor kedudukan (pengekod untuk servos dengan sudut putaran 360 ° atau potensiometer untuk servos dengan sudut putaran 180 °);

  • Mengurangkan gear (mengurangkan kelajuan enjin, dan meningkatkan tork pada aci pemacu).

Unit kawalan membandingkan isyarat pada sensor kedudukan terbina dalam dan isyarat yang datang melalui dawai kawalan, jika ia berbeza, maka terdapat putaran pada sudut di mana perbezaan di antara isyarat itu disamakan.

Prinsip operasi servo

Ciri-ciri utama servos:

  • Menghidupkan kelajuan (masa di mana aci berputar melalui sudut 60 °);

  • Tork (kg / cm, iaitu berapa kilogram enjin boleh bertahan pada tuil 1 cm dari aci);

  • Bekalan voltan;

  • Penggunaan semasa;

  • Dengan kaedah kawalan (analog atau digital, tidak terdapat perbezaan yang signifikan, tetapi digital lebih cepat dan lebih stabil).

Biasanya, tempoh isyarat adalah 20 ms, dan tempoh nadi kawalan:

  • 544 μs - bersamaan dengan 0 °;

  • 2400 μs - sepadan dengan sudut 180 °.

Dalam kes-kes yang jarang berlaku, panjang nadi mungkin berbeza, contohnya 760 dan 1520 μs, masing-masing, maklumat ini boleh dijelaskan dalam dokumentasi teknikal untuk memandu. Salah satu servos hobi yang paling popular ialah Tower Pro SG90 dan model yang serupa.Ia murah - kira-kira 4 dolar.

Sevroprivod untuk arduino

Ia memegang 1.8 kg / cm pada aci, dan lengkap dengannya adalah pemasangan skru dan tuil dengan splin untuk batang. Sebenarnya, bayi ini agak kuat, dan ia sangat bermasalah untuk menghentikannya dengan satu jari - pemacu itu sendiri mula keluar dari jari - seperti kekuatannya.


Kawalan servo dan Arduino

Seperti yang telah disebutkan, kawalan dilakukan dengan menukar tempoh denyut, tetapi tidak mengelirukan kaedah ini dengan PWM (PWM), adalah betul untuk memanggilnya PDM (Pulse Duration Modulation). Penyimpangan sedikit dalam frekuensi isyarat (20 ms - tempoh, frekuensi 50 Hz) tidak memainkan peranan khas. Tetapi jangan menyimpang dari kekerapan dengan lebih daripada 10 Hz, enjin boleh berjalan dengan lentur atau terbakar.

Kawalan servo dan Arduino

Sambungan ke arduino agak mudah, anda juga boleh menggerakkan pemacu dari pin 5v, tetapi tidak diingini. Faktanya ialah pada permulaan terdapat lompatan kecil semasa, ini boleh menyebabkan pengambilan kuasa dan Keluaran mikrokontroler palsu. Walaupun 1 pemacu kecil (jenis SG90) mungkin, tetapi tidak lebih.

Untuk mengawal servos tersebut dengan arduino, anda mempunyai perpustakaan Servo yang dibina ke dalam IDE, ia mempunyai satu set kecil perintah:

  • lampirkan () - tambah pemboleh ubah pada pin. Contoh: nama Drive.attach (9) - kami menyambung servo ke pin 9. Jika pemacu anda memerlukan pulangan kawalan yang tidak standard (544 dan 2400 μs), maka ia boleh ditentukan dipisahkan dengan koma selepas nombor pin, sebagai contoh: servo.attach (pin, sudut min (μs), sudut maksimum dalam ISS));

  • tulis () - menetapkan sudut putaran aci dalam darjah;

  • writeMicroseconds () - menetapkan sudut melalui panjang nadi dalam microseconds;

  • baca () - menentukan kedudukan semasa aci;

  • dilampirkan () - Memeriksa jika pin ditetapkan dengan servo yang bersambung;

  • lepaskan () - batalkan perintah melampirkan.

Perpustakaan ini membolehkan anda mengawal 12 servos daripada UNO, Nano dan papan seperti (mega368 dan 168), manakala kemampuan menggunakan PWM pada pin 9 dan 10 hilang. Jika anda mempunyai MEGA, anda boleh mengawal pelayan ke-48, tetapi PWM pada pin 11 dan 12 akan hilang, jika anda menggunakan sehingga 12 servo, maka PWM akan tetap berfungsi sepenuhnya pada semua kenalan.

Sekiranya anda menyambung perpustakaan ini, anda tidak akan dapat bekerja dengan penerima / pemancar 433 MHz. Terdapat perpustakaan Servo2 untuk ini, yang sebaliknya serupa.

Perpustakaan Servo2

Berikut adalah contoh kod yang saya gunakan untuk eksperimen dengan pemacu servo, ia adalah dalam contoh standard contoh:

#include // sambungkan perpustakaan

Servo myservo; // Nama pembolehubah diisytiharkan untuk myservo servo

int potpin = 0; // pin untuk menyambungkan potensiometer penetapan

int val; // pemboleh ubah untuk menyelamatkan keputusan bacaan isyarat dari potensiometer

void setup () {

myservo.attach (9); // set 9 pin sebagai output kawalan untuk servo

}

kekosongan gelung () {

val = analogRead (potpin); // hasil membaca potensiometer yang disimpan dalam trans. val, mereka akan berada dalam lingkungan 0 hingga 1023

val = map (val, 0, 1023, 0, 180); // menterjemah pelbagai ukuran dari input analog 0-1023

// dalam pelbagai tugas untuk servo 0-180 darjah

myservo.write (val); // lulus penukaran isyarat dari pot-ra untuk mengawal input servo

kelewatan (15); / // kelewatan diperlukan untuk operasi sistem yang stabil

 

Kami menyambung servo ke Arduino

Kesimpulannya

Menggunakan motor elektrik yang paling mudah dipasangkan dengan arduino adalah tugas yang agak mudah, sementara menguasai bahan ini memperluaskan keupayaan anda dalam bidang automasi dan robotika. Robot paling mudah atau model kereta yang dikawal oleh radio terdiri daripada motor sedemikian, dan servos digunakan untuk mengawal putaran roda.

Dalam contoh yang dipertimbangkan, potensiometer digunakan untuk menetapkan sudut putaran atau kelajuan putaran, mana-mana sumber isyarat yang lain boleh digunakan, sebagai contoh, putaran atau perubahan dalam kelajuan mungkin berlaku akibat daripada maklumat yang diterima dari sensor.

Satu contoh penggunaan servos dalam tenaga alternatif: menjejaki sudut kejadian cahaya matahari dan menyesuaikan kedudukan panel solar di loji kuasa.

Untuk melaksanakan algoritma sedemikian, anda boleh menggunakan beberapa photoresistors atau peranti optoelektronik lain untuk mengukur jumlah cahaya insiden dan, bergantung kepada pembacaan mereka, tetapkan sudut putaran panel solar.

Lihat juga di i.electricianexp.com:

  • Bagaimana servo disusun dan berfungsi
  • Arduino dan stepper motor: fundamental, skema, sambungan dan kawalan
  • Mempunyai menyambungkan peranti ke Arduino
  • Bagaimana membezakan motor induksi dari motor DC
  • Bagaimana untuk menyambung pengekod tambahan kepada Arduino

  •