<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 還搞不懂步進(jìn)電機(jī)?一定要看這一文,工作原理+驅(qū)動(dòng)方法

          還搞不懂步進(jìn)電機(jī)?一定要看這一文,工作原理+驅(qū)動(dòng)方法

          作者: 時(shí)間:2024-07-18 來源:李工談元器件 收藏

          今天給大家分享的是:及其工作原理。

          本文引用地址:http://www.ex-cimer.com/article/202407/461134.htm

          一、什么是?

          是一種將電脈沖信號(hào)轉(zhuǎn)換成相應(yīng)角位移或線位移的電動(dòng)機(jī)。

          對(duì)于步進(jìn)電機(jī),每輸入一個(gè)脈沖信號(hào),轉(zhuǎn)子就轉(zhuǎn)動(dòng)一個(gè)角度或前進(jìn)一步。其輸出的角位移或線位移與輸入的脈沖數(shù)成正比,轉(zhuǎn)速與脈沖頻率成正比。因此,步進(jìn)電動(dòng)機(jī)又稱脈沖電動(dòng)機(jī)。

          下面看一個(gè)簡(jiǎn)單的雙極電機(jī):

          雙極電機(jī)

          雙極步進(jìn)電機(jī)有四根電線和兩個(gè)線圈。要使其旋轉(zhuǎn),需要通過線圈發(fā)送電流。每根電線都需要能夠被高低驅(qū)動(dòng)。以下是如何驅(qū)動(dòng)電流使步進(jìn)電機(jī)旋轉(zhuǎn)。

          1721195638174236.jpg

          雙極步進(jìn)電機(jī)

          要理解為什么這樣做,請(qǐng)考慮一個(gè)只有四個(gè)步驟的簡(jiǎn)單步進(jìn)電機(jī)。在第一階段,它將磁體與第一線圈對(duì)齊。下一步將磁體旋轉(zhuǎn)90度。通過第一線圈反向發(fā)送電流會(huì)反轉(zhuǎn)磁體極性。相反的線圈被連接,但相對(duì)于中心磁體產(chǎn)生相反的磁場(chǎng)。

          步進(jìn)電機(jī)轉(zhuǎn)動(dòng)四個(gè)步驟

          當(dāng)然,大多數(shù)步進(jìn)電機(jī)的步數(shù)超過4步。你的標(biāo)準(zhǔn)步進(jìn)電機(jī)每轉(zhuǎn)200步。以這種方式旋轉(zhuǎn)電機(jī)稱為全步進(jìn)。一旦你完成了全步工作,半步是非常簡(jiǎn)單的。你可以同時(shí)通過兩個(gè)線圈發(fā)送電流,這將使分辨率加倍。

          步進(jìn)電機(jī)驅(qū)動(dòng)器也可以使用微步進(jìn),微步進(jìn)調(diào)節(jié)通過線圈的電流。典型的器可以在每一個(gè)完整的步驟中執(zhí)行16個(gè)微步驟。一些芯片負(fù)責(zé)調(diào)制電流,但較舊的芯片需要為其驅(qū)動(dòng)的步進(jìn)電機(jī)“調(diào)諧”。

          微步進(jìn)進(jìn)一步將整個(gè)步進(jìn)劃分為256微步進(jìn),使典型的200步進(jìn)電機(jī)變成51200步進(jìn)電機(jī)!微步進(jìn)還降低了電機(jī)的噪音,使其運(yùn)行更平穩(wěn)、更高效。

          完整步驟1和2之間的半步

          二、如何控制線圈中的電流

          控制通過繞組的電流的最常見設(shè)置是使用所謂的H橋。它是一組四個(gè)晶體管,可以將每條導(dǎo)線拉高或拉低。你也可以用MOS管代替晶體管,但布線會(huì)有點(diǎn)不同。該圖顯示了如何通過H橋向任意方向發(fā)送電流。你只需要打開路徑中的晶體管。

          線圈中的電流方向

          你必須確保同一側(cè)的兩個(gè)晶體管不能同時(shí)導(dǎo)通。這將通過提供從電源到接地的低電阻路徑使電路短路。你還應(yīng)注意,晶體管可能需要一段時(shí)間才能從接通切換到斷開。除非你知道自己在做什么,否則不建議快速切換通過線圈的電流。

          必須確保同一側(cè)的兩個(gè)晶體管不能同時(shí)導(dǎo)通

          這仍然不是全貌。旋轉(zhuǎn)電機(jī)將產(chǎn)生電壓。為了保護(hù)晶體管,最好放置二極管。

          用于保護(hù)晶體管的二極管

          這將防止電機(jī)產(chǎn)生高壓,這可能會(huì)破壞晶體管甚至驅(qū)動(dòng)器。如果驅(qū)動(dòng)步進(jìn)電機(jī)的電壓高于MCU輸出的電壓,則需要添加另一個(gè)晶體管來控制PNP晶體管。

          使用另一個(gè)晶體管來控制PNP晶體管

          當(dāng)你打開額外的NPN晶體管時(shí),它將允許電流從PNP晶體管的基極(引腳1)流出,從而打開它?,F(xiàn)在所需要的只是所有NPN晶體管基極上的限流電阻。

          NPN晶體管基極加上的限流電阻

          就是這樣!該H橋?qū)⒖刂仆ㄟ^其中一個(gè)繞組的電流。由于有兩個(gè)繞組,我們需要將這個(gè)電路加倍。

          雙H橋驅(qū)動(dòng)步進(jìn)電機(jī)

          現(xiàn)在,你可以很好地計(jì)算所需的組件。使用雙H橋并不是驅(qū)動(dòng)步進(jìn)電機(jī)的唯一方法。你也可以購買步進(jìn)電機(jī)驅(qū)動(dòng)器,它將內(nèi)置雙H橋(盡管驅(qū)動(dòng)器通常使用MOS管和其他技巧)。如果你想減少BOM數(shù)量(有時(shí)獲得更多功能),我建議你看看步進(jìn)電機(jī)驅(qū)動(dòng)器。你需要查看數(shù)據(jù)表以了解芯片提供的功能。一些芯片只提供晶體管和二極管,而其他芯片則完全控制通過線圈的電流。

          三、微步進(jìn)

          脈寬調(diào)制信號(hào)

          微步進(jìn)包括向晶體管發(fā)送脈寬調(diào)制信號(hào)。這是一種控制電機(jī)線圈電流的簡(jiǎn)單方法。預(yù)先選擇的PWM值被放置在正弦查找表中。典型地,選擇20-40kHz的PWM頻率。任何低于20千赫的聲音,人類耳朵都能聽到。

          頻率保持低于40kHz以提高效率并減少晶體管中的功耗。當(dāng)PWM信號(hào)為高時(shí),電流流過晶體管。當(dāng)PWM信號(hào)低時(shí),電流流過二極管。這是一個(gè)非常粗糙的微步進(jìn)實(shí)現(xiàn),但它給出了它如何工作的一般概念。使用MOS管的電機(jī)驅(qū)動(dòng)器可以控制電機(jī)電流降低或衰減的速度。驅(qū)動(dòng)器的電流波形更像這樣:

          流經(jīng)MOS管電機(jī)驅(qū)動(dòng)器的電流

          必須為其驅(qū)動(dòng)的電機(jī)手動(dòng)優(yōu)化快速衰減周期和慢速衰減周期。一些新芯片會(huì)根據(jù)其感應(yīng)到的電流自動(dòng)調(diào)整衰減周期,但舊芯片可能需要優(yōu)化(或調(diào)整)。

          四、步進(jìn)電機(jī)驅(qū)動(dòng)實(shí)例

          實(shí)例:使用控制板Arduino Mega控制步進(jìn)電機(jī)驅(qū)動(dòng)板TMC5130-EVAL來驅(qū)動(dòng)步進(jìn)電機(jī)。

          使用 Arduino Mega 控制步進(jìn)電機(jī)驅(qū)動(dòng)板 TMC5130-EVAL

          控制器:

          Arduino Mega 2560是一款基于ATmega2560的微控制器板。它有54個(gè)數(shù)字輸入/輸出引腳(其中15個(gè)可以用作PWM輸出)、16個(gè)模擬輸入、4個(gè)UART(硬件串行端口)、一個(gè)16 MHz晶體振蕩器、一個(gè)USB連接、一個(gè)電源插座、一個(gè)ICSP頭和一個(gè)復(fù)位按鈕。

          它包含支持微控制器所需的一切;只需用USB電纜將其連接到計(jì)算機(jī),或用交流到直流適配器或電池為其供電即可開始使用。

          步進(jìn)電機(jī)驅(qū)動(dòng)板:

          TMC5130是一個(gè)完全集成的步進(jìn)電機(jī)驅(qū)動(dòng)器和控制器系統(tǒng),允許從任何微控制器遠(yuǎn)程控制步進(jìn)電機(jī)。它在硬件上實(shí)現(xiàn)了所有實(shí)時(shí)關(guān)鍵任務(wù)。一旦配置,電機(jī)可以通過給出目標(biāo)位置、命令歸航序列或給出目標(biāo)速度來驅(qū)動(dòng)。

          使用TMC5130的好處包括:易于使用,使用256微步的電機(jī)精度,低電機(jī)噪聲(無噪聲隱藏?cái)夭ㄆ鳎?,無傳感器失速檢測(cè)(stallGuard2),無階躍損耗,dcStep和coolStep、UART或SPI控制接口的高效率,高電壓范圍,小形狀因數(shù),以及低部件數(shù)量。

          1、 確保Arduino Mega與TMC5130-EVAL有電壓匹配

          如果Arduino是5V控制板,則必須將TMC5130-EVAL上的一個(gè)電阻從位置R3重新定位到R8。這將TMC5130的邏輯電平設(shè)置為+5V。

          2、連線

          TMC5130與Arduino Mega 2560連接 (圖片來源于Trinamic)

          上圖的電纜顏色:

          • +5V - >紅色

          • GND - >藍(lán)色

          • SDO - >黃色

          • SDI - >橙色

          • SCK - >白色

          • CSN - >灰色

          • DRV_ENN - >黑色

          • CLK16 - >綠色

          引腳對(duì)應(yīng)的信號(hào) (圖片來源于Trinamic)

          引腳對(duì)應(yīng)的信號(hào)。在Arduino代碼的注釋部分記錄了配置。

          3、ARDUINO代碼

          下面的Arduino代碼不需要任何額外的庫。SPI庫是Arduino IDE附帶的。該程序初始化TMC5130并執(zhí)行簡(jiǎn)單的移動(dòng)到位置周期。它將根據(jù)步進(jìn)電機(jī)的接線將200全步進(jìn)電機(jī)向一個(gè)方向旋轉(zhuǎn)10轉(zhuǎn),向另一個(gè)方向旋轉(zhuǎn)10轉(zhuǎn)。請(qǐng)使用TMC5130數(shù)據(jù)表或TMCL IDE作為不同寄存器的參考。

          #include <SPI.h>#include "TMC5130_registers.h"/* The trinamic TMC5130 motor controller and driver operates through an
          * SPI interface. Each datagram is sent to the device as an address byte
          * followed by 4 data bytes. This is 40 bits (8 bit address and 32 bit word).
          * Each register is specified by a one byte (MSB) address: 0 for read, 1 for
          * write. The MSB is transmitted first on the rising edge of SCK.
          *
          * Arduino Pins Eval Board Pins
          * 51 MOSI 32 SPI1_SDI
          * 50 MISO 33 SPI1_SDO
          * 52 SCK 31 SPI1_SCK
          * 25 CS 30 SPI1_CSN
          * 17 DIO 8 DIO0 (DRV_ENN)
          * 11 DIO 23 CLK16
          * GND 2 GND
          * +5V 5 +5V
          */int chipCS = 25;const byte CLOCKOUT = 11;// const byte CLOCKOUT = 9; --> Uncomment for UNO, Duemilanove, etc...int enable = 17;void setup() {// put your setup code here, to run once:pinMode(chipCS,OUTPUT);
          pinMode(CLOCKOUT,OUTPUT);
          pinMode(enable, OUTPUT);
          digitalWrite(chipCS,HIGH);
          digitalWrite(enable,LOW);//set up Timer1TCCR1A = bit (COM1A0); //toggle OC1A on Compare MatchTCCR1B = bit (WGM12) | bit (CS10); //CTC, no prescalingOCR1A = 0; //output every cycleSPI.setBitOrder(MSBFIRST);
          SPI.setClockDivider(SPI_CLOCK_DIV8);
          SPI.setDataMode(SPI_MODE3);
          SPI.begin();

          Serial.begin(9600);

          sendData(0x80,0x00000000); //GCONFsendData(0xEC,0x000101D5); //CHOPCONF: TOFF=5, HSTRT=5, HEND=3, TBL=2, CHM=0 (spreadcycle)sendData(0x90,0x00070603); //IHOLD_IRUN: IHOLD=3, IRUN=10 (max.current), IHOLDDELAY=6sendData(0x91,0x0000000A); //TPOWERDOWN=10sendData(0xF0,0x00000000); // PWMCONF//sendData(0xF0,0x000401C8); //PWM_CONF: AUTO=1, 2/1024 Fclk, Switch amp limit=200, grad=1sendData(0xA4,0x000003E8); //A1=1000sendData(0xA5,0x000186A0); //V1=100000sendData(0xA6,0x0000C350); //AMAX=50000sendData(0xA7,0x000186A0); //VMAX=100000sendData(0xAA,0x00000578); //D1=1400sendData(0xAB,0x0000000A); //VSTOP=10sendData(0xA0,0x00000000); //RAMPMODE=0sendData(0xA1,0x00000000); //XACTUAL=0sendData(0xAD,0x00000000); //XTARGET=0}void loop(){// put your main code here, to run repeatedly:sendData(0xAD,0x0007D000); //XTARGET=512000 | 10 revolutions with micro step = 256delay(20000);
          sendData(0x21,0x00000000);
          sendData(0xAD,0x00000000); //XTARGET=0delay(20000);
          sendData(0x21,0x00000000);
          }void sendData(unsigned long address, unsigned long datagram){//TMC5130 takes 40 bit data: 8 address and 32 datadelay(100);uint8_t stat;unsigned long i_datagram;

          digitalWrite(chipCS,LOW);
          delayMicroseconds(10);

          stat = SPI.transfer(address);

          i_datagram |= SPI.transfer((datagram >> 24) & 0xff);
          i_datagram <<= 8;
          i_datagram |= SPI.transfer((datagram >> 16) & 0xff);
          i_datagram <<= 8;
          i_datagram |= SPI.transfer((datagram >> 8) & 0xff);
          i_datagram <<= 8;
          i_datagram |= SPI.transfer((datagram) & 0xff);
          digitalWrite(chipCS,HIGH);

          Serial.print("Received: ");
          PrintHex40(stat, i_datagram);
          Serial.print("n");
          Serial.print(" from register: ");
          Serial.println(address,HEX);
          }void PrintHex40(uint8_t stat, uint32_t data) // prints 40-bit data in hex with leading zeroes{char tmp[16];uint16_t LSB = data & 0xffff;uint16_t MSB = data >> 16;sprintf(tmp, "0x%.2X%.4X%.4X", stat, MSB, LSB);
          Serial.print(tmp);
          }

          代碼來源于:Trinamic 博客(關(guān)于代碼的問題,可以去Trinamic博客上了解更多)

          以上就是關(guān)于步進(jìn)電機(jī)的介紹,希望大家多多支持我。



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();