在本教程中,我将向您展示如何在LPC1768中使用ADC,这是ARM Cortex-M3 MCU。ADC外围设备是现代微控制器的重要组成部分,因为它有助于我们将像传感器的模拟设备相互连接到MCU。如果您对使用MCU的接口模拟传感器感兴趣,则此LPC1768 ADC教程将非常有用。
重要的提示:我已经在上一个教程中提到过这个,但我会在每个LPC1768教程中重复它。伟德老虎机手机版从官方NXP网站下载LPC1768 MCU的数据表和用户手册。我无法详细解释/讨论每个主题。您必须在这些文件中查找讨论主题并收集其他信息。
介绍
ADC是短暂的模拟到数字转换器。顾名思义,ADC将模拟信号转换为数字信号。为什么我们需要这样的转换?要了解这一点,我们必须首先知道正在转换哪种信号。
涉及音频记录系统的示例。麦克风用于捕获声音。声音是连续的模拟信号,如果我们想通过微处理器或微控制器等数字系统存储,编辑或传输它,那么它必须转换为数字信号,这是电压幅度的简单数字表示原始信号的电流。
如果我们希望使用温度,声音,图像,压力等这样的这种模拟信号,那么,模数转换器是转到设备。几乎所有现代ADC实现都是IC,以降低匹配组件的复杂性。
ADC在LPC1768 MCU中
LPC1768 MCU由8通道12位连续近似型模拟到数字转换器组成。这里,8个通道表示您可以一次在MCU的8个不同模拟输入引脚上转换8个不同的模拟信号。
12位是ADC的分辨率,其表示ADC可以为给定的模拟参考电压产生ADC的离散值的数量。在电压方面也可以电压表示分辨率,这是ADC可以检测的最小可能的模拟电压。
由于,LPC1768中的ADC具有12位的分辨率,它可以产生2 ^ 12个离散值的一系列模拟电压,这通常在0V和3.3V之间。
在电压= V方面的分辨率ref- V.redn./ 2.M.
在哪里,五ref是LPC1768的正参考电压,为3.3V
V.redn.是LPC1768为0V的负参考电压
M是ADC的分辨率,为LPC1768为12。
代替这些值,我们将伏特的分辨率达到0.000805V。
ADC的另一个重要参数是转换率或采样率。LPC1768 MCU中ADC的转换率为200kHz。
LPC1768 ADC引脚
与ADC相关的引脚LPC1768 MCU中列出了下表。
别针 |
港口 | 当针ADC使用PIN时,其电压不应超过VDDA。如果引脚不用于ADC,则它是5V耐受。 |
AD0.0. |
P0.23. | |
AD0.1. | P0.24 |
|
AD0.2. |
P0.25. | |
ad0.3 | P0.26 |
|
ad0.4 |
P1.30. | |
ad0.5. | P1.31 |
|
AD0.6 |
P0.3. | |
ad0.7 | P0.2. |
|
V.ref,V.redn. |
ADC和DAC(隔离3.3V和0V)的正极和负参考电压 |
|
V.达达,V.SSA. | ADC电源引脚(隔离3.3V和0V) |
LPC1768 ADC寄存器
现在,让我们看看与LPC1768 MCU的ADC模块相关联的寄存器。
登记 |
功能 | 描述 |
adcr. | A / D控制寄存器。 | 用于启动ADC,选择操作模式,频道选择,设置时钟部门。 |
adgdr. |
A / D全球数据寄存器。 | 包含最新A / D转换的数据 |
Adinten. | A / D中断使能寄存器。 | 用于在通道完成转换时启用中断。 |
addr0 - addr7. |
A / D通道数据寄存器。 | 这些寄存器持有最近在该相应信道中的转换结果的结果。 |
adstat |
A / D状态寄存器。 | 持有所有ADC频道的状态。 |
adtrm. |
A / D修剪寄存器。 | 包含ADC ADC的修剪值。 |
请在参考手册中查看这些寄存器。我们将使用ADCR,ADGDR和ADDRX频繁寄存器。
ADC模式
基本上,ADC模块可以使用两种方式。一个是软件控制模式,另一个是突发模式(或硬件模式)。
在软件控制模式下,在转换期间只有一个通道,并且只有一个转换就可以进行活动。要再次转换,您必须重复此过程。
在硬件扫描模式或突发模式下,转化将在从LSB(AD0.0)开始的任何数量的通道上连续发生,然后朝向MSB(AD0.7)。
LPC1768中的设置和程序ADC
软件控制模式
现在让我们看看设置ADC寄存器并在软件控制模式下初始化ADC转换的必要步骤。
缺省情况下,LPC1768的某些外设通过禁用其时钟而禁用。这是为了节省电力。为了从外设寄存器读取或写入外设寄存器,您必须检查是否启用了外设。
使用外围设备寄存器或PCONP的电源控制使能或禁用外围块。ADC在重置时禁用。因此,首先通过设置12启用ADC钍PCONP寄存器中的位。
lpc_sc-> pconp | =(1 << 12);
ADCR寄存器中的ADC有另一个功率控制。默认情况下,ADC处于offult-Down模式,这由ADCR寄存器的PDN(位21)控制。要使ADC运行,我们必须设置PDN位。
lpc_adc-> adcr | =(1 << 21);
使用ADCR寄存器,我们还可以选择ADC通道,并使用SEL [7:0]和CLKDIV [15:8]位设置ADC的时钟分频器。
我们将选择AD0.0通道并将ADC时钟分频器设置为1。
LPC_ADC-> ADCR | =(1 << 0)|(1 << 8);
现在,我们可以通过将ADCR中的开始[26:24]位设置为001即001,立即启动转换。钍位设置为1。
lpc_adc-> adcr | =(1 << 24);
现在,我们必须等到转换完成通过监视相应的ADDRX寄存器中的完成(位31)位。由于我们使用了AD0.0,我们必须监视ADDR0寄存器,并查看其DONE BIT是否设置为1,
而((lpc_adc-> addr0&(1 << 31))== 0);
完成后,结果存储在AddR0寄存器中[15:4]位。我们可以通过将ADDR0位转换为4个位置并屏蔽12位来提取结果。
int结果=((lpc_adc-> addr0 >> 4)&0xfff);
突发模式
现在,让我们看看设置ADC寄存器并以突发模式初始化ADC转换的必要步骤。
PCONP寄存器和ADCR寄存器中的电源设置和时钟分频器设置即使在突发模式下也保持相同。
lpc_sc-> pconp | =(1 << 12);
LPC_ADC-> ADCR | =(1 << 21)|(1 << 8);
现在,我们可以通过在ADCR [7:0]中设置相应的SEL位来选择更多的通道。让我们启用AD0.0和AD0.1。
LPC_ADC-> ADCR | =(1 << 0)|(1 << 1);
然后,我们可以通过将ADCR寄存器中的突发位(位16)设置为1来开始突发转换。
lpc_adc-> adcr | =(1 << 16);
我们可以从ADGR寄存器中获取ADC的频道编号以及ADC的结果。
如果要查看ADGDR,则位[26:24]包含通道号,位[15:4]包含结果。我们可以如下提取:
unsigned long valueadgdr = lpc_adc-> adgdr;
int channel =((valueadgdr >> 24)&0x07);
int结果=((valueadgdr >> 4)&0xfff);
结论
LPC1768 MCU中使用ADC的简单教程。我已经解释了基本功能OD ADC,其模式或操作,与ADC相关联的寄存器和用于软件控制和突发模式ADC转换的编程设置。