步进电机驱动NSD8381调试指南
步进电机驱动NSD8381调试指南###
本文将结合具体的案例,针对纳芯微全新发布的微步控制步进电机驱动NSD8381,在用于步进电机控制的实现流程,以及堵转检测的实现流程做详细的介绍,帮助工程师能够快速构建用NSD8381驱动芯片实现控制步进电机运转和实现堵转检测的实操能力。
步进电机驱动芯片NSD8381介绍
NSD8381是纳芯微全新发布的车规级高集成式双相双极步进电机驱动器,可广泛适用于汽车头灯步进控制(ADB/AFS),HUD位置调节电机,热管理系统阀门中步进电机或BDC电机的驱动等。
该芯片支持最大1.35A满量程电流,包括电流斩波调节,内部最高1/32微步转换器和多种衰减模式选择使步进电机平稳运动。NSD8381支持母线欠压保护(VSUV),过流保护(OCP),温度报警(OTW/UTW)和过温保护(OTSD);同时还支持输出负载的开路诊断和过流保护。此外,NSD8381还集成了堵转检测功能,可以用于堵转故障输出。
2
用于步进电机控制配置及测试案例
1)NSD8381的SPI框架结构
1. SDI的输入帧由24bit构成以下的结构
2bit 操作指令C1/C0,其中 00代表写操作,01代表读操作,10代表读清
6 bit的寄存器地址
16bit数据,其中包含bit 15~bit 1的数据和bit 0的奇校验位
表1:SPI 输入帧结构
2. SDO的输出帧由24bit构成以下的结构
8bit全局状态字节,显示返回的全局状态,如果有故障和告警,相应的bit会反馈故障状态
16bit返回数据,其中包含bit 15~bit 1的数据和bit 0 的奇校验位
表2:SPI 输出帧结构
2)NSD8381步进电机模式工作流程图
图1:步进电机工作流程图
3)NSD8381步进电机测试硬件组成以及软件配置
硬件设备:NSD8381 Demo Board一块,步进电机,12V直流电源,USB转TTL小工具连接到上位机,信号发生器一台
SPI寄存器配置:
CONFIG_6:0x081013----配置步进电机电流大小(HOLD:50mA; full 571mA)
CONFIG_4:0x060841----配置电流调制频率 20k,slew rate 10V/us,filter time 2us,电流slow decay
注意:这里采用默认slew rate ,10v/us, 在应用中推荐把 slew rate 调快, slew rate 调快之后, dead time 也减小。调快对芯片在比较大的电流的工作场景下的功耗是有明显的好处。比如,可以配置CONFIG_4: 0x060A40, ----配置电流调制频率 20k,slew rate 70V/us,filter time 2us, 电流slow decay。
CONFIG_1:0x030428----配置CTRLx (默认配置采用步进电机模式)
CONFIG_3:0x058000----使能输出,设置微步(1/16微步)
4)NSD8381步进电机测试波形
测试条件:1/16微步,满量程电流571mA,电流调制频率20kHz, 电流调制 filter time 2us,STEP脉冲 1kHz
1. Slow decay模式测试波形
图2:步进电机绕组电流波形
a. 电流上升decay
b. 电流下降decay
图3:步进电机绕组电流波形decay波形
2. Mix decay模式测试波形
图4:步进电机绕组电流波形
a. 电流上升decay
b. 电流下降decay
图5:步进电机绕组电流波形decay波形
3. Auto decay模式测试波形
图6:步进电机绕组电流波形
a. 电流上升decay
b. 电流下降decay
图7:步进电机绕组电流波形decay波形
对比三组波形,实测现象总结如下:Slow decay和Auto decay的模式下,其电流上升decay波形比较缓和,正弦波的峰值处毛刺较小,电机运行的声音比较轻微。Mix decay电流上升decay的波形分成两段,正弦波的峰值处毛刺较大,电机运行的噪音比较大一些。
在实际应用的时候,可以根据调试decay模式来获得合适电机的工作状态。
3
用于步进电机控制堵转检测使用
1)堵转检测的原理
图8是步进电机绕组的等效模型。当电机正常转动的时候,根据公式1 可以得到电机绕组两侧的电压Vmotor。根据公式2可得到电机的反电势BEMF,其中N为线圈的绕组数量,B代表磁场强度,A是被电机磁场所包围的面积,w是电机转动的角速度。
由公式1可知,当流过电机的电流为零时,电机绕组两侧的电压是BEMF,即反电势电压。由公式2 可知,反电势电压和电机的角速度成正比,当电机堵转的时候,速度为零,此时反电势为理论上也为零。因此,可以利用检测绕组电流为零时的绕组电压来检测反电势。
公式1
公式2
图8:步进电机绕组等效模型
2)堵转检测步骤
图9:NSD8381 堵转检测流程
堵转检测过程注意点:
1. 如果涉及正转和反转的应用,需要在电机正转、反转的时候分别执行1-6步,记录高值和低值。设置CVLLA的值要满足大于正、反转的堵转值,但是远小于正、反转正常转动的反电势值。
2. CV_DELAY设置:以图10作为例子,CV_DELAY的时间必须大于图中的△X。为了确保反电势的采样点是在图中平坦的那一段,即△X后的那一段线圈电流为零的点,采集的值才准确。图10显示△X =108us,内部PWM的频率是20kHz(50us),则这个波形的CV_DELAY值需要 大于3,即大于3×50=150us。另外需要注意的是当电机转动很快的情况,可以直接设计CV_DELAY为0,此时ADC的采样点为零电流结束点。
图10:正常转动时反电势波形
3. 读取CVA,CVB,CVC,CVD以及设计CVLLA和CVLLB的值的时候,设置的寄存器位为Bit 1到Bit10,在换算电压值的时候注意需要移一位。
3)步进电机堵转检测实例
步进电机1:2kHz step频率,20kHz调制频率,正常转动时之间的OUTA1,OUTA2的反电势为3.2V,如图11。堵转时OUTA1、OUTA2之间的反电势为0.2V,如图12。
寄存器CONFIG_5配置为寄存器0x078E00(CV_DELAY=7),根据图11计算为350us,满足CV_DELAY的延时采样点。CVLLA配置 为0x0E0014 (0.5V)。当电机堵转时,可以检测到FUNCTION_ERR置位,回读STA_1,STALL置1。
图11:电机1正常转动时OUTA1和OUTA2之间波形
图12:电机1堵转时OUTA1、OUTA2波形
步进电机2:1.65kHz step频率,20kHz调制频率,正常转动时OUTA1、OUTA2反电势为11.5V,如图13。堵转时OUTA1、OUTA2之间的反电势为1.9V,如图14。
寄存器CONFIG_5配置为寄存器0x078001(CV_DELAY=0)在零电流结束位置采样。CVLLA配置 为0x0E00DB(2.98V)。当电机堵转时,可以检测到FUNCTION_ERR置位,回读STA_1,STALL置1。
图13:电机2正常转动时OUTA1和OUTA2之间波形
图14:电机2正常堵转时OUTA1和OUTA2之间波形
纳芯微电子(简称纳芯微,科创板股票代码688052)是高性能高可靠性模拟及混合信号芯片公司。自2013年成立以来,公司聚焦传感器、信号链、电源管理三大方向,为汽车、工业、信息通讯及消费电子等领域提供丰富的半导体产品及解决方案。
纳芯微以『“感知”“驱动”未来,共建绿色、智能、互联互通的“芯”世界』为使命,致力于为数字世界和现实世界的连接提供芯片级解决方案。
Note-15使用A4988控制步进电机
如果需要控制一堆步进电机,那么只使用一个Arduino来控制,就会占用大量的处理时间,而无法处理其他事情,除非使用一个独立的专用步进电机驱动器:A4988。
A4988只需两个引脚就可以控制双极步进电机(如NEMA 17)的速度和旋转方向。
步进电机使用一个齿轮和电磁铁旋转,通过脉冲控制电机的行为,一次“一步”。
脉冲的顺序决定了电机的旋转方向。脉冲的频率决定了电机的速度。脉冲的数量决定了电机转多远。A4988步进电机驱动芯片
该模块的核心是来自Allegro - A4988的微步驱动器,其体型只有0.8″× 0.6″。
A4988步进电机驱动器的输出驱动能力高达35V和±2A。这可以控制双极步进电机(NEMA 17)每个线圈高达2A的输出电流。
A4988驱动自带控制程序,能简化操作,只需2个引脚就能完成控制
一个是控制步数另一个用来控制旋转方向。A4988驱动提供五种不同的步进细分
全步、半步、四分之一步、八分之一步十六分之一步。技术规格
A4988驱动引脚图
将A4988步进电机驱动器连接到Arduino
Arduino代码--不使用库
// Define pin connections & motor's steps per revolution
const int dirPin = 2;
const int stepPin = 3;
const int stepsPerRevolution = 200;
void setup()
{
// Declare pins as Outputs
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
}
void loop()
{
// Set motor direction clockwise
digitalWrite(dirPin, HIGH);
// Spin motor slowly
for(int x = 0; x < stepsPerRevolution; x++)
{
digitalWrite(stepPin, HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin, LOW);
delayMicroseconds(2000);
}
delay(1000); // Wait a second
// Set motor direction counterclockwise
digitalWrite(dirPin, LOW);
// Spin motor quickly
for(int x = 0; x < stepsPerRevolution; x++)
{
digitalWrite(stepPin, HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin, LOW);
delayMicroseconds(1000);
}
delay(1000); // Wait a second
}
在loop中,电机先缓慢顺时针旋转,间隔1秒后再快速逆时针旋转。控制电机方向:DIR引脚设置为HIGH或LOW,以控制电机的旋转方向。HIGH高电平将使电机顺时针方向转动,LOW低电平将使电机逆时针方向转动。控制速度:电机的速度是由发送到STEP引脚的脉冲频率决定的。脉冲频率越高,电机运行越快。脉冲就是把输出拉高,等待一小会儿,然后拉低,再等待。通过改变两个脉冲之间的延迟,可以改变了这些脉冲的频率以及电机的速度。Arduino代码:使用accelstepper库
对于简单的、单一的电机应用来说,控制步进器不需要库是完全没问题的。但是当想要控制多个步进时,就需要一个库。
accelerstepper步进电机库
加减速多个同步步进器,每个步进器都有独立的同步步进。安装accelerstepper库
arduino代码
// Include the AccelStepper Library
#include <AccelStepper.h>
// Define pin connections
const int dirPin = 2;
const int stepPin = 3;
// Define motor interface type
#define motorInterfaceType 1
// Creates an instance
AccelStepper myStepper(motorInterfaceType, stepPin, dirPin);
void setup() {
// set the maximum speed, acceleration factor,
// initial speed and the target position
myStepper.setMaxSpeed(1000);
myStepper.setAcceleration(50);
myStepper.setSpeed(200);
myStepper.moveTo(200);
}
void loop() {
// Change direction once the motor reaches target position
if (myStepper.distanceToGo() == 0)
myStepper.moveTo(-myStepper.currentPosition());
// Move the motor one step
myStepper.run();
}
motorInterfaceType设置为1,1表示带有步进和方向引脚的外部步进驱动器。由于NEMA 17每转200步,电机的步数也被设置为200步。在loop函数中,使用If语句检查电机需要移动多远(通过读取distanceToGo属性),直到它到达目标位置(通过moveTo设置)。一旦distanceToGo达到零,通过改变moveTo位置为其当前位置的负数,电机向相反的方向旋转。run()函数启动电机运转。相关问答
12v步进电机带动多大?
12V步进电机:选用的步进电机(55BY48H02:电压12V电流0.34A相数4电阻36Ω)主要参数:永磁式二相的步进电机,工作电压12V,步距角7.5度,每半步3.75度。步进...
步进电机额定电压24v可以用12v供电吗?
额定电压是5V的步进电机不能直接用12V供电。经过一些方法改变,可以实现12V供电,方法如下:1、增加5V稳压电路,采用DC-DC降压芯片、三端稳压器(包括扩流电...
步进电机12v和24v有什么区别?
步进电机的工作电压通常指的是驱动电路的电压,而不是电机本身的额定电压。步进电机的额定电压取决于具体型号和规格。一般来说,步进电机的驱动电路工作电压范...
朋友们谁清楚!!河北放心的9-12V步进电机,9-12V步进电机排...
[回答]步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(...
步进电机控制器dzh3-8a参数?
步进电机控制器DZH3-8A的参数如下:1.电源电压:DC12V-24V2.额定电流:最大3A3.细分设置:全细分(1-512细分)4.控制方式:全数字化、自动识别三相四线和四相...
步进电机接收的脉冲还是电压?
直流步进电机的工作电压值,是脉冲的电压值。步进电机的工作电压是12v,频率200hz,那么他每相收到的脉冲电压也是12v。但要再作点说明,给步进电机加脉冲不同于...
42步进电机是多少v电压?
应该是定电流驱动方式,这种芯片可以根据需要动态调整给电机的电压,所以虽然步进电机相电机是12V,驱动电压是24V,是没有问题的,相反,如果驱动电压和相电压是...
35byj412步进电机参数?
你好,35BYJ412步进电机是一种四相八线式步进电机,其参数如下:-步距角:5.625度/步-相电阻:50欧姆/相-相电感:25mH/相-额定电压:12VDC-额定电流:...
步进电机怎么控制?
1、步进电机动作的话要靠驱动器来驱动的,步进电机也叫脉冲电机,给一个脉冲转一个角度。12V的话要控制要先买个开关电源,把220V变成12V接到驱动器,再用驱动器...
步进脉冲方向信号电源多少v?
一般步进电机驱动器的输入信号是适应5V电平的。如果控制信号的电压大于5V,还得外加限流电阻。至于外加电阻的大小在驱动器说明文档中应该会加以说明的。不过...