您现在的位置是:网站首页> 硬件
电机相关信息收集
- 硬件
- 2022-06-06
- 908人已阅读
步进电机部分(细分就是把原来的一步又分为多步完成)步进电机驱动器
伺服电机(Ardunio常用舵机)
PLC 伺服驱动器
一般直流电机部分
130直流电机
一般直流电机控制模块XY-2.5AD
减速电机(驱动力强一般电机+减速机构),一般电机
PWM写入analogWrite
转速由 PWM决定
步进电机部分
步进电机(特殊直流电机):可以精确输出轴角度 低速运行时候更高的扭矩 开环控制性价比高
步进电机是将电脉冲信号转变为角位移或线位移的开环控制电机,广泛应用于3D打印,机器人开发等领域。这里我们着重介绍的步进电机是NEMA17(42步进电机)以及28BYJ-48步进电机。这两种电机相对创客制作来说是最流行的两款步进电机。
七星虫 42步进电机A4988驱动模块CNC V3雕刻机扩展板3D打印机配件
转速由脉冲间隔和脉冲宽度决定
A4988控制步进电机
// 定义电机控制用常量
// A4988连接Arduino引脚号
const int dirPin = 2; // 方向引脚
const int stepPin = 3; // 步进引脚
// 电机每圈步数
const int STEPS_PER_REV = 200;
void setup() {
// Arduino控制A4988步进和方向的引脚为输出模式
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
}
void loop() {
// 设置电机顺时针旋转
digitalWrite(dirPin,LOW);
// 电机慢速旋转
for(int x = 0; x < STEPS_PER_REV; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin,LOW);
delayMicroseconds(2000);
}
// 等待一秒
delay(1000);
// 设置电机逆时针旋转
digitalWrite(dirPin,HIGH);
// 电机快速旋转
for(int x = 0; x < (STEPS_PER_REV * 2); x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin,LOW);
delayMicroseconds(1000);
}
// 等待一秒
delay(1000);
}
冷却系统–散热器
A4988驱动器IC的过多功耗会导致温度上升,该温度上升可能超出IC的容量,可能会损坏自身。
即使A4988驱动器IC每个线圈的最大额定电流为2A,该芯片也只能为每个线圈提供大约1A的电流而不会过热。
为了使每个线圈达到1A以上,需要使用散热器或其他冷却方法。
A4988驱动器通常带有散热器。建议您在使用驱动程序之前先安装它。
限流
在使用电动机之前,需要进行一些小的调整。我们需要限制流经步进线圈的最大电流,并防止其超过电机的额定电流。
A4988驱动器上有一个微调电位器,可用于设置电流限制。您应将电流限制设置为等于或小于电动机的额定电流。
要进行此调整,有两种方法:
方法1:
在这种方法中,我们将通过测量“ ref”引脚上的电压(Vref)来设置电流限制。
查看您的步进电机的数据表。记下它的额定电流。在我们的情况下,我们使用NEMA 17 200steps / rev,12V 350mA。
断开三个微步选择引脚,使驱动器进入全步模式。
不给STEP输入计时,将电动机固定在固定位置。
调整时,请测量金属微调电位器本身的电压(Vref)。
使用公式调整Vref电压电流限制= Vref x 2.5
例如,如果电动机的额定电流为350mA,则可以将参考电压调整为0.14V。
提示:一种简单的调整方法是在金属螺丝刀的轴上使用一个鳄鱼夹,然后将其固定在万用表上,以便您可以同时使用螺丝刀测量和调整电压。
方法2:
在这种方法中,我们将通过测量流经线圈的电流来设置电流极限。
查看您的步进电机的数据表。记下它的额定电流。在我们的情况下,我们使用NEMA 17 200steps / rev,12V 350mA。
断开三个微步选择引脚,使驱动器进入全步模式。
不给STEP输入计时,将电动机固定在固定位置。不要将STEP输入悬空,将其连接到逻辑电源(5V)
将电流表与步进电机上的线圈之一串联,然后测量实际电流。
拿起一把小螺丝刀,调节电流限制电位器,直到达到额定电流。
如果更改逻辑电压(VDD),则需要再次执行此调整
用Arduino UNO接线A4988步进电机驱动器
现在我们了解了有关驱动程序的所有知识,我们将其连接到我们的Arduino。
连接非常简单。首先将VDD和GND(VDD旁边)连接到Arduino的5V和接地引脚。DIR和STEP输入引脚分别连接到Arduino上的#2和#3数字输出引脚。
将步进电机连接到2B,2A,1A和1B引脚。实际上,A4988的布局很方便,可以与几台双极电机上的4针连接器匹配,因此这不是问题。
警告:驱动器通电时连接或断开步进电机会损坏驱动器。
接下来,将RST引脚连接到相邻的SLP / SLEEP引脚以保持驱动器使能。还要保持微步选择引脚断开,以使电机以全步模式运行。
最后,将电动机电源连接到VMOT和GND引脚。请记住,在靠近电路板的电动机电源引脚之间放置一个较大的100pF去耦电解电容。
A4988控制42步进电机
MS1 , MS2 , MS3 跳线说明:(例子里是低电平,悬空或接地线,使用全步进模式)
分别是全步进,1/2步进,1/4步进,1/8步进,1/16步进模式。
步进电机走一步是1.8度,一圈就是200步。例如使用1/16步进,则需要走3200步才等于一圈。
ms1 ms2 ms3
L L L 整步(没有细分)
H L L 1/2(2细分)
L H L 1/4(4细分)
H H L 1/8(8细分)
H H H 1/16(16细分)
测试程序程序:
int x;
void setup()
{
pinMode(6,OUTPUT); // Enable: EN可以使用单片机端口控制,也可以直接连接GND使能
pinMode(5,OUTPUT); // steps:脉冲个数
pinMode(4,OUTPUT); // dir:为方向控制
digitalWrite(6,LOW); // Set Enable low
}
void loop()
{
digitalWrite(4,HIGH); // Set Dir high
for(x = 0; x < 200; x++) // Loop 200 times
{
digitalWrite(5,HIGH); // Output high
delayMicroseconds(800); // Wait 1/2 a ms
digitalWrite(5,LOW); // Output low
delayMicroseconds(800); // Wait 1/2 a ms
}
delay(1000); // pause one second
digitalWrite(4,LOW); // Set Dir low
for(x = 0; x < 200; x++) // Loop 2000 times
{
digitalWrite(5,HIGH); // Output high
delayMicroseconds(800); // Wait 1/2 a ms
digitalWrite(5,LOW); // Output low
delayMicroseconds(800); // Wait 1/2 a ms
}
delay(1000); // pause one second
}
ps后记学习:
*脚6(-en) 低电平为启动电机(enable),貌似也可以不接,试过一样能运行.但如果要控制电机的启动关闭还是要用上
*脚4(-dir) 用高低电平控制方向.
*脚5(-step) 用高低电平驱动电机转动.注意中间间隔等待的微秒值,如果太快会导致电机有声响不转动.
http://www.geek-workshop.com/thread-9397-1-1.html
int dirPin = 8;
int stepperPin = 7;
void setup() {
pinMode(dirPin, OUTPUT);
pinMode(stepperPin, OUTPUT);
}
void step(boolean dir,int steps){
digitalWrite(dirPin,dir);
delay(50);
for(int i=0;i<steps;i++){
digitalWrite(stepperPin, HIGH);
delayMicroseconds(800);
digitalWrite(stepperPin, LOW);
delayMicroseconds(800);
}
}
void loop(){
step(true,1600);
delay(500);
step(false,1600*5);
delay(500);
}
void setup() {
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
digitalWrite(8, LOW);
digitalWrite(9, LOW);
}
void loop() {
digitalWrite(9, HIGH);
delay(1);
digitalWrite(9, LOW);
delay(1);
}
步进电机型号
1、步进电机到底有多少型号?
答:28.42.57.86.110.130.
2、这些数字是代表电机尺寸大小吗?
答:这些型号根据电机的底座的直径来命名的。
3、除了BYG还有哪些英文型号,分别代表什么意思?
答:现在用的比较多的都是混合式步进电机了。而且现在这种东西已经国产化了。各个厂家的命名又有所不同。所以不能给你提供更好的解释。
步进电机的基本参数
1、电机固有步距角
它表示控制系统每发一个步进脉冲信号,电机所转动的角度。电机出厂时给出了一个步距角的值,这个步距角可以称之为“电机固有步距角”,它不一定是电机实际工作时的真正步距角,真正的步距角和驱动器有关。
2、步进电机的相数
步进电机的相数是指电机内部的线圈组数,目前常用的有二相、三相、四相、五相步进电机。电机相数不同,其步距角也不同,一般二相电机的步距角为0.9°/1.8°、三相的为0.75°/1.5°、五相的为0.36°/0.72°。在没有细分驱动器时,用户主要靠选择不同相数的步进电机来满足自己步距角的要求。如果使用细分驱动器,则“相数”将变得没有意义,用户只需在驱动器上改变细分数,就可以改变步距角。
3、保持转矩(HOLDINGTORQUE)
保持转矩是指步进电机通电但没有转动时,定子锁住转子的力矩。它是步进电机最重要的参数之一,通常步进电机在低速时的力矩接近保持转矩。由于步进电机的输出力矩随速度的增大而不断衰减,输出功率也随速度的增大而变化,所以保持转矩就成为了衡量步进电机最重要的参数之一。比如,当人们说2N.m的步进电机,在没有特殊说明的情况下是指保持转矩为2N.m的步进电机。
4、钳制转矩(DETENTTORQUE)
钳制转矩是指步进电机没有通电的情况下,定子锁住转子的力矩。由于反应式步进电机的转子不是永磁材料,所以它没有DETENTTORQUE。
步进电机的特点
1、一般步进电机的精度为步进角的3-5%,且不累积。
2、步进电机外表允许的最高温度取决于不同电机磁性材料的退磁点。步进电机温度过高时会使电机的磁性材料退磁,从而导致力矩下降乃至于失步,因此电机外表允许的最高温度应取决于不同电机磁性材料的退磁点;一般来讲,磁性材料的退磁点都在摄氏130度以上,有的甚至高达摄氏200度以上,所以步进电机外表温度在摄氏80-90度完全正常。
3、步进电机的力矩会随转速的升高而下降。当步进电机转动时,电机各相绕组的电感将形成一个反向电动势;频率越高,反向电动势越大。在它的作用下,电机随频率(或速度)的增大而相电流减小,从而导致力矩下降。
4、步进电机低速时可以正常运转,但若高于一定速度就无法启动,并伴有啸叫声。步进电机有一个技术参数:空载启动频率,即步进电机在空载情况下能够正常启动的脉冲频率,如果脉冲频率高于该值,电机不能正常启动,可能发生丢步或堵转。在有负载的情况下,启动频率应更低。如果要使电机达到高速转动,脉冲频率应该有加速过程,即启动频率较低,然后按一定加速度升到所希望的高频(电机转速从低速升到高速)。
步进电机的优点
1、电机旋转的角度正比于脉冲数;
2、电机停转的时候具有最大的转矩(当绕组激磁时);
3、由于每步的精度在百分之三到百分之五,而且不会将一步的误差积累到下一步因而有较好的位置精度和运动的重复性;
4、优秀的起停和反转响应;
5、由于没有电刷,可靠性较高,因此电机的寿命仅仅取决于轴承的寿命;
6、电机的响应仅由数字输入脉冲确定,因而可以采用开环控制,这使得电机的结构可以比较简单而且控制成本;
7、仅仅将负载直接连接到电机的转轴上也可以极低速的同步旋转;
8、由于速度正比于脉冲频率,因而有比较宽的转速范围。
步进电机的缺陷
1、如果控制不当容易产生共振;
2、难以运转到较高的转速;
3、难以获得较大的转矩;
4、在体积重量方面没有优势,能源利用率低;
5、超过负载时会破坏同步,高速工作时会发出振动和噪声。
如何选择步进电机
1、步距角的选择
电机的步距角取决于负载精度的要求,将负载的最小分辨率(当量)换算到电机轴上,每个当量电机应走多少角度(包括减速)。电机的步距角应等于或小于此角度。市场上步进电机的步距角一般有0.36度/0.72度(五相电机)、0.9度/1.8度(二、四相电机)、1.5度/3度 (三相电机)等。
2、静力矩的选择
步进电机的动态力矩一下子很难确定,我们往往先确定电机的静力矩。静力矩选择的依据是电机工作的负载,而负载可分为惯性负载和摩擦负载二种。单一的惯性负载和单一的摩擦负载是不存在的。直接起动时(一般由低速)时二种负载均要考虑,加速起动时主要考虑惯性负载,恒速运行进只要考虑摩擦负载。一般情况下,静力矩应为摩擦负载的2-3倍内好,静力矩一旦选定,电机的机座及长度便能确定下来(几何尺寸)。
3、电流的选择
静力矩一样的电机,由于电流参数不同,其运行特性差别很大,可依据矩频特性曲线图,判断电机的电流。
选用步进电机时应注意以下几点
1、一般应选用力矩比实际需要大百分之五十到百分之百的步进电机,因为步进电机不能过负载运行,即便是瞬间过载都可能造成失步、停转或不规则原地来回作动。
2、上位控制器输入的脉冲电流必须够大(一般要》10mA),以确保光电耦合器稳定导通,否则会导致步进电机失步;如果输入脉冲频率过高,会因个别脉冲接收不到,导致步进电机失步。
3、启动频率不应太高,应在启动程序中设置加速过程,即从规定的启动频率开始,加速到设定频率,否则就可能不稳定,甚至处于惰态。
4、电机如果未固定好,造成强烈共振,也会导致步进电机失步。
5、应了解步进电机的固有弱点:输入脉冲频率过高,易导致丢步;输入脉冲频率过低,易出现共振;转速偏高时扭矩降低明显。
6、应了解最新型步进电机的性能,必要时选用采用了最新控制技术的高级步进电机系统,高级系统既可以使步进电机在高速状态下减少共振,还能运用减少步进电机反电动势的技术,增加电机在高速状态下的扭矩。
步进电机失步的原因很多。在实际应用过程中,有必要采用消除法进行逐一分析,找出造成失步的真正原因。 通常,步进电动机失步的原因有以下几种:
1.步进电动机本身的工作转矩不足,没有足够的能力来驱动负载;
2.步进电机的启动和停止加减速过程不足,步进电机在加减速过程中失步;
3.步进电机的功率不足以导致步进电机的输入功率不足以导致步进;
4.步进电机驱动器电压不足或驱动器电流设置过低;
5.驱动程序或控制器受到信号干扰;
6.步进电动机系统的共振会导致步进电动机的负载能力降低;
7.驱动器和控制器的信号不匹配;
8.同步轮或齿轮箱的反冲或来回。
伺服电机(Ardunio常用舵机):闭环控制
舵机自定义函数控制
//控制舵机
void initServo(int ServoPin)
{
turnAngle = 90;
pinMode(ServoPin, OUTPUT);
digitalWrite(ServoPin, LOW);//先保证拉低
//ServoControl(12, 0);
}
long xnmap(long x, long in_min, long in_max, long out_min, long out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
void ServoControl(int ServoPin, int servoAngle)
{
double thisAngle = xnmap(servoAngle, 0, 180, 500, 2500);//等比例角度值范围转换高电平持续时间范围
unsigned char i = 50;//50Hz 每秒的周期次数(周期/秒) 即1S 50 个周期 每个周期20ms
while (i--)
{
digitalWrite(ServoPin, HIGH);
delayMicroseconds(thisAngle); //高电平时间
digitalWrite(ServoPin, LOW);
delayMicroseconds(20000 - thisAngle);//每个周期20ms减去高电平持续时间
}
}
使用 map (x, in_min, in_max, out_min, out_max) 函数将模拟输入数值(0 - 1023)等比映射到模拟输出数值区间(0-180)内
map(val,0,1023,0,180);
或使用舵机控制库Servo
Servo库文件使用
我们知道舵机必须定期接收高电平脉冲控制信号才能维持转动。如果信号停止,舵机也停止。详见:舵机角度的控制。如果使用servo库来设置控制信号,就可以通过引入一些代码,实现如延迟、检查传感器、等待等功能。同时,由于servo库一直在后台运行,而舵机一直在旋转,它会经常中断其他正在执行的代码来启动那些高脉冲,带是这个切换的动作快到我们感知不到。
使用servo库来发送舵机控制信号一般需要四个步骤:
1、 首先要告诉Arduino编程器,希望在代码开始时,即setup函数之前,声明使用Servo库函数。
#include <Servo.h> // Include servo library
2、 在#include和setup函数之间为要发送的信号命名servo库的实例。如下servoLeft就是指定的实例名称。
Servo servoLeft; // Declare left servo
3、 在setup函数中,使用给出的舵机信号的名称后跟一个点,然后通过附加函数attach()调用信号引脚。这个例子告诉系统舵机信号servoLeft应该通过数字引脚13来传输。
servoLeft.attach(13); // Attach left signal to pin 13
4、writeMicroseconds()函数,用于设置脉冲持续时间。
servoLeft.writeMicroseconds(1500); // 1.5 ms stay-still signal
5、write()函数, 作用是将一个角度值写入舵机,设置轴转动的角度(该值是指角度),0为在一个方向全速转动,180为在另一个方向上全速转动,接近90为复位。
servoLeft.write(90); // set servo to mid-point
6、attached()函数,用于检测servo变量是否正确连接至Arduino对应引脚上。返回值为 true 和 false 。
servoLeft.attached()
7、detach()函数, 作用是从对应引脚上分离舵机变量。如果要将所有舵机变量分离,则使用analogWrite()函数将引脚9和引脚10用于PWM输出。
servoLeft.detach()
8、read()函数, 用于读取舵机的当前角度值(传递给上次调用write()的值)。
servoLeft.read()
以上是servo.h库文件的基本函数讲解
例子:
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// a maximum of eight servo objects can be created
int pos = 0; // variable to store the servo position
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
for(pos = 0; pos < 180; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
for(pos = 180; pos>=1; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15ms for the servo to reach the position
}
}
联轴器
同步带轮
传动轮
1、电机轴与外部轴同轴,用梅花形弹性连轴器。
2、如果电机轴与外部轴平行但不同轴,用直齿圆柱齿轮来传动,也可用皮带,还可以用链传动,视情况而定。
3、如果两轴不平行,也不同轴,就用万向连轴器。
4、空间里相互垂直,用直齿圆锥齿轮传动,还可以用涡轮涡杆。
销孔卡槽连接
键槽+侧面顶丝孔连接
联轴器孔径要比轴孔径大几丝
上一篇:硬件学习及经验总结笔记
下一篇:STM32芯片型号的命名解读