搜索代码

用Arduino修改一个20A直流PWM电机速度控制器

用Arduino修改一个20A直流PWM电机速度控制器

在本教程中,我们将学习如何修改一个20A直流PWM电机速度控制器,使其与Arduino无缝配合。这一修改允许通过电位器或Arduino的直接命令对电机进行精确的速度控制。最终结果是一个更具多功能性的电机控制系统,可以集成到各种项目中。

20A直流PWM电机速度控制器:左侧前视图
20A DC PWM 电机速度控制器:左侧前视图

对于这个项目,我们将把PWM控制器连接到Arduino,并使用代码根据用户输入来管理电机速度。这种设置在需要可变速度控制的应用中,如机器人技术或自动化系统,可能是有利的。为了进一步清晰,您可以参考本教程附带的视频(视频在:00)。

硬件解析

该项目的主要组件包括Arduino开发板、20A直流PWM电机速度控制器和一个电位器。Arduino作为系统的核心,向电机控制器发送PWM信号以调整电机速度。电机速度控制器本身利用555定时器集成电路生成PWM信号,这些信号控制调节电机功率的MOSFET的栅极。

20A直流PWM电机速度控制器:尺寸
20A DC PWM电机速度控制器:尺寸

电位器作为输入设备,使用户能够手动设置所需的速度。通过旋转电位器,电阻发生变化,从而向Arduino发送相应的电压。Arduino读取该电压,并相应地调整发送给电机控制器的PWM信号。

数据表详细信息

制造商 未知
零件号码 20A直流PWM电机调速器
逻辑/IO 电压 5伏
供电电压 10-60 V
输出电流(每通道) 20 安培
每个通道的峰值电流 40 A
PWM频率指导 通常为 1 kHz
输入逻辑阈值 0.2 V(低),2.0 V(高)
电压降 / RDS(on)/ 饱和度 0.1 伏
热限制 最高可达85°C
包裹 标准PCB
笔记 / 变体 多种型号可供选择

  • 确保适当的散热以用于高电流应用。
  • 在给系统供电之前,检查接线是否极性正确。
  • 在电源端子之间使用解耦电容。
  • 保持PWM频率在1 kHz左右以获得最佳性能。
  • 注意输入电压限制(10-60 V)。
20A 直流 PWM 电机速度控制器:电位器(可调电阻)
20A 直流 PWM 电机速度控制器:电位器(可变电阻器)

接线说明

将20A DC PWM电动机速度控制器连接到Arduino,首先连接电源。电源的正极应连接到电动机控制器的V+输入,负极连接到控制器的接地(GND)。接下来,将电动机连接到控制器的输出端,确保极性正确以实现所需的旋转。

对于PWM信号,识别控制器上的PWM输出引脚,我们将其连接到Arduino上的指定PWM引脚(在这种情况下,引脚5). 此外,将Arduino的接地连接到电机控制器的接地,以确保一个共同的参考。最后,如果使用一个可变电阻,将一端连接到Arduino的5V引脚,中间引脚连接到一个模拟引脚(如A0),最后一个引脚接地。

代码示例与教程

代码首先定义了PWM输出引脚和用于电位计的控制引脚。setup()此函数将 PWM 引脚初始化为输出,并开始串行通信以进行调试。

#define pwmPin 5
#define controlPin A0

void setup() {
  pinMode(pwmPin, OUTPUT);
  Serial.begin(9600);
}

loop()在这个函数中,我们从电位器读取值,并将其映射到适合电机控制器的PWM范围。然后将该值写入PWM引脚,从而控制电机的速度。

void loop() {
  int potValue = analogRead(controlPin);
  int pwm = map(potValue, 0, 1023, 0, 255);
  analogWrite(pwmPin, pwm);
  Serial.print("PWM:");
  Serial.println(pwm);
  delay(500);
}

最后,定义了函数将PWM值转换为百分比,从而根据用户输入更容易理解电机速度。完整代码在文章下方加载(视频在00:00)。

