Arduino Uno是2011年9月25日在纽约创客大会上发布的,目前官方最新版本是Rev3版,称为Arduino Uno R3,本书的实验均以这个版本为准。Arduino Uno以ATMEL AVR单片机ATmega328p为核心,其中的字母p表示低功耗picoPower技术。Arduino Uno板上的单片机安装在标准28针IC插座上,这样做的好处是项目开发完毕,可以直接把芯片从IC插座上拿下来,并把它安装在自己的电路板上使用。然后再用一个新的ATmega328p单片机替换Uno板上的芯片,当然,这个新的单片机要事先烧写好Arduino引导程序(运行在单片机上的软件,实现与Arduino IDE通信,也称为Bootloader)。你可以购买烧写好引导程序的ATmega328p,也可以通过另外一个Arduino Uno板利用IDE自己烧写。Arduino Uno还有一款采用贴片工艺的版本,命名为Arduino Uno SMD,该版本会额外提供A6和A7接口。


Arduino Uno R3开发板如图1-1所示,由于Arduino的硬件和软件都是开源的,所有关于Arduino的软硬件资源都可以从网上获取到,因此,可以买到到大量的Arduino Uno R3克隆板。如果愿意,你也可以使用官方原理图、PCB板图自己做一个。
0.jpg
图1-1 Arduino Uno R3
1. ATmega328p
Arduino Uno的大脑是Atmel AVR 单片机ATmega328p,那个黑色、长方形、两侧各有一排引脚的塑料块。在SMD版本中,处理器是直接焊在PCB上的黑色方块。它实质上就是单芯片计算机,内部封装了中央处理器CPU、程序存储器Flash、数据存储器RAM、时钟电路和外围设备等。

Arduino最初采用的处理器是ATmega8,但ATmega328的内存更大,片内外围设备功能更多,同时耗电更少。ATmega328可以在很宽的供电电压下工作,从1.8 V到5.5 V都能正常工作,很适合电池供电的场合。在最低供电电压下,ATmega328只能工作在4 MHz的时钟频率下;当供电电压提高到2.7 V时,时钟频率就可以提高到10 MHz;如果要以最高20 MHz的时钟频率工作,芯片至少需要4.5 V的供电电压。

Arduino Uno开发板供给ATmega328芯片的电压是5.0 V,理论上可以工作在20 MHz以内任何时钟频率上,但最初的ATmega8最高只能工作在16 MHz,为了保证兼容性,在后续所有的Arduino型号中都继续使用16 MHz的时钟频率。

ATmega328p主要特性如下:

  • 高性能、低功耗的8位RISC 微处理器
  • 32K字节程序存储器,1万次擦写寿命
  • 1K字节的E2PROM,10万次擦写寿命
  • 2K字节的片内SRAM
  • 14个数字I/O口(6个支持PWM输出)
  • 6路模拟输入口(10位ADC)
  • 2个8位定时器/计数器
  • 1个16位定时器/计数器
  • 6种休眠模式
  • 工作电压:1.8 - 5.5V
  • 工作温度范围:-40℃至85℃

2. 电源
有多种办法可以给Arduino Uno板供电,第一种方法是通过连接到电脑的USB线给它供电,电脑的USB口可以为Arduino Uno板提供最大500 mA的电流。这足以驱动LED或低功耗传感器,但对于驱动大电流负载,比如马达、电磁阀等还是不够的。本书推荐采用这种供电方式,Arduino Uno电路板上有一个自恢复保险丝,以防用户在实验中因短路电源造成电脑端口的损坏。

第二种方法是通过Arduino Uno板上的柱式插座供电,从这里可以输入7-12 V的电压,然后由板载稳压电路将该电压稳压至5V。但要注意柱式插座的极性,在插座中央有一个直径2.1 mm的针,这个针接正极,外圈的套管接地。如果外接稳压电源的插头极性相反,会烧毁Arduino Uno板上的防反接二极管。

第三种方法是通过Arduino Uno板扩展插座的VIN和GND引脚供电,柱式插座内芯的针也接到这个扩展插座的Vin引脚,这种供电方式等效于通过柱式插座供电,所以也要输入7-12 V的电源才能保证板载稳压电路工作。

最后还有一种供电方法,是通过Arduino Uno板扩展插座上标有5 V和GND的引脚供电,但因为这种方式绕过了板载稳压电路,所以必须保证输入的5V电压是稳定的,较大的电压波动会造成处理器在内的若干元件的永久损坏,所以不建议采用这种供电方式。

现在的Arduino Uno板有一个非常好的设计,就是允许同时连接多个电源。智能电源切换电路会选择最高可用电压的电源,然后将其接入稳压器。
Arduino Uno板上还有3.3 V稳压器,可以通过扩展插座为外设提供3.3V电压,但最大输出电流不能超过50 mA。

3. 数字I/O口
Arduino Uno板通过扩展插座提供14个数字I/O口,引脚编号为013,其中3、5、6、9、10、11引脚支持PWM输出,可用于输出8-bit PWM波,在Arduino中对应的函数 analogWrite()。每个引脚在使用之前,必须通过pinMode()函数明确指定为输入模式或输出模式,例如,下面的语句把12引脚指定为输入模式、13引脚指定为输出模式:

pinMode(12, INPUT);    //将12引脚对应的端口设置为输入端口
pinMode(13, OUTPUT);  //将13引脚对应的端口设置为输出端口

在Arduino中,用1或HIGH表示高电平,0或LOW表示低电平。数字I/O口作为输出口使用时,若输出高电平,输出电压接近5V,但这是未接负载时的理想情况,只要接入负载,输出电压就会降低,输出电流越大,电压降低的越严重;若输出低电平,输出电压接近0V,当有负载电流灌入该端口时,输出电压会适当升高,所以I/O口都有一定的带负载能力。建议每个I/O口的电流不要超过20mA,最大不能超过40mA,所有I/O口的总电流不要超过200mA,初学者尤其要注意这一点。

数字I/O口作为输入口使用时,为保证逻辑关系正确,输入高电平应该尽量接近5V,输入低电平要尽量接近0V。

需要注意的是,对于初学者尽量避免使用Arduino Uno板扩展插座上的0、1引脚,这两个引脚对应的端口是串行通信口,要用于Arduino Uno板和电脑之间的串行通信。对于有经验的程序员,在最终作品中可以使用0、1引脚对应的串口与其他设备进行通信,也可以作为通用数字I/O口用,但对于初学中不建议这么做。

4. 模拟输入口
Arduino Uno板通过扩展插座提供6个模拟输入口,引脚编号为A0-A5。ATmega328内部带有10位模数转换器(Analog to Digital Converter,ADC),可以将引脚上的模拟输入信号转换为10位数字信号。默认情况下,模拟输入电压范围为0-5V,可使用 AREF引脚和analogReference()函数设置模拟输入电压范围。

在Arduino IDE中,A0-A5作为模拟输入口使用时不需要初始化,直接用analogRead()函数读取相应端口的值即可,例如:

analogRead(A0);   //读取A0端口的模拟量并转换为10位数字量

模拟输入口A0A5也可以作为普通的数字I/O口使用,在使用前要用pinMode()函数明确指定端口为输入模式还是输出模式。

5. 复位
Arduino Uno板在USB接口旁有一个复位按钮,当按下该按钮时,单片机执行复位操作,相当于板子重新加电。

扩展插座上的复位引脚(RESET)接低电平会也使Arduino复位。复位按键按下时,实际上就是将复位引脚接到低电平,从而让Arduino复位的。

6. 指示灯
Arduino UNO板带有4个LED指示灯,作用分别如下:

  • 电源指示灯(ON),当Arduino 板通电时,电源指示灯灯会点亮。
  • 串口发送指示灯(TX),当Arduino向计算机传输数据时,TX灯会闪烁。
  • 串口接收指示灯(RX),当Arduino接收计算机传来的数据时,RX灯会闪烁。
  • 可编程控制指示灯(L),该LED连接到Arduino Uno扩展插座的13引脚,当13引脚为高电平时,LED 会点亮。
来源:模电数电