Mündəricat:

AVR mikroprosessoru ilə bir addım motoru sürün: 8 addım
AVR mikroprosessoru ilə bir addım motoru sürün: 8 addım

Video: AVR mikroprosessoru ilə bir addım motoru sürün: 8 addım

Video: AVR mikroprosessoru ilə bir addım motoru sürün: 8 addım
Video: Keşke Daha Önce Öğrenseydik Dediğimiz Zaman Kazandıran 14 Bilgisayar Tüyosu 2024, Noyabr
Anonim
AVR mikroprosessoru ilə bir pilləli motor sürün
AVR mikroprosessoru ilə bir pilləli motor sürün

Yazıcılardan/disk sürücülərindən/və s.

Bir ohmetr ilə araşdırma, sonra mikroişlemcinizdə bəzi sadə sürücü kodu və üslubda addım atacaqsınız.

Addım 1: Steppers ilə tanış olun

Steppers ilə tanış olun
Steppers ilə tanış olun
Steppers ilə tanış olun
Steppers ilə tanış olun

Əsasən, bütün kiçik tellərin hara getdiyini anlamalı olacaqsınız.

İlk addım, təkqütblü və ya bipolyar bir motor olduğunu anlamaqdır. Daha dərin bir fon üçün Jones on Steppers -ə, sonra naməlum bir motoru anlamaq üçün sadə bir üsul üçün Ian Harries saytına baxın. Bir az oxuyun, sonra mənə ucuz qiymətə aldığım bu motorun gedişatına qoşulun. (Hal -hazırda 0.99 dollara satılırlar. Kiçik, nisbətən yüngüldürlər, lakin çox torka malik deyillər. Hələ bunun nəyə yarayacağını bilmirəm.)

Addım 2: Ümumi Zəmin tapın

Ortaq Zəmin Tapın
Ortaq Zəmin Tapın
Ortaq Zəmin Tapın
Ortaq Zəmin Tapın

Beləliklə, beş (və ya dörd və ya altı) teliniz var. Motorunuzun iki yarısı olacaq və yəqin ki, hər bir telin hansı tərəfə aid olduğunu araşdıraraq da deyə bilərsiniz.

Yalnız dörd telə baxırsınızsa, şansınız var - bu bipolyar bir motordur. Etməli olduğunuz şey, hansı iki cüt telin bir araya gəldiyini anlamaqdır. Bir qütblü motorunuz və ya 4 -dən çox teliniz varsa, ohmetrinizi çıxarmalı olacaqsınız. Axtardığınız şey, hər yarı üçün ortaq (torpaq) teldir. Bipolyar bir mühərrikdə hansının dayandığını deyə bilərsiniz, çünki dirəklərin hər birinə dirəklərin özlərinə nisbətən yarı müqavimət göstərir. Şəkildə telləri tellərə bağlamaqdan və müqaviməti qeyd etməkdən (və ya ümumiyyətlə bağlı olmadıqlarından) qeydlərim var. Ağın b/c alt üçlüyü üçün zəmin olduğunu görə bilərsiniz, bir -birlərinə qarşı Qırmızı və ya Mavi müqavimətin yarısına malikdir. (Bu mühərrik qəribədir və üst maqnit bobininin mərkəzi tapası yoxdur. Sanki yarı bipolyar, yarı təkqütblüdür. Bəlkə də bundan istifadə edərək Qara-Sarı olduqda Qırmızı-Ağ-Göy bobində fırlanmanı hiss edə bilərsiniz. bobin idarə olunur.)

Addım 3: Addım Sifarişini təyin edin

Addım Sifarişini Anlayın
Addım Sifarişini Anlayın

Mən bu mühərriki bipolyar bir motor kimi idarə etmək niyyətindəyəm, buna görə də Ağ torpaq telinə məhəl qoymuram. Narahat olmaq üçün yalnız dörd telim var.

