在这个项目中,我们讨论如何控制电机转速使用Arduino PWM电路,以及如何使用Arduino通过一对按钮开关实现直流电机的正反向或方向控制。任何高达30安培的大电流电机都可以使用这个设置来控制
通过安基特内基
电机是电气和电子学中非常重要的部件,因为它们在许多领域被用作执行器。
我们需要电机的小型应用,如机器人,以及在重型电机使用的领域(工业等)。
现在,用于小型应用的电机可以很容易地控制,因为它们不需要太多的电流(小于2安培)。
这些电机可以很容易地控制使用微控制器,如arduino与电机驱动器ic,如L298或L293D.
但是用于重型目的(大于10安培)的电机不能被控制使用这些集成电路的由于它们可以提供有限的电流(最大2安培)。那么这些电机是如何控制的呢?
答案很简单:使用继电器,起开关作用,即用小电流开关大电流。这样可以实现两件事:
1.运行我们的大电流马达本身。
2.隔离电路,从而防止任何冲击。
现在,任何微控制器都可以用来切换这些继电器。我们将在这里使用arduino UNO。
本项目所需组件:
1.ARDUINO UNO:给继电器一次侧输入逻辑。
2.SPDT继电器-2:双向旋转需要两个继电器。触点的额定值必须能够处理大电流电机规格
4.电池(12v):为电机供电。
5.两个按钮:向arduino提供输入(即按下和未按下时)
6.两个10K电阻:用于解吸(解释如下)
7.连接线:用于进行连接。
示意图:
如图所示进行连接。
1.将两个继电器的常开端子连接到蓄电池正极,常闭端子连接到蓄电池负极。
2.在每个继电器的其余端子(三个)之间连接电机。
3.按照规范规定,将继电器一次侧的一个端子连接至arduino的输出引脚,另一个端子连接至接地。
4.将两个按钮的一端连接到arduino的5v引脚,另一端连接到代码中规定的输入引脚。
4.**不要忘记连接电阻器,因为它们对于该电路的正常工作非常重要,如下所述:
为什么要连接电阻?
您可能会发现Arduino的输入引脚上根本没有任何连接,但这并不意味着当指示的开关打开时,这些引脚可能是逻辑零
相反,这意味着当开关打开时,arduino可以在逻辑0和逻辑1之间取任意随机值,这一点都不好(这称为反弹)。
所以我们想要的是,当没有任何东西连接到输入引脚,即按钮打开时,arduino从引脚获取0输入。
为了实现这一点,引脚在按钮之前通过电阻器直接接地。如果引脚在没有电阻器的情况下直接接地,则极有可能因引脚对地短路而烧坏,并且会有大量电流流过。为了防止这种情况,在引脚之间连接了电阻器。
这个电阻被称为下拉电阻,因为它将引脚上的逻辑拉到0。这个过程被称为减压。
代码:
将此代码刻录到arduino中。
int x;//初始化变量
int y;
int z;
int w;
无效的设置(){
pinMode(6,OUTPUT);//初始化pin6作为输出到RL1
//初始化引脚9作为输出到RL2
pinMode(3,输入)//初始化针脚3作为输入
//初始化引脚4作为输入
//初始化PWM引脚8作为输出到mosfet的门
引脚模式(A0,输入);//初始化引脚A0作为pot的输入。
Serial.begin (9600);
}
无效循环(){
z=模拟读数(A0);//从电位计读取电压值
w=地图(z,01023,0255);//将这些值从0映射到255
analogWrite(10,w);//将映射值写入10thpin作为输出
延迟(1);// mosfet的时间周期
模拟写入(10,w);
延迟(1);//mosfet的关闭时间周期
Serial.println(z);//将值从pot打印到串行监视器
println(w);//将映射值打印到串行监视器
x = digitalRead (3);
y = digitalRead (4);
if (x = = 0 & & y = = 0) {digitalWrite(6、低);/ / hault马达
digitalWrite(9、低);}
if(x==1 && y==0){digitalWrite(6,HIGH);//电机顺时针旋转
digitalWrite(9、低);}
if(x==0 && y==1){digitalWrite(6,LOW);//电机逆时针旋转
digitalWrite(9日高);}
如果(x==1&&y==1){digitalWrite(6,低);//牵引电机
digitalWrite(9、低);
}
}
工作(理解代码):
•方向控制:
A.当两个按钮都没有按下时:
在这种情况下,arduino从两个引脚输入0。正如代码中规定的,在这种情况下,两个输出引脚都给出0逻辑(LOW):
if (x = = 0 & & y = = 0) {digitalWrite(6、低);
digitalWrite(9、低);}
由于双继电器的一次端输入电压为零,双继电器的二次端保持常闭状态。因此,电机两端电压均为零,不产生旋转。
B.当按下按钮X而没有按下Y时:
在这种情况下,arduino从pin4取0个输入,但从pin3取input1。在这个条件的代码中指定引脚6应该在逻辑1(HIGH)而引脚9在逻辑0(LOW):
if (x = = 1 & & y = = 0) {digitalWrite(6、高);
digitalWrite(9、低);}
由于输入电压继电器# 1高,抛出这个继电器的开关常开状态而输入电压继电器2很低,这种继电器的开关保持常闭状态导致12 v和0 v分别在电动机终端,导致一个方向旋转电机。
C.按下按钮Y而没有按下按钮X时:
在这种情况下,arduino从引脚4获取1个输入,但从引脚3获取0个输入。按照此情况下代码中的规定,引脚6应位于逻辑0(低),而引脚9位于逻辑1(高):
if (x = = 1 & & y = = 0) {digitalWrite(6、低);
digitalWrite(9日高);}
由于输入电压继电器# 2高,抛出这个继电器的开关常开状态而输入电压继电器# 1低,这种继电器的开关保持常闭状态导致12 v和0 v分别在电动机终端,引起了另一个方向的旋转电机。
D.按下两个按钮时:
在这种情况下,arduino从两个引脚获得1个输入。按照该情况下代码中的规定,两个输出引脚都提供0逻辑(低):
if (x = = 0 & & y = = 0) {digitalWrite(6、低);
digitalWrite(9、低);}
由于双继电器的一次端输入电压为零,双继电器的二次端保持常闭状态。因此,在电机的两端都有零伏特,导致不旋转。
•速度控制:
让我们说电位器在这样的位置,当它给0伏作为输入到arduino的A0管脚。因此,arduino将这个值映射为0,从而给出0作为引脚#10上的输出PWM,即,
analogWrite(10,0);//将映射值写入第10个引脚作为输出
因此,场效应晶体管的栅极电流为0,因此它保持关断,电机处于关断位置。
然而,随着锅旋转和壶的价值是不同的,销A0的电压也不同,和这个值映射在销# 10比例增加PWM宽度,导致更多的电流通过电动机和mosfet流失,进而使电动机获得更多的速度比例,同样发生亦然。
因此,从上面的讨论中,我们可以看到Arduino是如何用来控制大电流直流电机的速度和方向(反向前进)的,只要简单地调整指定的壶和通过几个按钮。
更新:对于大电流电机,请使用12V/30安培继电器和BJT驱动级来操作这些大功率继电器,如下图所示:
克里希纳m . Kaushik说
亲爱的Ankit,你能建议一个基于微控制器的12/24伏4o英寸吊扇的无刷直流电机驱动电路吗?
问候:
克里希纳Kaushik
ankit negi说
你将不得不使用高功率mosfet来推导电机线圈在一个顺序的方式。每个mosfet将由单片机一个一个触发,使转子旋转。
你可以使用相同的代码来触发它:
digitalWrite(销、高)
延迟(线圈应以多快的速度通电)
digitalWrite(另一个引脚,高),但要确保当一个引脚高时,其他所有引脚必须低
用这种方法你就可以驱动电机了。
我希望这对你们有所帮助
沃森家乡说
电路似乎违反了继电器的第一条规则:*总是把一个二极管并联线圈,从阴极到正极。如果不这样做,就有可能损坏继电器驱动器。
斯瓦加坦说
谢谢你指出,我已经更正了图表。
表示“四”说
很棒的项目,赞。
我可以在编程后移除Arduino IC并将其焊接在试验板上吗?
赃物说
谢谢,很高兴你喜欢!
是的,你可以把它单独焊接在面包板上
//www.addme-blog.com/make-arduino-breadboard/
信使说
无刷直流控制器采用单片机
日安,斯瓦塔姆先生。
是否有可能在与本项目工作原理相同的磁频环境下开发一种用于研究的新电路。
即……
向大家致以热烈的问候。
作为一个非常新的磁频能研究人员,我很少有开发电路板的经验,我需要Arduino论坛的知者的帮助。
有人可以帮助开发一个无刷直流PWM无传感器电机控制器,我可以手动改变所有输入为研究目的。
我需要的是一个PCB板组合的电机功率驱动器和频率驱动器与所有的保护,即反电动势,电流和什么是需要保护的董事会。
还有什么将是一个赢家与液晶显示器包括所有的输入:
1.V - A -频率- RPM -摄氏温度
输出:
1.V–A–频率–塞尔修斯的热量
输入电源200 - 240VAC整流到直流PWM电源驱动器和电压从0V - 240VDC可变的板配备(LCD)和旋钮可在12VDC的间隔和至少10A的电路与保护内置。
频率板结合到电源驱动器,占空比和频率是独立可变的,在1% - 99%的设置中不会相互影响。将驱动频率转换成IGBT的功率到驱动线圈中。
频率设置为1Hz - 16Mhz, 10Hz可互换设置
频率范围。(Mega 2560和Uno参考3)。。也许编码将控制手动设置…。由于缺乏知识,我不敢肯定。
该桥高功率高扭矩电源驱动器必须由Arduino Mega 2560和/或Uno Ref 3控制,Power Board上的JUMPER设置可以将单板输出设置从单相输出更改为三相输出,反之亦然。
我认为唯一的区别是Arduino电路板之间的编码和引脚关系。
最后但并非最不重要的是,所有的连接图的组合电源驱动和Freg驱动板到Arduino Mega 2560和/或Uno ref 3
附加链接与这些驱动器和电路的更多细节之一。
无刷直流无传感器电机控制器和频率驱动。
https://simple-circuit.com/pic18f4550-esc-sensorless-bldc-motor-controller/
希望你的人可以支持和帮助我的这个研究项目,通过开发一个新的电路板原理图,我可能会收到一个GERBER文件,用于建造新的电路板。
期待收到任何愿意提供帮助的人的来信。
我将感激地接受电路图在Gerber文件制造。
来自可爱的南非的热烈问候和祝福。
格特。
赃物说
感谢信使的询问,我将把这个问题转发给我们的Arduino专家GR先生,如果可能的话,我们可以尝试在一篇新文章中提出这个想法。
信使说
非常感谢,Swag。
最欣赏。
赃物说
不客气!