当前位置:首页 >> 电子/电路 >> 动手玩转Arduino(第四期)

动手玩转Arduino(第四期)


动手玩转Arduino (四)
运动控制(直流电机/步进电机/舵机) Arduino北京俱乐部

直流电机
? 将电能转换为机械能的一种装置 ? 两个电源接头 ? 在适当的电压下给予足够的电流时将连续旋转,旋转方向 由电流方向决定 ? 普通直流电机转速高力矩小,适用于对力矩要求小的场合

直流减速电机
? 直流减速电机(齿轮减速电机)是在普通直流电机的基础 上,加上配套齿轮减速箱。 ? 齿轮减速箱可以提供较低的转速和较大的力矩,不同的减 速比可以提供不同的转速和力矩

常用参数
? 工作电压(额定电压)
– – – – 驱动电机推荐使用的电压 高于或者低于工作电压时电机也能工作 实际电压 < 额定电压,输出功率变小 实际电压 > 额定电压,会影响电机的寿命

? 工作电流
– 电机工作电流越大,输出功率越大 – 空载运行时,电机的电流最小(空载电流) – 负载增大到使电机停止转动时(堵转电流)

? 转矩
– 电机的转动力

? 转速
– 每分钟旋转的圈数(转/分,RPM)

注意!
? 电机属于大电流设备,无法用Arduino引脚直接控制
– 区别于LED

? 电机电压高于Arduino的工作电压,注意隔离和接线
– 出错可能导致Arduino烧毁

? 电机在不通电的情况下旋转将产生逆电流(逆电压)
– 发电机的工作原理 – 逆电流的方向与电机工作电流的方向相反 – 逆电流会造成电子设备的损坏

动手
? 观察逆电压——手工发电机

基本控制电路
? 用三极管或者MOS管驱动电机

动手
? 用Arduino控制电机的转动

代码
? 与LED灯控制代码相同

电机速度控制
? 复习PWM
– 高速地开关三极管来实现对电机的控制 – 占空比(打开时间:关闭时间)决定了输出给电机的能量份额 – Arduino的analogWrite函数用来产生PWM信号

动手
? 用Arduino控制电机转动的速度 ? 如何让速度变化更容易观察到?

H桥式驱动电路
? 4个三极管控制一个直流电机 ? 只让对角线上的一对三极管导通
– 否则会短路,烧坏三极管

? 能同时控制速度和方向

电机驱动芯片L293D
? 包含两个H桥式驱动电路,可以用来驱动两个直流电机

使能引脚 方向A 电机 方向B 电机电源

Arduino 5V

电机电源和 Arduino 需要共地!

Arduino控制L293D
? 速度控制
– 使用Arduino模拟输出引脚 – 将产生的PWM信号连接到L293D的使能引脚

? 方向控制
– – – – – 使用Arduino的数字输出引脚 将产生的数字信号连接到L293D的A、B两个方向引脚 正转:A为高,B为低 反转:A为低,B为高 制动:A、B同时为高或者低

动手
? 用L293D控制电机

Arduino电机驱动扩展板
? 基于L298N,工作原理与L293D一样 ? 提供更大工作电流,可以驱动大的直线电机 ? 逆电压消除电路

步进电机
? 一种可以精确控制的交流电机 ? 由驱动脉冲控制,每个脉冲让电机前进一个固定的角度 (步进角) ? 电机速度由单位时间内脉冲的个数决定(脉冲频率) ? 功率小,负载能力低,控制相对复杂

双极性步进电机
? 每个线圈都可以两个方向通电 ? 四根引线,每个线圈两条 ? 使用数字万用表确定线圈分组
– 某两根引线之间能够测量到阻值就属于一组

? 双极性步进电机的步距通常是1.8°
– 转一圈需要200步

工作原理

步进电机驱动器
? 需要不断改变线圈中电流的方向
– 通过H桥式驱动电路完成

? 步进电机驱动模块EasyDriver

线圈A
电机电源和 Arduino 需要共地!

线圈B



电机电源



步进脉冲

方向

Arduino控制EasyDriver
? 方向控制
– 使用Arduino的数字输出引脚

? 速度控制
– 使用Arduino的数字输出引脚 – 产生脉冲信号

动手
? 用EasyDriver驱动双极性步进电机

升降速曲线
? 步进电机在拖动负载高速移动一定距离并精确定位时一般 来说都应包括五个阶段
– – – – – 启动 加速 高速运行(匀速) 减速 停止

? 不同阶段的脉冲频率应不同

舵机
? 舵机也叫伺服电机(Servo),工作电压一般4.6 – 7.2V ? 由直流电机、减速齿轮组、传感器和控制电路组成 ? 主要应用在定位控制上

舵机接口
? 标准三线接口
– 电源线 – 地线 – 控制线

控制信号
? ? ? ? 舵机的控制信号也是一种PWM信号 脉冲周期20毫秒 脉冲高电平持续1毫秒(1000微秒)到2毫秒(2000微秒) 用来控制的脉冲信号必须持续产生,否则很难稳定

注意!
? 舵机对控制脉冲高电平的宽度非常敏感
– 抖动:控制信号每个脉冲的高电平宽度不稳定

? 两个控制脉冲的间隔时间不太敏感
– 只要在可以接受的范围内都可以(14ms到20ms)

? 只有机械约束,没有电路约束
– 控制脉冲宽度大于920us或者2120us,对电机寿命会有影响 – 驱动电机到达物理上不可能到达的位置

? 千万不能接反电源
– 大部分舵机都可能会烧毁

? 通过实验来找出电机的运动范围
– 大部分舵机的运动区间都在150度左右

Arduino如何控制舵机
? Servo库
– servo.attach(pin)
? 在指定的引脚上连接舵机

– servo.write(anlog)
? 将舵机旋转到指定的角度位置

– servo.writeMicroseconds(us)
? 生成指定宽度(微秒)的控制脉冲

动手
? 利用Arduino为舵机找到中心位置 ? 以中心位置左右摆动

谢谢!


赞助商链接
更多相关文档:
更多相关标签:
网站地图

文档资料共享网 nexoncn.com copyright ©right 2010-2020。
文档资料共享网内容来自网络,如有侵犯请联系客服。email:zhit325@126.com