- N +

adc是什么意思梗(adc是什么意思游戏)

adc是什么意思梗(adc是什么意思游戏)原标题:adc是什么意思梗(adc是什么意思游戏)

导读:

在第7节中,我们讨论了在微控制器和传感器的帮助下,计算机还可以获得环境参数,例如室内温度和湿度。t但是不知道大家有没有注意到,环境的温度和湿度应该是一直在变化的,但是我们使用单片机采集到的温度和湿度值都是离散的。这实际上是将模拟信息数字化。的过程.使用ADC将模拟信号数字化相当多的微控制器配备

在第7节中,我们讨论了在微控制器和传感器的帮助下,计算机还可以获得环境参数,例如室内温度和湿度。

t但是不知道大家有没有注意到,环境的温度和湿度应该是一直在变化的,但是我们使用单片机采集到的温度和湿度值都是离散的。这实际上是将模拟信息数字化。的过程.

adc是什么意思梗(adc是什么意思游戏)

使用ADC将模拟信号数字化

相当多的微控制器配备了ADC外设。ADC的作用是将模拟信息数字化。正好我用的51单片机有ADC功能。本节将介绍该模块。目的是让我们的计算机能够测量电压。

ADC的全称是Analog-to-DigitalConverter,即“模数转换器”。它可以将连续变化的模拟信号转换成离散的数字信号,供计算机进一步处理。

模拟信号只有数字化后才能被计算机处理,因为计算机本身就是由数字电路组成的计算机器。事实上,将模拟信号“转换”为离散信号是不合适的。更恰当的说法是ADC从模拟信号中取出“一部分”信息。请看右下图中的黑点,这是ADC采集到的数字信号。

由此看来,ADC有两个重要的参数:采样频率和精度。采样频率决定了ADC从模拟信号获取数据的“密集程度”。一般来说,越密集越好,因为可以更好地还原信号的特征。精度决定了数据采集的准确性。

以我的51单片机为例。它具有8个10位ADC,采样频率为250K/s。因此它每秒可以从模拟信号中提取25万个数字信号,相当于用坐标系中的25万个点来描绘1秒的信号。

t的精度为10位,这意味着它使用1到1024之间的数字来表示信号。我的51单片机ADC的参考电压信号是5V,所以它能表示的最小电压是5V/1024。大约是5mV。

C语言编程单片机,实现ADC采样

现在我们知道了什么是ADC,那么如何使用它呢?请观看以下部分。我使用的51单片机自带的ADC模块结构如下图:

可见,实际上是通过逐次比较得到最终的数字信号。下图是ADC相关寄存器的信息:

因此,在keil4中可以编写如下C语言代码:

sfrADC_CONTR=0xbc;sfrADC_RES=0xbd;//高8位结果sfrADC_LOW2=0xbe;//低2位结果sfrP1ASF=0x9d;//我的51单片机的ADC转换通道与P1口复用,上电复位后P1口为弱上拉IO口。我们可以通过C语言编程设置8个通道中的任意一个进行ADC转换。

无效adc_init(){P1ASF=0xff;//8个通道均处于ADC_RES=0;ADC_CONTR=ADC_POWER|ADC_SPEEDLL;delay_about_100ms(2);}t在上面的C语言代码中,我们将P1ASF赋值为0xff,这意味着P1的所有8个IO口都可以作为ADC采样口。然后延时一段时间,等待ADC模块初始化。

因为我使用的51单片机是8位单片机,所以传输10位ADC值需要两次。当AUXR1.1/ADRJ=0时,ADC转换结果寄存器格式如下:

当AUXR1.1/ADRJ=1时,ADC转换结果寄存器格式如下:

由此看来,获取ADC采样值高8位的C语言代码可以写成如下:

//获取高8位adc值BYTEget_adc_h8bit(BYTEch){ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|ch;_nop_();_nop_();_nop_();_nop_();//等待转换完成while(!(ADC_CONTRu0026amp;ADC_FLAG));ADC_CONTRu0026amp;=~ADC_FLAG;returnADC_RES;}t然后与剩余的2位ADC值相结合,得到完整的ADC采样值:

//获取10位adcWORDget_adc_res(BYTEch){WORDres=0;res=get_adc_h8bit(ch);分辨率u0026lt;u0026lt;=2;res|=ADC_LOW2;returnres;}使用电脑测量电压值

t上面介绍的一小部分现在我们已经学会了如何使用单片机的ADC模块,结合之前介绍的单片机的串口printf,我们已经可以对外部电压进行转换了值转换为1到1024之间的值并发送到计算机,但如何将其转换为电压值?

其实很简单。我的单片机的ADC模块的参考电压是5V。假设ADC采集的值为n,则对应的电压值为:

U=n*5V/1024t这样,C语言控制程序可以写成如下:

无效主{init_uart;adc_init();while(1){delay_about_100ms(2);printf('adc:%0.2frn',5.0*((float)get_adc_res(0))/1024.0);}}使用电脑测量电压

如上图所示,为了方便测试,将可变电阻和固定电阻串联,将单片机的P10口接到中间,通过串口调试助手就可以得到电压信息电脑:

用电压表测量此时电压,发现确实在3.05V左右:

现在调节可变电阻,发现串口传过来的电压值也发生变化:

至此,利用计算机进行电压测量就已经实现了。相信大家也应该了解ADC的作用。

欢迎在评论区一起讨论、提问。文章均为手写、原创。他们每天用最简单的方式介绍C语言、Linux等嵌入式开发。如果你喜欢我的文章,就关注吧,你可以看到最新的更新和往期文章。

返回列表
上一篇: 生活常识知识考点,生活常识知识考点总结
下一篇: 生活小常识反思,生活小常识反思怎么写