Ya, ia sudah terbalik, tetapi adakah ia tidak terasa sedikit salah? Terlalu lambat? Jangan risau, kami akan teruskan. Mengikut prinsip yang dijelaskan pada penghujung bab ini, dalam mod lapan denyutan, diperlukan 64 irama untuk motor stepper berputar sekali Dalam program kami, setiap irama berlangsung 2ms, jadi satu pusingan hendaklah 128ms, iaitu 1 saat. . Terdapat lebih daripada 7 revolusi, tetapi mengapa ia kelihatan seperti mengambil masa lebih daripada 7 saat untuk menyelesaikan satu revolusi?
Jadi, sudah tiba masanya untuk memahami konsep "pecutan" dalam "motor pecutan magnet kekal". Rajah 9-7 ialah gambarajah pembongkaran motor stepper 28BYJ-48 ini Seperti yang anda lihat dari gambar, pinion putih di tengah adalah input rotor motor stepper 64 irama hanya membuat pinion ini bulatan, dan kemudian ia memacu gear biru muda yang besar Ini ialah tahap pecutan pertama. Mari kita lihat struktur gear merah di sebelah kanan atas Kecuali pemutar motor dan aci input akhir, tiga gear transmisi mungkin mempunyai struktur sedemikian, yang terdiri daripada lapisan berbilang gigi dan lapisan gigi kecil. , dan setiap gear menggunakan sendiri Lapisan gigi kecil gear seterusnya memacu lapisan berbilang gigi gear seterusnya Dengan cara ini, setiap dua gear membentuk tahap pecutan, dan terdapat 4 tahap pecutan. Jadi apakah jumlah nisbah pecutan? Iaitu, berapa banyak pusingan yang diperlukan untuk rotor berputar sebelum aci input berpusing sekali?
Rajah 9-7 Perwakilan gear luaran motor stepper
Lihat kembali pada parameter nisbah pecutan dalam jadual parameter motor - 1:64 , pemutar berputar 64 kali, dan aci input akhirnya akan berputar sekali, iaitu, ia mengambil masa 64*64=4096 irama untuk aci input berputar sekali, 2ms*4096=8192ms, dan ia mengambil masa lebih daripada 8 saat untuk berputar sekali sama dengan Adakah keputusan ujian tadi konsisten? 4096 irama berputar dalam satu bulatan, jadi sudut satu putaran irama - sudut langkah ialah 360/4096 Lihat parameter sudut langkah 5.625/64 dalam jadual. Jika anda membuat pengiraan, anda akan tahu bahawa kedua-dua ini nilai adalah sama.
Pemahaman asas tentang prinsip sepatutnya telah dilengkapkan di sini Namun, kami berharap semua orang dapat memupuk cara berfikir bahawa "amalan adalah satu-satunya kriteria untuk menguji kebenaran"! Ingat, apakah ciri terbesar motor stepper? Pahami volum migrasi dengan tepat! Jadi patutkah kita menguji sama ada ia tepat? Sejauh mana ketepatannya? Bagaimana untuk berlatih? Pusingkan 90 darjah dan ukur untuk melihat sama ada ia dilarang? Tidak mengapa, tetapi jika ia hanya dimatikan sebanyak 1 darjah atau kurang daripada 1 darjah, bolehkah anda mengukurnya dengan tepat? Sukar tanpa instrumen yang canggih. Mari biarkan ia berputar beberapa lagi bulatan penuh untuk melihat sama ada kedudukan di mana ia akhirnya berhenti masih bukan kedudukan asal. Sejajar dengan itu, kami mengubah suai atur cara untuk memudahkan kawalan motor memusingkan sebarang bilangan pusingan.
#include <reg52.h> void TurnMotor(unsigned long angle); void main(){ TurnMotor(360*25); //360 度*25,即 25 圈 while (1); } /* 软件延时函数,延时约 2ms */ void delay(){ unsigned int i = 200; while (i--); } /* 步进电机迁移转变函数,angle-需转过的角度 */ void TurnMotor(unsigned long angle){ unsigned char tmp; //暂时变量 unsigned char index = 0; //节奏输入索引 unsigned long beats = 0; //所需节奏总数 //步进电机节奏对应的 IO 掌握代码 unsigned char code BeatCode[8] = { 0xE, 0xC, 0xD, 0x9, 0xB, 0x3, 0x7, 0x6 }; //盘算需求的节奏总数,4096 拍对应一圈 beats = (angle*4096) / 360; //判别 beats 不为 0 时履行轮回,然后自减 1 while (beats--){ tmp = P1; //用 tmp 把 P1 口以后值暂存 tmp = tmp & 0xF0; //用&操作清零低 4 位 tmp = tmp | BeatCode[index]; //用|操作把节奏代码写到低 4 位 P1 = tmp; //把低 4 位的节奏代码和高 4 位的原值送回 P1 index++; //节奏输入索引递增 index = index & 0x07; //用&操作完成到 8 归零 delay(); //延时 2ms,即 2ms 履行一拍 } P1 = P1 | 0x0F; //封闭电机一切的相 }
Dalam atur cara di atas, kami mula-mula menulis fungsi yang mengawal motor untuk berputar melalui sudut tertentu Nilai sudut ini diberikan oleh parameter kaedah fungsi, kita boleh dengan mudah tukar panggilan Gunakan parameter sebenar untuk mengawal motor berputar pada sebarang sudut. Kami menggunakan 360*25, iaitu 25 bulatan Sudah tentu, anda juga boleh menukarnya kepada nilai lain untuk melihat apa akibatnya. Program kami akan dilaksanakan selama 25*8=200 saat mula-mula perhatikan kedudukan awal aci input, kemudian hidupkan dan tunggu dengan sabar untuk ia selesai. Apa yang berlaku?
Hasil ini sebenarnya disebabkan oleh nisbah pecutan Mari kita lihat semula nisbah pecutan yang diberikan oleh pengeluar adalah 1:64 pecutan nominal Nisbah ialah 1:64. Tetapi bagaimana dengan amalan? Melalui pengiraan pembongkaran kami, kami mendapati bahawa nisbah pecutan sebenar dan tepat bukanlah nilai 1:64 ini, tetapi 1:63.684! Kaedah untuk mendapatkan data ini juga sangat rumit hanya mengira bilangan gigi setiap gear dan kemudian darabkan nisbah pecutan pada setiap tahap untuk mendapatkan hasil nisbah pecutan yang diukur ialah (32/9)*(22/11). *(26/9)*(31/10)≈63.684, maka ralat sebenar ialah 0.0049, iaitu kira-kira 0.5%. Adakah ia hanya satu perlapan daripada pusingan, iaitu 45 darjah Mari kita lihat jika ralatnya ialah 45 darjah. Kemudian mengikut nisbah pecutan sebenar 1:63.684, dapat disimpulkan bahawa bilangan irama yang diperlukan untuk membuat satu pusingan ialah 64*63.684≈4076. Kemudian tukar 4096 dalam fungsi pemacu motor dalam program di bawah kepada 4076 dan cuba lagi. Adakah anda tidak dapat melihat sedikit kesilapan? Tetapi sebenarnya, ralat masih wujud, kerana hasil pengiraan di bawah kebanyakannya adalah anggaran Ralat sebenar adalah kira-kira 0.000056, iaitu, 0.56 sepuluh perseribu Perbezaannya akan menjadi separuh pusingan selepas 10,000 pusingan, jadi ia boleh diabaikan.
Jadi mengapa terdapat ralat dalam parameter pengeluar? Tidakkah pengeluar tahu? Untuk menjelaskan masalah ini, kita perlu kembali kepada kegunaan praktikal. Tujuan yang paling biasa bagi motor stepper adalah untuk mengawal sasaran untuk berputar melalui sudut tertentu, biasanya dalam 360 darjah Matlamat reka bentuk terakhir 28BYJ-48 ini gunakan Untuk mengawal bilah kipas penghawa dingin, julat pergerakan bilah kipas tidak akan melebihi 180 darjah, jadi dalam kes penggunaan ini, pengeluar memberikan anggaran nisbah pecutan integer 1:64, yang cukup tepat dan munasabah. . Walau bagaimanapun, seperti program kami, kami tidak semestinya perlu menggunakannya untuk memacu bilah kipas penyaman udara Kami boleh membiarkannya berputar berkali-kali untuk melakukan perkara lain Pada masa ini, data yang lebih tepat diperlukan harap pelajar akan lakukan apa yang semua orang boleh faham dan kuasai, maksudnya, kita mesti boleh "mereka" sistem itu sendiri dan menyelesaikan masalah yang terdapat di dalamnya, dan tidak disekat oleh apa yang dipanggil "penyelesaian sedia dibuat. ".
Atas ialah kandungan terperinci Bagaimana untuk mencapai ketepatan pemindahan dan analisis mendalam motor stepper 28BYJ-48. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!