Arduino-UNO

孙博艺
2023-12-01

Arduino-UNO
下面这张图就是Arduino UNO面板,它最重要的就是上下两排红框部分了,上面的是数字接口,下面的是模拟接口,除开这两类接口以外剩下的就是一些普通的玩意儿了。下面一一对这些结构进行讲解: 图1
1)14个数字接口:数字接口从图上可以看到总共有14个(0~13号),0号和1号口属于串口通信用的,一般我们不去占用;从2号口到13号口是我们可随意使用的数字接口数字接口可以读取数字信号,也可以输出数字信号,而在2到13号口中带有“~”符号的接口代表它不仅可以输出高电平和低电平信号,也可以输出调制的模拟信号,不带“~”符号的接口就只能输出5V高电平或者0V低电平(这里不深究高低电平的细节,因为事实上对于TTL型的接口高低电平并不严格等于5V和0V,而CMOS型的高低电平则是5V和0V,Arduino上的数字引脚属于TTL型所以严格的讲它们输出的高低电平是有一个误差范围的只要在这个误差范围之内Arduino都认可而不会误判)。输出高电平和低电平很好理解,你可以理解为只能输出5V和0V。这里需要讲解一下的是什么叫“调制模拟信号”,调制模拟信号就是通过在一段时间内来回切换高低电平从而控制这段时间内高低电平出现的时间比例,高电平出现的时间比例越多那么输出电压就越接近5V高电平,低电平出现的时间比例越多输出电压就越接近0V低电平。而这个所谓的时间比例就是所谓的“占空比”。如图2所示,0%的占空比就意味着在一段时间内全是低电平输出,这个时候输出当然就是0V;而100%的占空比就是说这段时间内全是高电平输出,输出当然就是5V;而50%占空比意味着这段时间内一半时间是高电平一半时间是低电平,由于高电平的出现时间占到了50%,所以叫50%占空比。那么这个时候输出是多少V呢?我们高中学过一个概念叫等效值,我们说占空比50%的时候输出的电压就是它的等效电压,没记错的话应该是二分之一,为2.5V(不明白的同学回顾一下等效电压或者等效电流,这里就不讲了,属于基本数学问题,不过其实你忘了也不影响你理解Arduino,所以无所谓了)。也就是说占空比50%的一段信号包含的能量等于在同样时间段内不间断输出2.5V电压所包含的能量,所以你看多妙,通过这种方法我们只通过输出5V和0V就可以得到其他值的电压了。
有的同学会问:那是不是意味着用Arduino可以得到0V到5V之间任意一个电压值呢?其实答案是对于Arduino UNO而言是不能的,你只能获得0V到5V之间255个等分点上的电压值。为啥?看图2,我们可以看到图2中把0~100%分成了6份,分别是0%,10%,25%,50%,80%,100%,那我们当然可以比图2分的更细,50份都行,也就是每隔2%我设置一份,这样为了方便点名我就需要一个计数器来计数,目的是给不同占空比命名,如果分了50份那就需要一个能存储50个数字的计数器,然后计数器记1代表2%占空比,计数器记2代表4%占空比,以此类推一直到计数器记50代表100%占空比,这里的1,2,50其实就是占空比2%,4%和100% 的名字,以后只要你告诉单片机说给我运行1号占空比,那么就会自动设置2%的占空比。So far so good, 不过现实中Arduino用了一个8位的二进制空间来充当这个计数器,见图3(8位就是8个bit,计算机最小计数单位,8个bit是一个byte,一个汉字占用两个byte),这个计数器最多可以记多少数呢?00000001,00000010,00000011…如此下去总共27+26+…2^0=255个,于是乎0%到100%占空比之间可以分出总共255份,所以理论上Arduino可以模拟0V到5V之间的255等份的电压值。所以你看到,要想约精确地得到0V到5V之间的值,就需要用越大的空间来计数。好了,数字输入输出讲完了,接下来讲模拟接口。

图2
图3
2)6个模拟接口:Arduino下方A0,A1…,A5这几个带A的接口就是模拟接口。需要点出一下的是模拟接口只能读取不能输出模拟量(其实也可以输出,不过只能输出5V和0V,并且模拟接口输出的是CMOS信号而非数字接口那种TTL信号),总之呢我们基本上是用模拟接口接收传感器信号就对了,模拟接口是否有其余的功能目前我也还没用到。好,大家肯定会问一个模拟信号是怎么通过模拟接口传入单片机的呢?单片机只认0和1这种数字信号,它怎么认得模拟信号?其实这里面用的是一个“映射”的方式来实现模数转换的。具体的模数转换电路我也不懂不过这不妨碍我们去理解它的工作方式。记住一句话:在学习过程中不要过于计较背后的硬件原理,而要把理解力专注在硬件的工作方式上,这一点很重要不然会学的很痛苦且进入死胡同。这个模数转换的工作方式其实就和前面的数字接口里讲到的“计数器”差不多,不同的是模拟接口里面的模数转换器用的是一个10位二进制空间,如图4所示。所以按照二进制的计算方法我们可以知道这个10位二进制空间总共可以计量29+28+…+21+20=1023个数字.按照十进制的表述就是说我们总共可以用这个计数器获得0,1,2…,1023这些个数字标签,接下来需要做的就是把这些数字标签一一对应上外部传入的模拟信号值,这就叫映射了。例如,我们输入一个5V的电平,那么模数转换器会自动把0对应0V,1023对应5V,然后我们可以算出5V/1023=0.0048V=4.8mV,所以1对应4.8mV,2对应9.6mV,以此类推一直到5V。可见这里面的分辨率是4.8mV,也就是说我们通过这种方法可以辨认出0V到5V之间的电平,例如2.5V就会对应到512这个数字上,然后将512这个数字传入单片机,单片机就知道原来输入了一个2.5V电压。此外还需要讲一点,Arduino模拟接口可输入的电平最高就是5V,再高就会烧坏板子,所以在开发过程中需要确认传感器传入的电平高低,太高了就要降压。

图4
好了,模拟引脚和数字引脚全讲完了,第一部分最重要的内容也结束了,有人问我看了半天大概也明白了说的内容,可有啥用呢?为啥模拟引脚和数字引脚最重要?因为理论上你已经可以搭建系统了。比如你可以做一个可控亮度的LED小灯。如图5图6,你可以通过调节电位器来变换LED灯的亮度。下一期我会以此为例更进一步讲解,不过在此之前第一部分还没结束,剩下的几个Arduino UNO的结构我会快速介绍一下。
3)USB接口:有两个功能 a. 用来给Arduino供电 b. 和电脑串口通信。串口通信是一个非常重要的内容后面会介绍。
4)外部电源接口:也是用来给Arduino供电的,和USB的区别在于你可以把电池通过这个接口插上供电。不过记得电压得是5V。
5)工作状态灯:如果L和On两个灯亮,则说明Arduino在工作。
6)TX,RX灯:这两个灯和串口通信有关,TX闪说明Arduino正通过串口通信发送信息,RX闪说明Arduino正通过串口通信接受信息。
好了第一部分结束~下课!

图5

 类似资料: