12V 无刷带编码器电机 (159RPM)

概述

该款无刷直流电机,相比碳刷电机输出特性更稳定。 集成无刷驱动,只需连接电源和2根控制线即可使用,不再需要H桥电机驱动器。 此外还集成了编码器可以测量电机转速,通过测速线信号可以让单片机直到电机的转速。

技术规格

引脚说明

名称 功能描述
PWM PWM调速口,0-5V (20~30KHz)
Power - 电源负极12V-
Direction 正反转控制口,蓝线+5V或悬空时,电机正转,蓝线连接到负极,电机反转
FG FG信号线(要接上拉电阻)
Power + 电源正极12V+

warning_yellow.png 注意:有时电机接线的颜色会有所不同,但是线序是一样的!

使用教程

下面我们以一个简单的实验为例程,来告诉大家如何简单方便的使用我们的这一款电机。

准备

首先准备好下面的硬件及安装好软件

接线方式

准备好硬件后,按照下图将模块与UNO连接好

FIT0441-D.png

样例代码

硬件连接部分弄完了以后,我们就来看看软件部分怎么弄吧。 接下来我们就需要打开ARDUINO IDE了,将我们的下面的代码复制到IDE中,注意:将刚刚打开的IDE中的所有内容都删除掉!然后选好串口和板型(UNO),点击下载就OK了。 接着打开串口,在串口中输入你0-255中间的任意数字,即可控制电机的转速。电机的正反转是每隔5秒钟自动转换的,当然你也可以把蓝色线拔下来自己想要它反转就短接UNO的GND。让蓝色线悬空就是正转。

注意:255为停止转动,0为最大转速

标准版

#define PIN_PWN 11
#define PIN_DIRECION  10
#define PIN_TRIGGER 9

unsigned int i = 0;

void setup()
{
  pinMode(PIN_PWN, OUTPUT);
  pinMode(PIN_DIRECION, OUTPUT);
  pinMode(PIN_TRIGGER, INPUT_PULLUP);
  Serial.begin(115200);
}

void loop()
{
  //Switch Direction every 4 second
  digitalWrite(PIN_DIRECION, (millis() >> 12) % 2);

  //Recive and change speed
  if (Serial.available())
  {
    analogWrite(PIN_PWN, Serial.parseInt());
  }

  //Measure speed and send
  for (int j = 0; j < 8; j++)
  {
    i += pulseIn(PIN_TRIGGER, HIGH, 10000); //SIGNAL OUTPUT PIN 9 with  white line,cycle = 2*i,1s = 1000000us,Signal cycle pulse number:27*2
  }
  i = i >> 3;
  Serial.print(111111 / i); //speed   r/min  (60*1000000/(45*6*2*i))
  Serial.println("\tr/min");
}

低转速优化版

#define PIN_PWN 11
#define PIN_DIRECION  10
#define PIN_TRIGGER 9

unsigned long totalPulsein = 0;
byte countPulsein = 0;

void setup()
{
  pinMode(PIN_PWN, OUTPUT);
  pinMode(PIN_DIRECION, OUTPUT);
  pinMode(PIN_TRIGGER, INPUT_PULLUP);
  Serial.begin(115200);
}

void loop()
{
  //Switch Direction every 4 second
  digitalWrite(PIN_DIRECION, (millis() >> 12) % 2);

  //Recive and change speed
  if (Serial.available())
  {
    analogWrite(PIN_PWN, Serial.parseInt());
  }

  //Measure speed and send
  countPulsein = 0, totalPulsein = 0;
  for (int temp, j = 0; j < 64; j++)
  {
    temp = pulseIn(PIN_TRIGGER, HIGH, 15000);//SIGNAL OUTPUT PIN 9 with  white line,cycle = 2*i,1s = 1000000us,Signal cycle pulse number:27*2
    if (temp)
      totalPulsein += temp, countPulsein++;
  }
  totalPulsein = totalPulsein / countPulsein;
  Serial.print(111111 / totalPulsein); //speed   r/min  (60*1000000/(45*6*2*i))
  Serial.println("\tr/min");
}

FIT0441-serial.png

注意:255为最停止转动,0为最大转速

疑难解答

Q:在低转速下转速显示不准确 A:低转速下转速测量线会受干扰产生许多0μs的信号干扰测速结果。 Q:串口输出调速值无法改变电机转速 A:1.在串口右下角选择“没有结束符”模式;2.不要输入超过0-255范围的数字。

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖!

更多

shopping_car.png DFRobot商城购买链接