Arduino周边模块:执行部件(舵机、直流电机、步进电机)
Arduino周边模块:执行部件
Arduino周边模块:执行部件
嵌入式系统的构成
如今已经有各种各样的基于Arduino的嵌入式系统,
比如:智能小车、3D打印机、机器人,甚至还有基于Arduino的开源人造卫星
但是光有Arduino,就像一个人只有大脑,没有四肢也是什么也做不到的
因此,
控制代码+Arduino+执行部件=改变世界的力量
常用的执行部件:
1.舵机-------->机器人
2.直流电机----->智能小车
3.步进电机----->3D打印机
使用Arduino输出PWM方波
PWM有什么作用?
- 控制电机的转速
- 控制舵机的角度
- 控制喇叭的音量
- 输出真正的模拟电压
什么是PWM?
PWM:脉宽调制
脉宽就是高电平持续的时间长度
而脉宽调制就是改变数字方波中高电平的持续时间,来对外部模块进行控制的一种方式。
优点:精确而简单
PWM波的频率越高模拟的效果越好。一般来说,PWM波要高于20Hz才能保证基本的模拟效果
总结来说,就是通过改变方波的脉冲宽度,或者说是占空比来进行模拟信号的仿真
如何通过Arduino进行PWM波的输出?
- 硬件控制
在前面的控制三色LED中说过,在Arduino的数字端口前带有~号的,就是能够输出PWM波的
控制语句:
1.analogWrite(pin,value)//value范围0~255
- 软件控制
当我们要控制多路的PWM波输出,比如说多自由度机器人(需要17路PWM输出),那么就需要使用软件输出PWM波
关键:使用软件来模拟硬件执行过程
软件输出PWM波代码:
1.loop()
2.{
3. int compareReg1=pulseWidth1;
4. int compareReg2=pulseWidth2;
5. int currentCount=0;
6. digitalWrite(5,HIGH);
7. digitalWrite(6,HIGH);
8.
9. for(int i=0;i<255;i)
10. {
11. current ++;
12. if(currentCount >= compareReg1)
13. {
14. digitalWrite(5,LOW);
15. }
16. if(currentCount>=compareReg2)
17. {
18. digitalWrite(6,LOW);
19. }
20. delayMicroseconds(2);
21. }
22.}
通过软件进行模拟,我们就可以得到一个超级timer,它包含任意多个比较寄存器
两种输出方式比较
| 优缺点 | 硬件输出 | 软件输出 |
|---|---|---|
| 优点 | 1.不占用CPU | 1.灵活性高 |
| 优点 | 2.控制简单 | 2.能够输出多路PWM |
| 优点 | 3.控制精确 | |
| 缺点 | 1.受硬件限制,路数少 | 1.占用CPU计算时间 |
| 缺点 | 2.脉宽不精确,存在误差 |
使用Arduino控制舵机
舵机又称伺服电机,能够根据给出的控制信号旋转特定的角度
电位器(potentiometer):充当位置传感器,从而获得舵机的转动角度信息
舵机的原理
舵机的控制
舵机的硬件连接
一般的舵机会引出三根线,分别是地线、电源线以及信号线
| 类型 | 颜色 |
|---|---|
| 地线 | 棕色 |
| 电源线 | 红色 |
| 信号线 | 橙色 |
舵机与Arduino的连接
舵机的控制代码
1.#include <Servo.h>
2.Servo myservo;//命名为myservo
3.
4.void setup()
5.{
6. myservo.attach(9);//设置引脚编号
7.}
8.void loop()
9.{
10. int pos=0;//定义一个变量,来控制旋转角度
11. for(pos=0;pos<180;pos++)
12. {
13. myservo.write(pos);
14. delay(15);
15. }//从0转到180度
16. for(pos=180;pos>0;pos--)
17. {
18. myservo.write(pos);
19. delay(15);
20. }//从108度再转回来
21.}
使用Arduino控制直流电机
直流电机:实现将直流电能转化为机械能,或者将机械能转化为直流电能的元件。
直流电机的特点:
- 转动速度快
- 调速容易
- 转速随负载变化
但是利用Arduino控制直流电机却不是一件简单的事情:
- 直流电机转动时需要的电流较大,直接通过数字端口连接可能会烧坏主板
- 在转动直流电机时会产生逆电流,会对Arduino产生不利影响
- 通过Arduino直接连接直流电机无法进行方向的控制
因此,我们得到一个结论:千万不要将Arduino与直流电机直接相连
双H桥电路控制直流电机
给A、D这两个引脚接高电平,那么与这两个引脚相连的三极管处导通状态。给B、C这两个引脚接低电平,那么与这两个引脚相连的三极管处于截止状态
等效电路:
给B、C这两个引脚接高电平,那么与这两个引脚相连的三极管处导通状态。给A、D这两个引脚接低电平,那么与这两个引脚相连的三极管处于截止状态
等效电路:
这样就解决了等效的问题
那么又如何解决电机转动的速度呢?
这个也比较好办
在VCC与H桥之间再加一个三极管,引脚E接Arduino输出的PWM波,这样就能够控制转速
电路连接图
(具体参考控制芯片的参考手册)
控制代码
1.int pwmPin=9;
2.int dir_1=8;
3.int dir_2=7;
4.void setup()
5.{
6. pinMode(pwmPin,OUTPUT);
7. pinMode(dir_1,OUTPUT);
8. pinMode(dir_2,OUTPUT);
9.}
10.void loop()
11.{
12. digitalWrite(dir_1,HIGH);
13. digitalWrite(dir_2,LOW);
14. analogWrite(pwmPin,100);
15.}
如果要改变电机的转速,只需要把analogWrite(pwmPin,100);中的100改为更大的值;而如果想改变转向,只需要把dir_1和dir_2对调
使用Arduino控制步进电机
步进电机
定义:将电脉冲信号转变为角位移或者线位移的开环控制元件。
简单来说,步进电机每接收一个电脉冲向前走一步。
步距角:步进电机每一步旋转的角度。控制方式不同,步距角就不同。
优点:控制简单、进度高、误差不累积
步进电机驱动原理
上图中,有A、B、C、D相,所以我们称之为四相步进电机
当A相断电,B相通电,此时转子会转过90°,S极指向B相。同理的,当B相断电,C相通电,此时转子会转过90°,S极指向C相。由此类推,即可转动360°。
脉冲时序A—>B—>C—>D
可以得到步距角为1.8°
称为整步驱动
半步驱动
当A相与B相同时保持通电状态,此时转子会处在两相之间
脉冲时序:A—>AB—>B—>BC—>C—>CD—->D—>DA
步距角:0.9°
步进电机与舵机的对比
| 项目 | 步进电机 | 舵机 |
|---|---|---|
| 控制方式 | 脉冲控制 | PWM控制 |
| 旋转角度范围 | 无限制 | 0~180°(或0~360°) |
| 用途 | 位移距离控制(3D打印机、电脑鼠、智能车) | 方向角度控制(机械臂、智能小车转向机构、人形机器人、云台) |
Arduino与步进电机的硬件连接
控制代码
1.#include <Steper.h>
2.Stepper myStepper(200,8,9,10,11);//200是旋转一圈所需要的步数,8~11是Arduino与步进电机四相相连的编号
3.
4.void setup()
5.{
6. myStepper.setSpeed(60);//每分钟旋转60圈
7.}
8.void loop()
9.{
10. myStepper.step(200);//步进电机需要前进的步数200
11.}
如需把速度降低,只需要把myStepper.setSpeed(60);中的60改为更小值。
Arduino周边模块:执行部件(舵机、直流电机、步进电机)的更多相关文章
- Arduino周边模块:传感器部件(温敏、光敏、湿敏)
Arduino周边模块:传感器部件(温敏.光敏.湿敏) Arduino周边模块:传感器部件(温敏.光敏.湿敏) Arduino的模数转换 对于Arduino来说,它只认识数字量,模拟量对其来说就是一门 ...
- Arduino周边模块:LED部件
Arduino周边模块:LED部件 Arduino周边模块:LED部件 1. LED的使用 LED的原理: LED是会发光的二极管,它具有单向导电性.两端加上正向电压,即能将电能转化为光能. 正向电压 ...
- Arduino周边模块:LCD与数码管
Arduino周边模块:LCD与数码管 Arduino周边模块:LCD与数码管 数码管的介绍 数码管一般是用来显示数字和字符的 数码管原理 一位数码管 该图是一个8段数码管,该数码管中包含了8个LED ...
- 【Arduino】开发入门【十】Arduino蓝牙模块与Android实现通信
[Arduino]开发入门[十]蓝牙模块 首先show一下新入手的蓝牙模块 蓝牙参数特点 1.蓝牙核心模块使用HC-06从模块,引出接口包括VCC,GND,TXD,RXD,预留LED状态输出脚,单片机 ...
- pymysql模块 执行sql封装
封装pymysql模块执行sql class HandCost(object): """ 处理数据库中的数据 """ def __init_ ...
- nginx开发_Filter模块执行顺序
Filter模块执行顺序 Filter模块的执行顺序是在执行configure文件时决定的,configure文件执行完成后生成objs/ngx_modules.c,文件中定义了一个数组ngx_mod ...
- 利用commands模块执行shell命令
利用commands模块执行shell命令 用Python写运维脚本时,经常需要执行linux shell的命令,Python中的commands模块专门用于调用Linux shell命令,并返回状态 ...
- python 利用python的subprocess模块执行外部命令,获取返回值
有时执行dos命令需要保存返回值 需要导入库subprocess import subprocess p = subprocess.Popen('ping www.baidu.com', shell= ...
- Nginx 编译设置模块执行顺序
Nginx编译时,配置"--add-module=xxx"可以加入模块,当我们需要按照指定顺序来设置过滤模块执行顺序时,先配置的"--add-module=xxx&quo ...
随机推荐
- VMware虚拟机中调整Linux分区大小手记(转发)
前段时间用VMware5.5安装了CentOS5.3,安装的时候分配了5Gb的虚拟硬盘空间给Linux系统,系统安装选择很多组件和软件,后面使用时又安装也一些软件,结果导致虚拟硬盘空间不足.查看分 ...
- 点击TextView浏览器打开指定网页
直接上代码: /** * 点击跳转到版权页面 */ private void getCopyRight() { // TODO Auto-generated method stub TextView ...
- sqlserver 2008存储过程 多个可空条件任意组合
很多程序员在实际开发中,经常遇到这种情况,列表上方有很多条件,包含下拉框,输入框等等,这些条件都可以不输入,如果我们需要写一个存储过程,很多条件挨个判断是否为空,且进行任意组合,任何一个开发人员都会疯 ...
- css样式规则的简要总结
css与文档关联起来发挥作用. css文件中是各种样式规则,由选择器和声名块构成.声明块由多条声明组成.选择器是声明要作用的对象,声明是对具体规则的描述. 声明由属性和值组成,值或是属性的错误都会使该 ...
- Stat
Description 请你编程实现一个简单(渣渣)的文本编辑器,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置.注意:匹配单词时,不区分大小写,但要求完全匹配,即给定 ...
- 2013ACM-ICPC亚洲区南京站现场赛G题
题目大意:一个n维的系统中随机选一个向量(X1,X2,X3,...,Xn),其中0<=Xi<=R,且X1^2+X2^2+X3^2+……+Xn^2 <= R^2. 现在给定n,R.求X ...
- BroadcastReceiver浅析
1.什么是BroadcastReceiver? 本质上是属于一个监听器,但onXxxListenter只是程序级别的监听器,当程序退出时候监听器也随之关闭.而BroadcastReceiver是系统级 ...
- EMV标准
EMV标准是由国际三大银行卡组织--Europay(欧陆卡,已被万事达收购).MasterCard(万事达卡)和Visa(维萨)共同发起制定的银行卡从磁条卡向智能IC卡转移的技术标准,是基于IC卡的金 ...
- 银行卡检测中心BCTC
BCTC是Banking Card Test Center的缩写. 银行卡检测中心(下称中心)经中国人民银行总行批准成立于1998年4月,作为一个独立的第三方专业技术检测机构,其主要职责是按照国际.国 ...
- Delphi XE6 通过JavaScript API调用百度地图
参考昨天的内容,有朋友还是问如何调用百度地图,也是,谁让咱都在国内呢,没办法,你懂的. 首先去申请个Key,然后看一下百度JavaScript的第一个例子:http://developer.baidu ...