国产良妇出轨视频在线_国产高清无码视频在线观看_国产精品亚洲精品久久精品_国产男女猛视频在线观看网站

你的位置:首頁 > 電源管理 > 正文

聊一聊步進電機的幾件事

發(fā)布時間:2024-10-11 責(zé)任編輯:lina

【導(dǎo)讀】對于步進電機,每輸入一個脈沖信號,轉(zhuǎn)子就轉(zhuǎn)動一個角度或前進一步。其輸出的角位移或線位移與輸入的脈沖數(shù)成正比,轉(zhuǎn)速與脈沖頻率成正比。因此,步進電動機又稱脈沖電動機。


1. 什么是步進電機?

步進電機是一種將電脈沖信號轉(zhuǎn)換成相應(yīng)角位移或線位移的電動機。

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

下面看一個簡單的雙極電機:


聊一聊步進電機的幾件事圖 1 雙極電機


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


聊一聊步進電機的幾件事圖 2 雙極步進電機


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


聊一聊步進電機的幾件事圖 3 步進電機轉(zhuǎn)動四個步驟


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

步進電機驅(qū)動器也可以使用微步進,微步進調(diào)節(jié)通過線圈的電流。典型的電機控制器可以在每一個完整的步驟中執(zhí)行16個微步驟。一些芯片負責(zé)調(diào)制電流,但較舊的芯片需要為其驅(qū)動的步進電機“調(diào)諧”。微步進進一步將整個步進劃分為256微步進,使典型的200步進電機變成51200步進電機!微步進還降低了電機的噪音,使其運行更平穩(wěn)、更高效。


聊一聊步進電機的幾件事圖 4 完整步驟1和2之間的半步


2. 如何控制線圈中的電流:

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


聊一聊步進電機的幾件事圖 5 線圈中的電流方向


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


聊一聊步進電機的幾件事圖 6 必須確保同一側(cè)的兩個晶體管不能同時導(dǎo)通


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


聊一聊步進電機的幾件事圖 7 用于保護晶體管的二極管


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


聊一聊步進電機的幾件事圖 8 使用另一個晶體管來控制PNP晶體管


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


聊一聊步進電機的幾件事圖 9 NPN晶體管基極加上的限流電阻


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


聊一聊步進電機的幾件事圖 10 雙H橋驅(qū)動步進電機


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

3. 微步進:


聊一聊步進電機的幾件事圖 11 脈寬調(diào)制信號


微步進包括向晶體管發(fā)送脈寬調(diào)制信號。這是一種控制電機線圈電流的簡單方法。預(yù)先選擇的PWM值被放置在正弦查找表中。典型地,選擇20-40kHz的PWM頻率。任何低于20千赫的聲音,人類耳朵都能聽到。頻率保持低于40kHz以提高效率并減少晶體管中的功耗。當(dāng)PWM信號為高時,電流流過晶體管。當(dāng)PWM信號低時,電流流過二極管。這是一個非常粗糙的微步進實現(xiàn),但它給出了它如何工作的一般概念。使用MOS管的電機驅(qū)動器可以控制電機電流降低或衰減的速度。驅(qū)動器的電流波形更像這樣:


聊一聊步進電機的幾件事圖 12 流經(jīng)MOS管電機驅(qū)動器的電流


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

4. 步進電機驅(qū)動實例

介紹板子:

實例:使用控制板Arduino Mega控制步進電機驅(qū)動板TMC5130-EVAL來驅(qū)動步進電機。


聊一聊步進電機的幾件事圖 13 使用Arduino Mega控制步進電機驅(qū)動板TMC5130-EVAL


控制器:Arduino Mega 2560是一款基于ATmega2560的微控制器板。它有54個數(shù)字輸入/輸出引腳(其中15個可以用作PWM輸出)、16個模擬輸入、4個UART(硬件串行端口)、一個16 MHz晶體振蕩器、一個USB連接、一個電源插座、一個ICSP頭和一個復(fù)位按鈕。它包含支持微控制器所需的一切;只需用USB電纜將其連接到計算機,或用交流到直流適配器或電池為其供電即可開始使用。

步進電機驅(qū)動板:TMC5130是一個完全集成的步進電機驅(qū)動器和控制器系統(tǒng),允許從任何微控制器遠程控制步進電機。它在硬件上實現(xiàn)了所有實時關(guān)鍵任務(wù)。一旦配置,電機可以通過給出目標(biāo)位置、命令歸航序列或給出目標(biāo)速度來驅(qū)動。使用TMC5130的好處包括:易于使用,使用256微步的電機精度,低電機噪聲(無噪聲隱藏斬波器),無傳感器失速檢測(stallGuard2),無階躍損耗,dcStep和coolStep、UART或SPI控制接口的高效率,高電壓范圍,小形狀因數(shù),以及低部件數(shù)量。

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

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

2. 連線


聊一聊步進電機的幾件事圖 14 TMC5130與Arduino Mega 2560連接 (圖片來源于Trinamic)


上圖的電纜顏色

+5V - >紅色
GND - >藍色
SDO - >黃色
SDI - >橙色
SCK - >白色
CSN - >灰色
DRV_ENN - >黑色
CLK16 - >綠色


聊一聊步進電機的幾件事圖 15 引腳對應(yīng)的信號 (圖片來源于Trinamic)


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

ARDUINO代碼

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

#include
#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 Timer1
TCCR1A = bit (COM1A0); //toggle OC1A on Compare Match
TCCR1B = bit (WGM12) | bit (CS10); //CTC, no prescaling
OCR1A = 0; //output every cycle

SPI.setBitOrder(MSBFIRST);
SPI.setClockDivider(SPI_CLOCK_DIV8);
SPI.setDataMode(SPI_MODE3);
SPI.begin();

Serial.begin(9600);

sendData(0x80,0x00000000); //GCONF

sendData(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=6
sendData(0x91,0x0000000A); //TPOWERDOWN=10

sendData(0xF0,0x00000000); // PWMCONF
//sendData(0xF0,0x000401C8); //PWM_CONF: AUTO=1, 2/1024 Fclk, Switch amp limit=200, grad=1

sendData(0xA4,0x000003E8); //A1=1000
sendData(0xA5,0x000186A0); //V1=100000
sendData(0xA6,0x0000C350); //AMAX=50000
sendData(0xA7,0x000186A0); //VMAX=100000
sendData(0xAA,0x00000578); //D1=1400
sendData(0xAB,0x0000000A); //VSTOP=10

sendData(0xA0,0x00000000); //RAMPMODE=0

sendData(0xA1,0x00000000); //XACTUAL=0
sendData(0xAD,0x00000000); //XTARGET=0
}

void loop()
{
// put your main code here, to run repeatedly:
sendData(0xAD,0x0007D000); //XTARGET=512000 | 10 revolutions with micro step = 256
delay(20000);
sendData(0x21,0x00000000);
sendData(0xAD,0x00000000); //XTARGET=0
delay(20000);
sendData(0x21,0x00000000);
}

void sendData(unsigned long address, unsigned long datagram)
{
//TMC5130 takes 40 bit data: 8 address and 32 data

delay(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(" ");
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博客上了解更多)

總結(jié):

希望這片文章,可以幫助您了解步進電機的工作原理以及如何驅(qū)動步進電機。同時驅(qū)動步進電機的技術(shù)已經(jīng)很成熟,善于利用現(xiàn)有的硬件和代碼,才能事半功倍。


免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請聯(lián)系小編進行處理。


推薦閱讀:

使用功率分析儀測量和分析電抗器(電感器)的方法

面向新太空應(yīng)用的 DC-DC 轉(zhuǎn)換器

意法半導(dǎo)體公布2024年第三季度財報、電話會議及資本市場日直播時間

超小型VCSEL*反射式光電傳感器的應(yīng)用潛力

【測試案例分享】提高信號完整性的秘密武器:實時示波器測試TDR阻抗的全新方案


特別推薦
技術(shù)文章更多>>
技術(shù)白皮書下載更多>>
熱門搜索
壓控振蕩器 壓力傳感器 壓力開關(guān) 壓敏電阻 揚聲器 遙控開關(guān) 醫(yī)療電子 醫(yī)用成像 移動電源 音頻IC 音頻SoC 音頻變壓器 引線電感 語音控制 元件符號 元器件選型 云電視 云計算 云母電容 真空三極管 振蕩器 振蕩線圈 振動器 振動設(shè)備 震動馬達 整流變壓器 整流二極管 整流濾波 直流電機 智能抄表
?

關(guān)閉

?

關(guān)閉