手把手教你智能硬件开发(六)直流马达
来源:互联网 发布:highcharts 3d.js 编辑:程序博客网 时间:2024/04/27 20:10
第6节 直流马达
马达是我们经常使用到的电动装置,它可以将电能转化成动能,驱动其他东西的运动。听起来很抽象,举几个例子吧。
我们小时候玩的四驱车,带动轮子转动的那个小装置就是马达;夏天让风扇旋转带给我们凉意,也是马达的功劳。
根据使用电源的不同,可以将马达分成直流马达和交流马达。我们做智能硬件使用的基本都是直流马达,通过马达来驱动外接设备运动。
6.1 工作原理
将电能转化成动能的物理原理,我们在中学已经学过,这里利用了两个原理:电磁感应和磁铁的同性相斥异性相吸。
- 将一根磁棒放在金属罩中间,两端悬上一个金属柱子,金属柱子上面有线圈;
- 当线圈通过电流的时候,就能产生磁场,磁棒根据极性改变位置;
- 改变电流方向,线圈磁场方向发生调换,磁棒再次根据极性改变位置;
- 如此往复,磁棒就旋转了起来。
一个马达的外形大致如此,
马达加上一些结构,与轮胎结合起来就成了轮子
它有两个接线的地方,一处接正极,另一处就接负极,
- 在不超过极限电压的情况下,对马达施加的电压越大,马达就转动的越快;
- 调转正负极的连接顺序,马达的旋转方向也发生调转;
6.2 连接方式
马达的正负极不能直接连接到Arduino开发板的引脚上,必须使用一个转换电路。否则马达在转动的过程中可能会产生强大的电流,击穿开发板上的元器件。
为此,可以使用专门的马达扩展板,来连接使用马达,
也可以使用集成了转换电路的马达模块,例如风扇马达模块,
在此我们选用集成了转换电路的风扇马达模块来讲解。
该模块有4个引脚,
因为要调整直流马达的转动速度,INA
与INB
最好接到具有PWM
功能的接口上,通过设置该引脚的级数数,来调节马达的转速。这里,我们将INA
连接到D9
,INB
连接到D8
,
6.3 代码设计
首先要初始化INA
与INB
连接的接口,让Arduino
开发板拥有向它们输出的能力,
//INA使用具有PWM功能的D9引脚int INA = 9;//INB使用具有PWM功能的D8引脚int INB = 8;void setup() { //设置引脚为输出 pinMode(INA, OUTPUT); pinMode(INB, OUTPUT);}
将INA
引脚设置成低电平LOW,改变INB
引脚的值,来达到控制马达转速的效果,
void setup() { //设置引脚为输出 pinMode(INA, OUTPUT); pinMode(INB, OUTPUT); digitalWrite(INA, LOW);}void loop() { //从0级到100级 for(int level = 0 ; level < 100+1; level++) { //调整INB上的电压级数,达到改变风扇转速的效果 analogWrite(INB, level); delay(100); }}
这里将调整的级数,调整在了0~100
。理论上可以调整的级数应该是0~255
级。但是由于马达电流负载的原因,设置到高级数时,例如245级
,会让开发板过载。因此可以把最大级数设置的稍微小一点,例如230级
,
int INA = 9;int INB = 8;int START_LEVEL = 0;int END_LEVEL = 230;void setup() { pinMode(INA, OUTPUT); pinMode(INB, OUTPUT); digitalWrite(INA, LOW);}void loop() { //从9级慢慢加速到230级 for(int level = START_LEVEL ; level < END_LEVEL+1; level++) { analogWrite(INB, level); delay(100); } //从230级慢慢减速到0级 for(int level = END_LEVEL; level > START_LEVEL ; level--) { analogWrite(INB, level); delay(100); }}
6.4 结果观察
马达开始缓慢的旋转,越转越快;达到最快转速时,又开始减速,直到停止;整个过程周而复始。
6.5 马达的反转
如果想修改马达旋转的方向,可以将INB
设置为低电平LOW,改变INA
引脚的值,
int INA = 9;int INB = 8;int START_LEVEL = 0;int END_LEVEL = 230;void setup() { pinMode(INA, OUTPUT); pinMode(INB, OUTPUT);}void loop() { //朝着一个方向旋转,先加速,再减速 //INA设置为LOW digitalWrite(INA, LOW); for(int level = START_LEVEL ; level < END_LEVEL+1; level++) { //改写INB的级数 analogWrite(INB, level); delay(100); } for(int level = END_LEVEL; level > START_LEVEL ; level--) { //改写INB的级数 analogWrite(INB, level); delay(100); } //朝着另一个方向旋转,先加速,再减速 //INB设置为LOW digitalWrite(INB, LOW); for(int level = START_LEVEL ; level < END_LEVEL+1; level++) { //改写INA的级数 analogWrite(INA, level); delay(100); } for(int level = END_LEVEL; level > START_LEVEL ; level--) { //改写INA的级数 analogWrite(INA, level); delay(100); }}
/*******************************************************************/
本系列课程使用到的Arduino开发板、扩展板以及其他相关的传感器,各位可以根据我们文章中介绍的硬件在淘宝网选购。
您也可以在我们的网店跟我学Arduino编程中购买,这些相关硬件都由我们为您把关购买,为大家节省选择的精力与时间。同时也感谢大家对我们这些码农的支持。
最后再次感谢各位读者对安豆
的支持,谢谢:)
/*******************************************************************/
- 手把手教你智能硬件开发(六)直流马达
- 手把手教你智能硬件开发(四) 蓝牙传输
- 手把手教你智能硬件开发(五) 开关按钮
- 手把手教你智能硬件开发(一) 我选Arduino
- 手把手教你智能硬件开发(二) 从HelloWorld开始
- 手把手教你智能硬件开发(三) 控制LED灯
- 手把手教你做智能LED灯(二) 硬件端的开发
- 手把手教你做智能LED灯(三) 手机控制端开发
- 手把手教你开发一款IOS飞行射击游戏(六)
- 手把手教你做智能手环
- 手把手教你javamail开发(一)
- 手把手教你javamail开发(二)
- 手把手教你mysql(六)连接查询
- 手把手教你开发chrome
- 手把手教你详细的硬件电路设计 - 全文
- 【手把手教你做智能车】第五节-PIT定时器(上)
- 【手把手教你做智能车】第五节-PIT定时器(下)
- 手把手教你做智能LED灯(一) 功能规划与设计方案
- 转换为二进制
- CSS学习笔记-CSS属性(五)
- 基于深度学习的人脸识别系统系列(Caffe+OpenCV+Dlib)——【六】设计人脸识别的识别类
- Dreamweaver添加文本表格及日期
- redis入门
- 手把手教你智能硬件开发(六)直流马达
- Android带你认清http协议本质
- Leetcode 116. Populating Next Right Pointers in Each Node 链接邻居 解题报告
- Js获取当前日期时间及其它操作
- 手把手教你做音乐播放器(七)播放音乐(上)
- 已知二叉树前序中序遍历重建二叉树
- 理解Java只用8张图
- android NDK JNI so文件的制作和使用
- 英语符号们,你造吗?