浅析Arduino内部技术及合理运用开发
本文关键词:Arduino技术内幕,由笔耕文化传播整理发布。
【摘要】Arduino是由一个基于AVR单片机具开放源代码的硬件平台和为Arduino板编写程序的开发环境组成。因其具有多平台、编程环境简单、软硬件开源都可扩展等诸多优点而受到许多非专业爱好者的喜爱。但在其技术内部有着许多东西可挖掘,以此方可合理运用。
【关键词】Arduino;AVR;技术内部;合理运用
引言
Arduino是源于意大利基于AVR单片机具有开放源码的硬件平台。Arduino也具有类似Java,C语言的集成开发环境。他帮助许多爱发明创造的业余者和真正的开发者实现了自己的想法。具有独立性和互动性的Arduino可以与PC外围装置连接,,也能与PC软件进行沟通,如:Flash,Processing,Max/Msp。与其他大多数的单片机系统相比,Arduino还可以在Windous,Macintesh Osx和Linux操作系统上运行。当然有经验的设计师可以对硬件和软件开源进行扩展。总的来说Arduino更适宜非专业爱好者使用。为了满足这一类爱好者的求知欲,得对Arduino的内部进行深入的了解。
1.电源
要将外部电源输送、稳压和过滤给Arduino则需要电源电路。电源电路分为外接电源输入部分和USB电源输入部分。外接电源输入部分由二极管、稳压管USB输入口组成,输入范围是从7V到12V。二极管的作用是当电源输入正反极反转时也不会烧坏器件。稳压管是将7V到12V的电压稳定为5V。在USB电源输入电路中由保险管、电阻非常大的排阻、集成运算放大器、PMOS、线性稳压器组成。运行时,若电流大于500mA,保险管会自动断开保护电路板。保险管也具有自我恢复功能,当电压恢复到5V的电压范围后,保险管则自动恢复连接,为Arduino提供5V的电压。而排阻则用来对前面的外接电源输入进行分压。对于运算放大器若输出为高电平,则PMOS处于截止状态,此时切断了USB的供电。若输出为低电平,则PMOS处于导通状态,此时USB对Arduino供电。线性稳压器则是负责将5V的电源转变为3V电源。(这里主要说的是Arduino UNO)
2.串口
要实现PC或其他设备与Arduino之间的通信则需要使用串口。Arduino的串口USART(即Universal Synchronous/Asynchronous Receiver/Transmitter,通用同步/异步接收器/发送器)通常与PC的Rs-232端口相连,它以预设的速率异步地在一条线上发送或接受数据。当串口在异步模式时,不需要一个分离的时钟信号;当在同步模式时,则需要一个专用的信号表示时钟信息。Rs-232与串口相连时,不可直接相连,Rs-232的电压比较高,容易烧坏Arduino的电路板,需要一个Rs-232到TTL的适配器。在以往的Arduino中也有个Rs-232的串口存在。后来慢慢转变为了现在流行的更小的USB端口,好处在于在通信的同时能提供5V的稳压。USB规范允许一个已枚举的设备(能够正确向USB主机申报自己的设备,如Arduino I/O电路板)使用5V上最多500mA的电流,而未枚举的可以用100mA的电流。
3.处理器
这里讲的主要处理器为ATmega328,其程序储存为32KB,其余的大多数处理器只是程序储存不同而已。在Arduino中为了使用的方便,对其进行了二次封装。第一次是将AVR CPU、内存阵列(有程序Flash,数据SRAM,EEPROM)、时针和外围设备(有I/O端口,定时器/计数器,异步串行接口,同步串行接口,两线串行接口,模数转换)封装为ATmega328。第二次是将ALU、一组32个通用8位寄存器、一个状态寄存器、程序计数器、一个指令译码器和与内置的内存阵列及片内外围设备的借口封装为AVR CPU。
3.1 时钟源
一般的Arduino电路用外部的陶瓷谐振器或石英晶体来决定其系统时钟频率。在ATmega328中有一个片内振荡器,它有两个模式:低功率模式消耗的功率小,但无法传输到芯片外面;全幅模式则消耗的功率增大。
3.2 程序储存器
程序储存器储存着CPU要执行的程序语言指令。AVR中,可编程的16位宽Flash阵列作为程序储存器。有时它也被看做ROM,即只读储存器,当掉电时也不会丢失数据。Arduino中有一小段常驻的固件,叫引导装载程序,它与PC机通信,将编译好的程序从PC送过来保存在AVR的程序储存器中。因此就减少了使用芯片编译硬件减少了成本。为了跟踪程序执行的位置,则需要寄存器PC。当重启时,PC清除为0,执行的顺序则变为了程序初始化代码的开头。
3.3 数据储存器
在AVR中用的是SARM来保存程序运行中的数据。SRAM即静态随机存取内存。基于静态位格的数据储存器是不需要动态时钟信号来触发刷新保持数据的动作,而动态RAM则需要。对于SRAM内存,只要芯片有电就保持着里面的数据。但掉电时,内存的状态时不确定的,不要误以为会是某个特定的值。
3.4 通用寄存器
在AVR芯片中的通用寄存器组是由编号为R0到R31的寄存器组成的。由R26和R27组成的X,R28和R29组成的Y,R30和R31组成的Z是16位指向数据存储器的索引指针。当由复杂的指令时,可将X,Y,Z寄存器作为数据指针,加上指令内可选的偏移量,加到索引寄存器上形成有效的目的地址。
3.5 EEPROM
EEPROM(Electrically Erasable,Programmable Read-only Memory,电子可擦除只读储存器)。它是只读的,也是可写入的,还是可擦除的。EEPROM大部分和程序储存器一样,不同的是他可以承受多次的擦除和写入。这样便使得用户可以随意的更改数据和配置了。要寻址EEPROM则需要通过一个特殊的寄存器来访问,还需要一个相关的I/O寄存器的一个位,则可以引起一个读的操作,而结果要在另一个寄存器中才可以读到。写入的操作也是类似的:先把地址写入EEPROM地址寄存器,再复制数据进入EEPROM数据寄存器,最后做稍微复杂的位操作。这种操作的复杂性更利于保护其数据。
4.结束语
通过对Arduino的电源、串口和处理器中的各个部分硬件的浅析,可以使得非专业的爱好者更了解它,进而设计出更满足要求、更合理、更可靠的东西。
参考文献
[1]蔡睿妍.Arduino的原理及应用[J].电子设计工程,2012, 20(16):155-157.
[2]杨继志,郭敬.Arduino互动产品平台创新[J].单片机与嵌入式系统应用,2012(4):39-41
[3]Massimo BanZi.爱上Arduino[M].2版.北京:人民邮电出版社,2012.
[4]Dale Wheat.Arduino技术内幕[M].北京:人民邮电出版社,2013.
本文关键词:Arduino技术内幕,由笔耕文化传播整理发布。
本文编号:360688
本文链接:https://www.wllwen.com/wenshubaike/mishujinen/360688.html