Arduino Uno R3开发板如图1-1所示,由于Arduino的硬件和软件都是开源的,所有关于Arduino的软硬件资源都可以从网上获取到,因此,可以买到到大量的Arduino Uno R3克隆板。如果愿意,你也可以使用官方原理图、PCB板图自己做一个。
图1-1 Arduino Uno R3
1. ATmega328pArduino 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口,引脚编号为013,其中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位数字量
模拟输入口A0A5也可以作为普通的数字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 会点亮。