皮带传动N20电机选型

皮带传动电机选型

结构示意

image-20230605163326085

image-20230605163342632

电机选型

名称 数值 单位
电机转速 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减速电机都可以

image-20230605163025379

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;
    }
  }
}

上传代码后可通过串口助手进行速度与距离等的调试测试

posted @ 2023-06-05 16:36  Dapenson  阅读(162)  评论(0编辑  收藏  举报