演示 / 期待什么

一旦所有的连接完成并且代码上传,您可以期待电机会对电位器的位置做出响应。旋转电位器将根据Arduino发送的PWM信号增加或减少电机的速度。确保电源在所需的电压范围内,并且电机能够承受施加的电压。

常见的陷阱包括接线错误,这可能导致电机旋转方向反转或无法启动。务必仔细检查连接,并确保Arduino和电机控制器的接地相连(视频时间:04:30)。

视频时间戳

  • 00:00 开始
  • 00:40 介绍
  • 04:07 准备接线(修改它)
  • 06:55 布线说明
  • 08:40 代码解释
  • 13:15 示范

图像

20A DC PWM Motor Speed Controller: Main
20A DC PWM Motor Speed Controller: main
20A DC PWM Motor Speed Controller: Top View
20A DC PWM Motor Speed Controller: top view
20A DC PWM Motor Speed Controller: Dimensions
20A DC PWM Motor Speed Controller: Dimensions
20A DC PWM Motor Speed Controller: Potentiometer (variable resistor)
20A DC PWM Motor Speed Controller: Potentiometer (variable resistor)
20A DC PWM Motor Speed Controller: Front View
20A DC PWM Motor Speed Controller: Front view
20A DC PWM Motor Speed Controller: Right-side front view
20A DC PWM Motor Speed Controller: Right Side front view
20A DC PWM Motor Speed Controller: Left-side front view
20A DC PWM Motor Speed Controller: Left Side front view
20A DC PWM Motor Speed Controller: Bottom PCB view
20A DC PWM Motor Speed Controller:Bottom PCB view
20A DC PWM Motor Speed Controller: Positive line common
20A DC PWM Motor Speed Controller:Positive line common
222-Hack: Control a 20A DC Motor with an Arduino using 20A DC 10-60V PWM
语言: C++
/*
 * Modify 80NF70 PWM 20A Module to control with Arduino
 * Modify the "DC 10-60V 20A Motor Speed Control Regulator PWM Motor Speed Controller Switch"
 * 
 * 
 * Written by Ahmad Shamshiri
 * on Saturday, July 27, 2019 at 18:23
 * in Ajax, Ontario, Canada
 * www.Robojax.com
 * Watch the video instruction: https://youtu.be/ipFxYQkB5uw
 * See the module on eBay. Get this module from eBay:
 https://www.ebay.com/sch/i.html?&_nkw=20A+DC10-60V+PWM&_sacat=0
 * or search for "DC 10-60V 20A Motor Speed Control Regulator PWM Motor Speed Controller"
 * Watch full review of this module: https://youtu.be/kgs_FILyppk
 */
 
#define pwmPin 5
#define controlPin A0

void setup() {
  pinMode(pwmPin,OUTPUT);
  Serial.begin(9600);

}

void loop() {
  int potValue = analogRead(controlPin);

  int pwm =map(potValue, 0,1023, 0, 255);

    //pwm = toPWM(0);

  analogWrite(pwmPin,pwm);
  Serial.print("PWM:");  
  Serial.print(pwm);
  Serial.print(" it is:");  
  Serial.print(pwmToPercent(pwm));  
  Serial.println("%");    
  
  delay(500);
}

/*
 * @brief converts % value from 0 to 100% to 0-255
 * @param v is integer value representing % from 0-100
 * @return will return value from 0 to 255
 * Written by Ahmad Shamshiri for robojax.com
 * on July 30, 2019 in Ajax, Ontario, Canada
 */
int toPWM(int v){
  return map(v, 0,100,0,255);
}//

/*
 * @brief converts Arduino PWM value which is 0 to 255 to 0-100%
 * @param p is integer value representing  from 0-255
 * @return will return value from 0 to 255
 * Written by Ahmad Shamshiri for robojax.com
 * on July 30, 2019 in Ajax, Ontario, Canada
 */
int pwmToPercent(int p)
{
 return map(p, 0,255,0,100); 
}

文件📁

没有可用的文件。