Bir qütblü motorunuzu onsuz da bipolar olaraq işə salmaq istəyə bilərsiniz, çünki hər bobinin iki yarısı arasında dəyişmək əvəzinə bütün bobini hər iki mərhələdə istifadə edir. Daha çox bobin = daha çox tork. Cərəyanı bir cütdən keçirin (seçdiyiniz polariteyi qeyd edərək) və eyni zamanda digər cütdən axını keçirin. İkinci cütü bağladığınızda, motorun hansı tərəfə döndüyünə baxın. Bunu yaz. İndi seçdiyiniz ilk cütlüyün polaritesini tərsinə çevirin. Sonra qütbləri tərsinə çevrilərək ikinci cütü yenidən bağlayın. İstiqamətə diqqət yetirin. Motoru hər iki istiqamətə döndərmək ardıcıllığını başa düşmək lazımdır. Mənim nümunəmdə, hər ikisi də saat yönünün əksinə döndü, buna görə seçdiyim şəkildə ardıcıllıqla keçmək CCW motorunu addımlayacaq.

Addım 4: Motoru Test Sürücüsü olaraq götürün

Test Sürücüsü üçün Motorun Alınması
Test Sürücüsü üçün Motorun Alınması

Mikroprosessor proqramlaşdırma üçün hələ hazır deyilsinizsə, Getto İnkişaf Kitindən və ya müxtəlif PIC proqramçılarından daha pis işlər görə bilərsiniz. Telləri birbaşa mikroprotektora bağlayın və aşağıdakı kodla yandırın:

/* Kiçik pilləli mühərrikləri işə salmaqla oynamaq. */

/ * Gecikmə funksiyasını daxil et */ #define F_CPU 1000000UL #include/ * ATTiny2313 üçün pin defs *// * Saat mili istiqamətində */ #define BLUE _BV (PB0) #define BLACK _BV (PB1) #define RED _BV (PB2) #define SARI _BV (PB3) #decine DELAY 200 / * milisaniyələr arasında addımlar * / int main (void) {DDRB = 0xff; / * Bütün B pinlərində çıxışı aktiv edin */ PORTB = 0x00; / * Hamısını 0v */ olaraq təyin edin (1) {/ * burada əsas döngə */ PORTB = MAVİ; _ gecikmə_ms (gecikmə); PORTB = SİYAH; _ gecikmə_ms (gecikmə); PORTB = QIRMIZI; _ gecikmə_ms (gecikmə); PORTB = SARI; _ gecikmə_ms (gecikmə); }} Bu kod nə qədər sadədir? Həqiqətən sadə. Etdiyi şey, bəzi gözəl təriflər verməkdir, buna görə tellərə pin adlarından çox rənglə müraciət edə bilərəm və aralarında tənzimlənən bir gecikmə ilə ardıcıl olaraq açar. Yeni başlayanlar üçün addımlar arasında yarım saniyəlik gecikmə seçdim. Nəticələr üçün qısa videoya baxın. Həqiqətən oyununuzdasınızsa, motorun tək addımlı açısal həllini anlamaq üçün hər dövr üçün addım sayını hesablayın. (Oh bəli. PS. Yükü 3,6v -da asanlıqla idarə edir. Videoda batareyaya baxın.)

Addım 5: Geri və irəli çevirin

Beləliklə, saat yönünde hərəkət etməlisiniz. Daha maraqlı bir şey varmı? Kiçik bir kod təmizləmə və onu irəli və geri işlədə bilərik. Sadə bir döngə ilə mərhələləri keçmək üçün saat yönünün ardıcıllığını bir sıra qoydum. İndi döngəni saat əqrəbinin əksinə və ya saat əqrəbinin əksinə yuxarı və ya aşağı çəkə bilərsiniz.

int main (void) {const uint8_t gecikmə = 50; const uint8_t saat yönünde = {MAVİ, SİYAH, QIRMIZI, SARI}; uint8_t i; DDRB = 0xff; / * Bütün B pinlərində çıxışı aktiv edin */ PORTB = 0x00; / * Hamısını 0v */ olaraq təyin edin (1) {/ * buradakı əsas döngə */ for (i = 0; i <= 3; i ++) {/ * rənglər arasında saat yönünde addımlayın */ PORTB = saat yönünde ; _ gecikmə_ms (gecikmə); } üçün (i = 3; i> = 0; i-) { / * ccw * / PORTB = saat yönü rəngləri arasında addım; _ gecikmə_ms (gecikmə); }}} Arxa və arxa tərəf üçün yaraşıqlı videoya baxın.

Addım 6: Heç vaxt yarım addım atmıram, çünki yarım addım deyiləm …

