在这个项目中,我们讨论如何控制电机转速使用Arduino PWM电路,以及如何使用Arduino通过一对按钮开关实现直流电机的正反向或方向控制。任何高达30安培的大电流电机都可以使用这个设置来控制
通过Ankit Negi
电机是电气和电子学中非常重要的部件,因为它们在许多领域被用作执行器。
我们需要电机的小型应用,如机器人,以及在重型电机使用的领域(工业等)。
现在,用于小型应用的电机可以很容易地控制,因为它们不需要太多的电流(小于2安培)。
利用arduino等微控制器可以很容易地控制这些电机电机驱动ic是L298或L293D。
但是用于重型目的(大于10安培)的电机不能被控制使用这些集成电路的因为它们可以提供有限的电流(最大2安培)。那么这些马达是如何控制的呢?
答案很简单:使用继电器,起开关作用,即用小电流开关大电流。这样可以实现两件事:
1.运行我们的大电流马达本身。
2.隔离电路,从而防止任何冲击。
现在任何一个微控制器都可以用来切换这些继电器。我们将使用arduino UNO。
本项目所需组件:
1.ARDUINO UNO:给继电器一次侧输入逻辑。
2.SPDT继电器-2:双向旋转需要两个继电器。触点必须额定能够处理大电流电机规格
4.电池(12v):为电机供电。
5.两个pushbutton:给arduino输入(即当按下和未按下时)
6.两个10K电阻:用于解吸(解释如下)
7.连接线:用于连接。
示意图:
如图所示进行连接。
1.将继电器的常开端子与电池的正极连接,常闭端子与电池的负极连接。
2.在每个继电器的其余端子(三个)之间连接电机。
3.继电器一次侧的一端连接到代码中规定的arduino输出引脚上,另一端连接到地上。
4.将两个按钮的一端连接到arduino的5v引脚,另一端连接到代码中规定的输入引脚。
4.**不要忘记连接电阻,因为它们对电路的正常运行非常重要,如下所述:
为什么要连接电阻?
你可能会发现Arduino的输入引脚没有任何连接,但这并不意味着当指示的开关打开时,这些引脚可能是逻辑零
相反,它意味着当开关打开时,arduino可以在逻辑0和逻辑1之间取任何随机值,这一点都不好(这称为跳跃)。
所以我们这里想要的是,当没有连接到输入引脚,即按钮是打开的,arduino从引脚接受0输入。
为了实现这一点,引脚通过电阻器直接连接到按钮前的接地。如果它直接连接到地没有电阻,有很好的机会,它将烧坏,因为引脚将短路到地和巨大的电流将流动。为了防止这种情况,在两者之间连接了一个电阻器。
这个电阻被称为下拉电阻,因为它将引脚上的逻辑拉到0。这个过程被称为减压。
代码:
将此代码刻录到你的arduino中。
//初始化变量
int y;
int z;
int w;
无效的设置(){
pinMode(6,OUTPUT);//初始化pin6作为输出到RL1
//初始化引脚9作为输出到RL2
pinMode(3,INPUT);//初始化pin3作为输入
//初始化引脚4作为输入
//初始化PWM引脚8作为输出到mosfet的门
pinMode(A0,INPUT);//初始化引脚A0作为壶的输入。
Serial.begin (9600);
}
无效循环(){
z=analogRead(A0);//从电位器中读取以电压表示的值
W = map(z,0,1023,0,255);//映射这些值从0到255
analogWrite(10,w);//将映射值写入10thpin作为输出
延迟(1);// mosfet的时间周期
analogWrite (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日高);}
if (x = = 1 & & y = = 1) {digitalWrite(6、低);/ / hault马达
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从pin4获取1个输入,但从pin3获取输入0。在这个条件的代码中指定引脚6应该在逻辑0(LOW)而引脚9在逻辑1(HIGH):
if (x = = 1 & & y = = 0) {digitalWrite(6、低);
digitalWrite(9日高);}
由于输入电压继电器# 2高,抛出这个继电器的开关常开状态而输入电压继电器# 1低,这种继电器的开关保持常闭状态导致12 v和0 v分别在电动机终端,引起了另一个方向的旋转电机。
D.两个按钮同时按下时:
在这种情况下,arduino从两个引脚都取1个输入。正如代码中规定的,在这种情况下,两个输出引脚都给出0逻辑(LOW):
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驱动级操作这些大功率继电器,如下修改图所示:
无刷直流控制器采用单片机
日安,斯瓦塔姆先生。
是否有可能在与本项目工作原理相同的磁频环境下开发一种用于研究的新电路。
即……
向大家致以热烈的问候。
作为一个非常新的磁频能研究人员,我很少有开发电路板的经验,我需要Arduino论坛的知者的帮助。
有人可以帮助开发一个无刷直流PWM无传感器电机控制器,我可以手动改变所有输入为研究目的。
我需要的是一个PCBoard组合的电机电源驱动器和频率驱动器与所有保护,即。BEMF,电流和电路板保护所需要的东西。
还有什么将是一个赢家与液晶显示器包括所有的输入:
1.V - A -频率- RPM -摄氏温度
输出:
1.V - A -频率-摄氏温度
输入电源200 - 240VAC整流到直流PWM电源驱动器和电压从0V - 240VDC可变的板配备(LCD)和旋钮可在12VDC的间隔和至少10A的电路与保护内置。
频率板结合到电源驱动器,占空比和频率是独立可变的,在1% - 99%的设置中不会相互影响。将驱动频率转换成IGBT的功率到驱动线圈中。
频率设置为1Hz - 16Mhz, 10Hz可互换设置
的频率范围。(Mega 2560 & Uno Ref 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文件制造。
来自可爱的南非的热烈问候和祝福。
哥特。
感谢Messenger的询问,我将把这个问题转给我们的Arduino专家Mr. GR,如果可能的话,我们可以尝试在新的文章中表达这个想法。
非常感谢,Swag。
最欣赏。
不客气!
很棒的项目,赞。
我可以把Arduino IC拆下来,编程后再焊接在面包板上吗?
谢谢,很高兴你喜欢!
是的,你可以把它单独焊接在面包板上
//www.addme-blog.com/make-arduino-breadboard/
电路似乎违反了继电器的第一条规则:*总是把一个二极管并联线圈,从阴极到正极。如果不这样做,就有可能损坏继电器驱动器。
谢谢你指出来,我已经更正了图表。
你将不得不使用高功率mosfet来推导电机线圈在一个顺序的方式。每个mosfet将由单片机一个一个触发,使转子旋转。
你可以使用相同的代码来触发它:
digitalWrite(销、高)
延迟(线圈应以多快的速度通电)
digitalWrite(另一个引脚,高),但要确保当一个引脚高时,其他所有引脚必须低
用这种方法你就可以驱动电机了。
我希望这对你们有所帮助
亲爱的Ankit,你能建议一个基于微控制器的12/24伏4o英寸吊扇的无刷直流电机驱动电路吗?
问候:
克里希纳Kaushik