雷竞技注册
项目

使用Arduino控制电机

2015年6月3日,通过蒂姆血性小子

使用Arduino控制电动机相对容易。除了简单地旋转电机外,如果电机有旋转式编码器,可以控制电动机轴的位置。

使用Arduino控制电动机相对容易。除了简单地旋转电机外,如果电机有旋转式编码器,可以控制电动机轴的位置。

法拉第定律指出:

线圈的磁环境的任何变化都会在线圈中引起感应电压(电动势)。

这解释了发电机是如何产生电压的。这是机械能到电能的转换。电机与发电机反向运行;它们把电能转化为机械能。在电动机中,电流被送入电枢绕组,产生磁场,磁场与定子中的永磁体产生的磁场相互作用。两个磁场之间的相互作用使电枢旋转。

有许多不同类型的电机,包括:

  • 直流(DC)电机(我将在本教程中使用的)。
  • 交流(AC)电机。
  • 无刷直流(BLDC)电机。
  • 无刷交流(BLAC)电机。
旋转编码器是一种将轴或轴的角度位置或运动转换为模拟或数字代码的装置。旋转编码器有两种类型:
  • 增量编码器。增量式旋转编码器仅在电机旋转时输出脉冲。为了使用增量编码器确定轴的位置,必须知道起始位置并使用外部电路来计算输出脉冲的数量。
  • 绝对编码器。绝对旋转编码器输出与旋转角度相对应的数字代码。不需要计数脉冲来知道电机轴的位置。你只需要读取编码器的数字输出。
在这个项目中,我们使用的是一个增量旋转编码器。下图显示了一个典型的旋转编码器。


磁编码器在电机中使用本教程

h桥是一种电子电路,使微控制器,如Arduino,能够控制电机的运动。微控制器不能直接连接到直流电机,因为微控制器不能提供电机所需的大电流。h桥包含电机控制所需的大电流开关。这些开关由Arduino的信号控制。

h型电桥允许电机向前或向后移动。方向由Arduino的控制信号序列决定。

电机转速是通过设定控制信号的占空比来确定的。这种类型的速度控制被称为脉冲宽度调制。当占空比100%时,电机将全速运行。然而,当占空比为0%时,电机将停止并不再移动。

在本教程中,我们设计并构建了一个h桥,它使用以下组件:

  • TIP 142和TIP 147晶体管
  • 二极管
  • 绿色连接器
  • 光耦合器

    h型桥的简化图如下:


      本教程使用预制h桥模块。你可以在网上找到很多h桥电路的原理图,但如果你不想建立自己的,你可以使用L298 IC。

      需要设备

      以下设备用于此实验
      • 脂电池11.1 v
      • Arduino Atmega 2560.
      • h型桥(自制式或IC L298)
      • 电机和编码器
      • 跳投(根据需要)
      • 绿色连接器(又名l型连接器)
      • 6针连接器(专用于电机)
      • 车轮(电机轴可视运动可选)


      步骤:

      1.收集所需的所有零件:



      电动机
      电动机

      特写图片显示电机编码器引脚

      Arduino
      Arduino Mega 2560.

      用于电动机的6针连接器
      用于电动机的6针连接器

      绿色连接器
      绿色连接器

      电池
      电池

      h桥
      h桥

      跳投
      跳投

      3pin连接器h桥
      3针连接器h桥

      轮(可选)
      轮(可选)

      2.跳线连接到电池上,用电池给h桥上电:



      3.将3引脚连接器连接到H-Bridge模块,然后将H-Bridge模块连接到此连接之后的Arduino:

      • Arduino 13 - > PWM
      • Arduino 12——>转发
      • Arduino 11 - >反向


      5.现在连接6针连接器到电机,然后连接电机到h桥模块。


      不要忘记将电机功率引脚连接到H桥电源引脚。标记为Hall VCC和Hall GND的电机编码器引脚应连接到Arduino 5V和GND引脚。最后,将电机编码器输出通道CH.A连接到Arduino引脚编号21.连接如下所示:


      arduino引脚连接仔细看看:


      6.现在将Arduino连接到您的电脑或笔记本电脑进行编程:


      手动检查编码器的代码

      int encoderValue = 0;空白计数(无效);//编码计数增加的值的编码器蜱void setup() {Serial.begin(9600);输入pinMode(21日);attachInterrupt(2计数下降);encoderValue = 0;} void loop() {Serial.print("Starting\n");//在屏幕上打印编码器值打印(“编码器值= ");以encoderValue);} void count() {encoderValue++; }

      Control_Motor.zip

      运行电机的代码,直到编码器特定计数

      //定义代码int pwm = 13的引脚名称;int forward = 12;int反转= 11;int encoderValue = 0;空白计数(无效);void setup(){serial.begin(9600);输入pinMode(21日);attachInterrupt(2计数下降);encoderValue = 0;void循环(){digitalwrite(pwm,1); digitalWrite(forward,0); analogWrite(reverse,140); Serial.print("Starting\n"); delay(3000); Serial.print("Encoder Value="); Serial.println(encoderValue); while(1) { // to print encoder value on the screen Serial.print("Encoder Value="); Serial.println(encoderValue); //Setting value of encoder //defining the while statement condition if(encoderValue<5000) break; // loop will break as soon as encoder value reaches 5000 or above digitalWrite(forward,1); digitalWrite(reverse,0); analogWrite(pwm,150); } digitalWrite(forward,1); digitalWrite(reverse,1); analogWrite(pwm,255); } void count() { encoderValue++; }

      motor_encoder_codes.zip.zip.

      结论

      编码器是可以连接到任何旋转或直线的设备跟踪设备的运动和方向。这里我们使用了一个绝对旋转编码器来控制电机的速度和轴的位置。


      视频

      为自己提供这个项目!BOM。

      19评论
      • PUSSYCATlovesGURGEL 2016年3月11日

        好了所有的朋友!我们现在需要的是:arduino控制一个三相交流电机,大功率10马力交流电机,96Volts,这是一个EV项目,电池组是8pcs x 12Volts。非常感谢!

        喜欢的。 回复
      • U
        Uwhilpe 2016年11月1日

        好文章!

        喜欢的。 回复
      • 彼得五 2016年11月19日

        我看不见旋转编码器插在哪里了。你能把这个信息加到这篇文章里吗?

        喜欢的。 回复