Lirik bir kənara, motorunuzun yarı addım atdığı yerdir. Daha çox pik cərəyanı, daha çox ani tork və iki dəfə açısal qətnamə əldə edirsiniz. Qısaca yarım addım: Mavi, Qara, Qırmızı, Sarı əvəzinə motoru Mavi, Mavi+Qara, Qara, Qara+Qırmızı, Qırmızı, Qırmızı+Sarı, Sarı, Sarı+Mavi ilə idarə edirsiniz. Nəticə budur ki, yarıdan çoxdur ki, hər iki maqnitlə eyni anda məşğul olursunuz. Və hər iki dəstin işə salındığı vaxtlarda, motor "addımlar" arasındakı bucağı kiçildərək mühərrikin daha hamar bir şəkildə dönməsini təmin edərək, aralarındakı yarısını göstərir. Videodan deyə bilərsənmi? Əmin deyiləm … İndi kodun yarı addım atan hissəsi belə görünür:

boş yarımDoldurma (uint16_t gecikmə, uint8_t istiqamət ) {uint8_t i; for (i = 0; i <= 3; i ++) {PORTB = istiqamət ; / * tək bobin hissəsi */ _delay_ms (gecikmə); PORTB | = istiqamət [i+1]; / * yarım addımda əlavə et */ _delay_ms (gecikmə); }} İlk PORTB əmri bir qütbü müsbət, qalanını isə mənfi olaraq təyin edir. Sonra gözləyir. Sonra ikinci PORTB əmri ikinci bir qütbü (digər sarımda) pozitiv olaraq təyin edir və hər iki sarımı 1.4 dəfə fırlanma anına (və cərəyanın 2 qatına) cəlb edir. Proqramın tam siyahısı aşağıda verilmişdir. İndi iki sıra (saat əqrəbi, saat əqrəbinin əksinə) müəyyən edilmişdir və hər ikisi də yarımStepping funksiyasına i+1 girişinə icazə vermək üçün hər biri 5 elementdən ibarətdir.

Addım 7: Motor Sürücü əlavə edin

Motor Sürücü əlavə edin
Motor Sürücü əlavə edin
Motor Sürücü əlavə edin
Motor Sürücü əlavə edin
Motor Sürücü əlavə edin
Motor Sürücü əlavə edin

İndiyə qədər çox yaxşıdır.

Yalnız problem, motorun o qədər çox torka sahib olmamasıdır ki, bu da mikroprosessorun hər pin üçün ~ 50mA söndürməsindən qaynaqlanır. Açıq növbəti addım, daha çox şirəsi təmin etmək üçün onu motor sürücüsünə bağlamaq olar. Ancaq sonra bir az fikirləşirəm: yalnız 5v ilə sürürəm və bobin sarma müqaviməti ~ 125 ohmdur. Bu o deməkdir ki, motor hər pin üçün 40mA çəkir və bu, (çətin!) AVR çipi ilə yaxşı idarə olunmalıdır. Motoru idarə etmək üçün daha çox gərginlik əldə etmək üçün onu SN754410 H körpü çipinə bağladım. Dövrə olduqca sadədir. AVR -dən hər bir pin bir girişə və müvafiq çıxış pinləri motora gedir. Çipin məntiq bölməsi üçün 5v -ə ehtiyacı var və motor hissəsində daha çox gərginlik götürə bilər. 11.25v (üç 3.6v batareya) ilə işlətmək bir az kömək etdi. Barmağım üçün daha çox tork, amma yenə də bir güc mərkəzi deyil. Nikeldən kiçik olan bir motor üçün pis deyil. Və indi dövrə ümumi təyinatlı bipolyar step motor sürücüsü oldu. 29 Noyabr əlavə edildi: Dünən gecə bir müddət 12v -də motor qaçdı və qızmağa başladı. Rezonanslı bir tezlik problemi olub -olmadığını və ya sarımlar üçün çox çox cərəyan olub olmadığını bilmirəm. Hər halda, bu kiçik motoru daha böyük gərginliklə idarə edirsinizsə, bir az diqqətli olun.

Addım 8: Son

Bəs mən nə öyrəndim? AVR (və H-körpü çipi) ilə bir step motoru idarə etmək, hətta "fantastik" yarım addımlama rejimində də olduqca asandır.

Kiçik step motorlarla nə edəcəyimi hələ bilmirəm. Hər hansı bir təklif?

Tövsiyə: