【导读】 关于步进电机,每输入一个脉冲信号,转子就转动一个角度或行进一步。其输入的角位移或线位移与输入的脉冲数成正比,转速与脉冲频率成正比。因此,步进电动机又称脉冲电动机。
1. 什么是步进电机?步进电机是一种将电脉冲信号转换成相应角位移或线位移的电动机。关于步进电机,每输入一个脉冲信号,转子就转动一个角度或行进一步。其输入的角位移或线位移与输入的脉冲数成正比,转速与脉冲频率成正比。因此,步进电动机又称脉冲电动机。上方看一个方便的双极电机:
图 1 双极电机
双极步进电机有四根电线和两个线圈。要使其旋转,须要经过线圈发送电流。每根电线都须要能够被高下驱动。以下是如何驱动电流使步进电机旋转。
图 2 双极步进电机
要了解为什么这样做,请思考一个只要四个步骤的方便步进电机。在第一阶段,它将磁体与第一线圈对齐。下一步将磁体旋转90度。经过第一线圈反向发送电流会反转磁体极性。同样的线圈被衔接,但相关于核心磁体发生同样的磁场。
图 3 步进电机转动四个步骤
当然,大少数步进电机的步数超越4步。你的规范步进电机每转200步。以这种模式旋转电机称为全步进。一旦你成功了全步上班,半步是十分方便的。你可以同时经过两个线圈发送电流,这将使分辨率加倍。步进电机驱动器也可以经常使用微步进,微步进调理经过线圈的电流。典型的电机控制器可以在每一个完整的步骤中口头16个微步骤。一些芯片担任调制电流,但较旧的芯片须要为其驱动的步进电机“调谐”。微步进进一步将整个步进划分为256微步进,使典型的200步进电机变成51200步进电机!微步进还降落了电机的噪音,使其运转更颠簸、更高效。
图 4 完整步骤1和2之间的半步
2. 如何控制线圈中的电流:控制经过绕组的电流的最经常出现设置是经常使用所谓的H桥。它是一组四个晶体管,可以将每条导线拉高或拉低。你也可以用MOS管替代晶体管,但布线会有点不同。该图显示了如何经过H桥向恣意方向发送电流。你只要要关上业路中的晶体管。
图 5 线圈中的电流方向
你必定确保同一侧的两个晶体管不能同时导通。这将经过提供从电源到接地的低电阻门路使电路短路。你还应留意,晶体管或者须要一段期间才干从接通切换到断开。除非你知道自己在做什么,否则不倡导极速切换经过线圈的电流。
图 6 必定确保同一侧的两个晶体管不能同时导通
这依然不是全貌。旋转电机将发生电压。为了包全晶体管,最好搁置二极管。
图 7 用于包全晶体管的二极管
这将防止电机发生低压,这或者会破坏晶体管甚至驱动器。假设驱动步进电机的电压高于MCU输入的电压,则须要增加另一个晶体管来控制PNP晶体管。
图 8 经常使用另一个晶体管来控制PNP晶体管
当你关上额外的NPN晶体管时,它将准许电流从PNP晶体管的基极(引脚1)流出,从而关上它。如今所须要的只是一切NPN晶体管基极上的限流电阻。
图 9 NPN晶体管基极加上的限流电阻
就是这样!该H桥将控制经过其中一个绕组的电流。因为有两个绕组,咱们须要将这个电路加倍。
图 10 双H桥驱动步进电机
如今,你可以很好地计算所需的组件。经常使用双H桥并不是驱动步进电机的惟一方法。你也可以购置步进电机驱动器,它将内置双H桥(虽然驱动器理论经常使用MOS管和其余技巧)。假设你想缩小BOM数量(有时取得更多性能),我倡导你看看步进电机驱动器。你须要检查数据表以了解芯片提供的性能。一些芯片只提供晶体管和二极管,而其余芯片则齐全控制经过线圈的电流。3. 微步进:
图 11 脉宽调制信号
微步进包括向晶体管发送脉宽调制信号。这是一种控制电机线圈电流的简双方法。预先选用的PWM值被搁置在正弦查找表中。典型地,选用20-40kHz的PWM频率。任何低于20千赫的声响,人类耳朵都能听到。频率坚持低于40kHz以提高效率并缩小晶体管中的功耗。当PWM信号为高时,电流流过晶体管。当PWM信号低时,电流流过二极管。这是一个十分毛糙的微步进成功,但它给出了它如何上班的普通概念。经常使用MOS管的电机驱动器可以控制电机电流降落或衰减的速度。驱动器的电流波形更像这样:
图 12 流经MOS管电机驱动器的电流
必定为其驱动的电机手动优化极速衰减周期和慢速衰减周期。一些新芯片会依据其感应到的电流智能调整衰减周期,但旧芯片或者须要优化(或调整)。4. 步进电机驱动实例引见板子:实例:经常使用控制板Arduino Mega控制步进电机驱动板TMC5130-EVAL来驱动步进电机。
图 13 经常使用Arduino Mega控制步进电机驱动板TMC5130-EVAL
控制器:Arduino Mega 2560是一款基于ATmega2560的微控制器板。它有54个数字输入/输入引脚(其中15个可以用作PWM输入)、16个模拟输入、4个UART(配件串行端口)、一个16 MHz晶体振荡器、一个USB衔接、一个电源插座、一个ICSP头和一个复位按钮。它蕴含支持微控制器所需的一切;只要用USB电缆将其衔接到计算机,或用交换到直流适配器或电池为其供电即可开局经常使用。步进电机驱动板:TMC5130是一个完选集成的步进电机驱动器和控制器系统,准许从任何微控制器远程控制步进电机。它在配件上成功了一实际时主要义务。一旦性能,电机可以经过给出指标位置、命令归航序列或给出指标速度来驱动。经常使用TMC5130的好处包括:易于经常使用,经常使用256微步的电机精度,低电机噪声(无噪声暗藏斩波器),无传感器失速检测(stallGuard2),无阶跃损耗,dcStep和coolStep、UART或SPI控制接口的高效率,高电压范畴,小状态因数,以及低部件数量。1. 确保Arduino Mega与TMC5130-EVAL有电压婚配假设Arduino是5V控制板,则必定将TMC5130-EVAL上的一个电阻从位置R3从新定位到R8。这将TMC5130的逻辑电平设置为+5V。2. 连线
图 14 TMC5130与Arduino Mega 2560衔接 (图片起源于Trinamic)
上图的电缆色彩+5V - >白色GND - >蓝色SDO - >黄色SDI - >橙色SCK - >白色CSN - >灰色DRV_ENN - >彩色CLK16 - >绿色
图 15 引脚对应的信号 (图片起源于Trinamic)
引脚对应的信号。在Arduino代码的注释局部记载了性能。ARDUINO代码上方的Arduino代码不须要任何额外的库。SPI库是Arduino IDE附带的。该程序初始化TMC5130并口头方便的移动到位置周期。它将依据步进电机的接线将200全步进电机向一个方向旋转10转,向另一个方向旋转10转。请经常使用TMC5130数据表或TMCL IDE作为不同寄存器的参考。#include#include "TMC5130_registers.h"/* The trinamic TMC5130 motor controller and driver operates through an* SPI interface. Each>* followed by 4>* 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>{//TMC5130 takes 40 bit>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>{char tmp[16];uint16_t LSB =>uint16_t MSB =>sprintf(tmp, "0x%.2X%.4X%.4X", stat, MSB, LSB);Serial.print(tmp);}代码起源于:Trinamic 博客(关于代码的疑问,可以去Trinamic博客上了解更多)总结:宿愿这片文章,可以协助您了解步进电机的上班原理以及如何驱动步进电机。同时驱动步进电机的技术曾经很成熟,擅长应用现有的配件和代码,才干事倍功半。
免责申明:本文为转载文章,转载此文目的在于传递更多消息,版权归原作者一切。本文所用视频、图片、文字如触及作品版权疑问,请咨询小编启动处置。
介绍浏览:
经常使用功率剖析仪测量和剖析电抗器(电感器)的方法
面向新太空运行的 DC-DC 转换器
意法半导体发布2024年第三季度财报、电话会议及资本市场日直播期间
超小型VCSEL*反射式光电传感器的运行后劲
【测试案例分享】提高信号完整性的秘密武器:实时示波器测试TDR阻抗的全新打算
标签: 步进电机、本文地址: https://kc.zdmlj.com/article/c734c6c55776a04ce6c3.html
上一篇:恩智浦MCX微控制器增强移动机器人的电机控...