很早之前入手了一块Arduino Mega2560,当时只是认为其操作简单且更加人性化,开源方便,想了解了解。最新搞项目想用Arduino试试控制8路舵机,但网上找的Servo库大多说只支持9,10接口,很是恼火(资料怎么写就怎么搬,到底是不是只支持9,10接口有几个知道?又有几个知道为什么?)。
另外本人长期逛各种论坛,发现国内民间创客极客水平还是普遍低下的,Arduino虽说开源但国内确实找不到多少参考资料,这无形之中成了小小的阻碍,于是本人花了点时间为广大Arduino爱好者整理翻译此份资料,一是想丰富网上资源,二是以一种更加简便的方式带部分人入门。了解原理才能谈创意,不求甚解只能做个小玩家。
了解Arduino的最好平台当然是官网,我相信官网肯定不会遗漏自己产品最有特色的东西,因此以它为参考绝对没错。另外,必要部分辅助以百科,以及各位广大亲爱博友的资料(就不一一列举了,在此谢过)。本文以Arduino Mega 2560为基础解释,其他板子都差不多。
一:概述
Arduino Mega 2560是基于ATmega2560的微控制板,有54路数字输入/输出端口(其中15个可以作为PWM输出),16路模拟输入端口,4路UART串口,16MHz的晶振,USB连接口,电池接口,ICSP头和复位按钮。简单地用USB连接电脑或者用交直流变压器就能使用。
Mega 2560 是Arduino Mega系列的升级版。Mega 2560与之前的板子(最大)不同在于:它没用FTDI USB-to-serial驱动芯片,而是用ATmega16U2编程作为USB-to-serial传输器(V1版本使用8U2)。
总结如下:
控制器 | ATmega2560 |
工作电压 | 5V |
输入电压(推荐) | 7-12V |
输入电压(限制) | 6-20V |
数字I/0口 | 54 (含15路PWM输出) |
模拟输入口 | 16 |
每个I/0口直流电流 | 40 mA |
3.3v口直流电流 | 50 mA |
闪存(Flash Memory) | 256 KB(其中8 KB用作bootloader) |
静态存储器(SRAM) | 8 KB |
EEPROM | 4 KB |
时钟 | 16 MHz |
二:电源
这部分就不说了,涉及3.3v和5v供电。
(1)RAM
随机存取存储器(英文:random access memory,RAM)又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。 按照存储信息的不同,随机存储器又分为静态随机存储器(英文:Static RAM,SRAM)和动态随机存储器(英文Dynamic RAM,DRAM)。
SRAM不需要刷新电路即能保存它内部存储的数据。而DRAM(Dynamic Random Access Memory)每隔一段时间,要刷新充电一次,否则内部的数据即会消失,因此SRAM具有较高的性能,但是SRAM也有它的缺点,即它的集成度较低,相同容量的DRAM内存可以设计为较小的体积,但是SRAM却需要很大的体积,且功耗较大。所以在主板上SRAM存储器要占用一部分面积。SRAM的速度快但昂贵,一般用小容量的SRAM作为更高速CPU和较低速DRAM 之间的缓存(cache)。
(2)EEPROM
带电可擦可编程只读存储器--一种 掉电后数据不丢失的存储芯片。 EEPROM 可以在电脑上或专用设备上擦除已有信息,重新编程。一般用在即插即用。EEPROM的擦除不需要借助于其它设备,它是以电子信号来修改其内容的,而且是 以Byte为最小修改单位,不必将资料全部洗掉才能写入,彻底摆脱了EPROM Eraser和编程器的束缚。(3)闪存(Flash Memory),EEPROM的变种:
在断电情况下仍能保持所存储的数据信息分为 NOR型与 NAND型闪存(NAND型更为普遍常见,一般说的是NAND型):内存和NOR型闪存的基本存储单元是bit,用户可以随机访问任何一个bit的信息。
而NAND型闪存的基本存储单元是页(Page)。每一页的有效容量是512字节的倍数。 NAND型闪存以块为单位进行擦除操作(一块一块地擦)。闪存的写入操作必须在空白区域进行,如果目标区域已经有数据,必须先擦除后写入,因此擦除操作是闪存的基本操作。一般每个块包含32个512字节的页,容量16KB;而大容量闪存采用2KB页时,则每个块包含64个页,容量128KB。
简言之,RAM数据断电不可保存,因而常用于CPU与外设之间做缓存用;EEPROM掉电数据不丢失,用于编程读写使用;有时由于需要改写的数据量比较大,因而在EEPROM基础上出现了Flash Memory(NAND型)。我们编写好程序之后就是在bootloader引导下下载到Flash Memory里面的(因为每次程序下载都有重新刷新一个区域块来保存下载的程序,因而使用Flash Memory)。我相信新手对各种存储器都会有一定了解了。SPI(串行外设接口):
50 (MISO), 51 (MOSI), 52 (SCK), 53 (SS)。使用SPI library(点击看详细介绍)库实现。
TWI:
20 (SDA) 和21 (SCL)。使用Wire library(点击查看详细介绍)实现功能。
模拟输入:
Mega2560有16个模拟输入,每个提供10位的分辨率(即2^10=1024个不同的值)。默认情况下他们测量0到5v值。可以通过改变AREF引脚和analogReference() 功能改变他们变化范围的上界。
AREF:是AD转换的 参考电压输入端(模拟口输入的电压是与此处的参考电压比较的)。使用 analogReference()(点击查看详细介绍)完成功能。Mega2560使用Arduino IDE环境编程(这个相信再新的新手也知道)。事先在闪存(Flash Memory)里烧入bootloader引导程序(上文介绍有8kb),这样我们就可以每次下载程序了。它使用的是原始的STK500通信协议。(bootloader一般使用C语言或者汇编编写,考虑部分人的兴趣,这里也提供些资料:bootloader)。
你也可以绕过bootloader利用Arduino ISP通过ICSP (In-Circuit Serial Programming)header来编程(这是采用额外编程器的方式,这种方式当然不赞成,很麻烦)。
The ATmega16U2(上面说的串口编程芯片,Mega2560的特色)固件源码可以从 Arduino repository获得。ATmega16U2/8U2使用DFU bootloader下载,可以用以下方式激活:七:自动(软件)复位:
不说了。
八:USB过流保护:
不说了,好的硬件设计应该这么做。
九:物理特性和兼容:也不说了,都是继承和发展。