皮带传动N20电机选型
皮带传动电机选型
结构示意
电机选型
名称 | 数值 | 单位 |
---|---|---|
电机转速 | 60 | r/m |
工件及皮带上的总质量 | 400 | g |
工件与皮带间的摩擦系数 | 0.3 | |
主动轮与从动轮总质量 | 100 | g |
主动轮半径 | 16 | mm |
皮带输送系统效率 | 90% | |
要求皮带速度 | 0.016 | m/s |
电机电源 | 直流12V/6V | |
工作时间 | 3 | 小时h |
(设电机转速 60 r/min)
线速度
V = w R = 60 r/min * 0.008 m = 1 r/s * 0.008 m = 0.008 m/s
主动轮转速:
n₁ = 60 r/min
电机减速比
1:236
皮带牵引力F
F = μ m g = 0.3 * 0.4 * 9.8 = 1.176 N
主动轮上的负载扭矩
T= F D /2 η =( 1.176 * 8 *10 ﹣³ ) / 2*0.9 = 0.005226666 N·m
由于皮带主动轮与减速器直接连接,所以主动轮上的负载扭矩TL 等于减速器的输出扭矩 Tg,
即Tg = TL = 0.005226666 N·m
考虑安全余量及电压的波动情况等,通常按2倍最小计算值选取电机的最小启动扭矩
0.005226666 * 2 = 0.0104533 N·m
至此,可得出N20减速电机的选型,输出轴扭矩选大于以下值的即可
0.0104533 N·m = 0.104533 KG·CM
因此选取标红范围内的N20减速电机都可以
2023年6月13日16:37:55
经过实测12V60r,及68r的N20卧式电机在垂直安装时无法带动负载,因此选取力矩更大的电机(1218-050减速电机马达蜗轮蜗杆)来测试,
测试代码
测试使用Arduino框架快速搭建测试平台,驱动器选用XY-2.5AD 模块,后续准备更换TB6612FNG电机驱动板或L9110S桥 两路2路电机驱动板进行测试,原因是XY-2.5AD不支持12V电机驱动电压输入。
#include <Arduino.h>
/* XY-2.5AD 模块控制电机
* DC电机 运行状态 IN1 IN2 IN3 IN4
* 电机A 正转(调速) 1/PWM 0
* 电机A 反转(调速) 0 1/PWM
* 空转 0 0
* 刹车 1 1
* 电机B 正转(调速) 1/PWM 0
* 电机B 反转(调速) 0 1/PWM
* 空转 0 0
* 刹车 1 1
*/
#define IN1_A D5
#define IN2_A D6
#define IN1_B D7
#define IN2_B D8
bool forwardDirection = true;
u8 speedCurrent = 255;
void forward();
void backward();
void setSpeed(int speed);
void moveSteps(int steps, bool forwardDirection);
void stopMotors();
void setSpeed(int speed)
{
speedCurrent = constrain(speed, 0, 255);
}
void forward()
{
analogWrite(IN1_A, speedCurrent); // 电机A正转
digitalWrite(IN2_A, LOW);
analogWrite(IN1_B, speedCurrent); // 电机B正转
digitalWrite(IN2_B, LOW);
forwardDirection = true;
}
void backward()
{
analogWrite(IN1_A, LOW); // 电机A反转
analogWrite(IN2_A, speedCurrent);
analogWrite(IN1_B, LOW); // 电机B反转
analogWrite(IN2_B, speedCurrent);
forwardDirection = false;
}
void stopMotors()
{
if (forwardDirection)
{
backward();
}
else
{
forward();
}
delay(5);
// 空转
analogWrite(IN1_A, 0);
analogWrite(IN2_A, 0);
analogWrite(IN1_B, 0);
analogWrite(IN2_B, 0);
}
void moveSteps(int steps, bool isForward)
{
// 通过延时控制转动步数
if (isForward)
{
forward();
}
else
{
backward();
}
// delay(1000); // 调整延迟时间以控制步数移动速度
for (int i = 0; i < steps; i++)
{
delay(1);
}
stopMotors();
}
void setup()
{
Serial.begin(9600);
pinMode(IN1_A, OUTPUT);
pinMode(IN2_A, OUTPUT);
pinMode(IN1_B, OUTPUT);
pinMode(IN2_B, OUTPUT);
}
void loop()
{
if (Serial.available())
{
char command = Serial.read();
switch (command)
{
case 'F':
{
Serial.println("forward speed: " + String(speedCurrent));
forward();
break;
}
case 'B':
{
Serial.println("backward speed: " + String(speedCurrent));
backward();
break;
}
case 'S':
{
Serial.println("stop");
stopMotors();
break;
}
// 设置速度
case 's':
{
u32 value = Serial.parseInt();
value = constrain(value, 0, 255);
Serial.println("set speed: " + String(value));
setSpeed(value);
break;
}
case 'A':
{
u32 value = Serial.parseInt();
value = constrain(value, 0, 1000 * 100);
Serial.println("forward: " + String(value));
moveSteps(value, true);
break;
}
case 'D':
{
u32 value = Serial.parseInt();
value = constrain(value, 0, 1000 * 100);
Serial.println("backward: " + String(value));
moveSteps(value, false);
break;
}
default:
break;
}
}
}
上传代码后可通过串口助手进行速度与距离等的调试测试