新唐芯片学习笔记——ADC

新唐芯片学习笔记——ADC

概述
NuMicro®NUC029xAN 包含一个12位逐次逼近型模数转换器(SAR A/D转换器) ,包含8个输入通道;NuMicro®NUC029FAE 包含一个10位逐次逼近型模数转换器(SAR A/D转换器),包含8个通道。 NUC029xAN 的A/D转换器支持四种操作模式:单次模式、Burst 模式、单周期扫描模式和连续扫描模式;NUC029xAN 只支持单次模式。A/D转换器可以通过软件、PWM或外部STADC引脚触发转换。
特性
–模拟输入电压范围: 0~AVDD
–2位分辨率和10位精度保证(NUC029xAN)
–10位分辨率和8位精度保证(NUC029FAE)
– 多达8路单端模拟输入通道
或4组互补模拟输入通道 (NUC029xAN)
– 高达760 kSPS采样率(NUC029xAN)
–300 KSPS (VDD4.5V - 5.5V) 、200 KSPS (VDD2.5V - 5.5V)转换率(NUC029FAE)
– 四种操作模式 (NUC029FAE只支持单次模式)

  • 单次模式: A/D在指定通道完成一次转换
  • Burst模式: A/D转换器采样和转换指定单个通道,并将结果循序的储存在FIFO中
  • 单周期扫描模式: A/D按顺序从编号最小的通道到编号最大的通道转换一次所有选定的通道。
  • 连续扫描模式: A/D转换器连续执行单周期扫描模式直到软件停止A/D转换。

– A/D转换可以开始于:

  • 通过软件写1到ADST位(ADCR[11])
  • PWM触发,可选择延时多少周期开始转换
  • 外部STADC引脚

– 每个通道的转换结果存储在相应数据寄存器内,并带有有效和溢出标志
–每个通道拥有独立的数据寄存器(NUC029xAN)
– 转换结果可以和指定的值相比较, 当转换结果和比较寄存器的设定值相匹配时,用户可设定是否产生中断请求.
– 通道 7 支持 3 个输入源:

  • 外部模拟电压
  • 内部 Band-gap 电压
  • 内部温度传感器输出(NUC029xAN)
    在这里插入图片描述
    基本配置
    ADC引脚功能在P1_MFP寄存器配置。建议关闭模拟输入引脚的数字输入通道,以避免漏电。用户
    可以通过配置P1_OFFD 寄存器关闭数字输入通道。ADC外设时钟可以在ADC_EN(APBCLK[28]) 使能。ADC外设时钟源在ADC_S(CLKSEL1[3:2]) 选择。时钟预分频在ADC_N(CLKDIV[23:16])设置。
    功能描述
    NUC029xAN:
    该A/D转换器通过逐次逼近的方式运行,分辨率为12位。该ADC有四种操作模式:单次模式、Burst
    模式、单次周期扫描模式和连续周期扫描模式。当用户想要改变操作模式或者模拟输入通道,为了
    避免错误的操作,软件必须提前清除ADST(ADCR[11])位为0。
    在这里插入图片描述
    操作模式
    NUC029xAN A/D转换器支持四种操作模式: 单次模式, Burst模式, 单周期扫描模式和连续扫描模式

单次模式
A/D转换器只对指定的一个通道进行一次转换。操作流程如下:

  1. 当软件设置ADST(ADCR[11])位为1或外部触发输入,A/D转换器开始转换。
  2. 当A/D转换器转换结束,NUC029xAN 的转换结果储存在对应通道的A/D数据寄存器中,而
    NUC029FAE 的转换结果存储在A/D数据寄存器中。
  3. ADF(ADSR[0])位置1. 如果ADIE(ADCR[1]) 位置1, ADC中断将产生。
  4. 在A/D转换过程中,ADST(ADCR[11])位保持为1。在A/D转换结束后,ADST位自动清0且A/D
    转换器进入空闲状态。
    注 1: 如果在单次模式,软件使能不止一个通道,只有编号最小的通道被选中,其他使能的通道将被忽略。
    注 2: 在ADC转换时,如果ADST位被清0,BUSY位将被立即清0,ADC不能完成当前转换且A/D转
    换器直接进入空闲状态。
    在这里插入图片描述

Burst模式
在Burst模式,A/D转换器采样和转换指定单个通道并将转换结果按序存放在FIFO中(最多8次采样)。操作步骤如下:

  1. 当ADCR 的ADST(ADCR[11])位通过软件或外部触发输入设置为1,A/D开始转换编号做小的通
  2. 当指定通道的A/D转换完成后,转换结果按顺序传输到FIFO中,只能通过A/D数据寄存器0访
    问。
  3. 当在FIFO中超过4次采样结果,ADF(ADSR[0]) 位将置1。这个时候,如果ADIE(ADCR[1])位置
    1,在A/D转换结束后,将产生一个ADC中断。
  4. 如果ADST(ADCR[11]) 位保持为1,将一直重复步骤2和3。当ADST(ADCR[11])位清0后,ADC
    将不能完成当前转换且A/D转换器直接进入空闲状态。
    注: 在Burst模式,如果软件使能不止一个通道,只有编号最小的通道被转换,其他使能的通道将被
    忽略。

单周期扫描模式
在单周期扫描模式,A/D转换器按编号从小到大采样和转换所有指定的通道一次。操作流程如下:

  1. 当ADST(ADCR[11])位通过软件或外部触发输入设置为1,编号最小的通道将开始A/D转换。
  2. 当每一个使能的通道A/D转换完成,转换结果按顺序传输到每个通道相应的A/D数据寄存器
  3. 当所有使能的通道转换完成,ADF(ADSR[0]) 位将置1。如果ADC中断功能使能,ADC中断产
    生。
  4. 在ADC完成一次周期转换,ADST(ADCR[11])位将自动清除为0且A/D转换进入空闲状态。如果
    在所有使能的ADC通道转换完成之前,ADST(ADCR[11])位清为0,ADC将不能完成当前转换
    且A/D转换器直接进入空闲状态。

在这里插入图片描述
连续扫描模式
在连续扫描模式下,A/D转换器循环转换CHEN(ADCR[7:0])使能的通道(最多8个通道),操作流程如下:

  1. 当ADST(ADCR[11])位通过软件或外部触发输入置1,A/D开始转换编号最小的通道。
  2. 当每个使能的通道A/D转换完成,每个使能通道的转换结果存储在每个使能通道对应的A/D寄存
    器中。
  3. 当A/D转换器按顺序完成所有使能通道的转换,ADF(ADSR[0])将置1 。如果ADC中断功能使
    能,ADC中断发生。如果软件没有清除ADST(ADCR[11])位,使能的通道将再一次从编号最小
    的通道开始转换。
  4. 如果ADST(ADCR[11])位保持为1,将重复执行步骤2~3。当ADST(ADCR[11])清0后,ADC不能
    完成当前转换且A/D转换器直接进入空闲状态。

在这里插入图片描述
外部触发输入采样和A/D转换时间
NUC029xAN:
在单次扫描模式,可以通过外部引脚触发A/D转换。TRGEN(ADCR[8]) 位设置为0使能ADC外部触发功能,设置TRGS(ADCR[5:4]) 为00b 选择外部触发输入为STADC 引脚。软件可以通过设置TRGCOND(ADCR[7:6]) 选择触发条件为下降/上升沿或低/高电平。如果选择电平触发,STADC引脚必须保持指定状态至少8个PCLK。在第9个PCLK,ADST(ADCR[11]) 位将被置1且开始转换。在电平触发模式下,如果外部触发输入保持有效状态,转换将持续进行。只有在外部触发条件消失,转换才会停止。如果选择边沿触发条件,高和低状态都至少持续4个PLCK。如果脉冲满足不了该条件,将被忽略。
注: 使能ADC外设时钟后,用户须在至少4个PCLK之后方能使能外部触发功能或使能ADC。

PWM 触发
NUC029xAN:
在单周期扫描模式,A/D可以通过PWM触发转换。设置TRGEN(ADCR[8])位为1使能ADC外部触发功能,设置TRGS(ADCT[5:4]为11b选择外部硬件触发输入源为PWM。当PWM触发使能时,设置PTDT(ADTDCR[7:0])位可以在PWM触发和ADC开始转换之间插入一个延时时间。
通过比较模式功能监控转换结果
NuMicro®NUC029系列ADC控制器提供两个比较寄存器(ADCMPR0 和 ADCMPR1)来监控最多两个通道。软件可以通过设置 CMPCH(ADCMPRx[5:3]) 选 择 监 控 哪 个 通 道 。
CMPCOND(ADCMPRx[2]) 位指定比较条件。如果CMPCOND(ADCMPRx[2]) 位为0,当转换结果小于CMPD[11:0](NUC029xAN)/ CMPD[9:0](NUC029xAN)的值时,内部匹配计数器将加1;如果CMPCOND(ADCMPRx[2]) 位为 1 ,当转换结果大于或等于 CMPD[11:0] ( NUC029xAN ) /CMPD[9:0](NUC029xAN)的值时,内部匹配计数器将减1。当CMPCH(ADCMPRx[5:3])指定的通道转换完成时,将自动触发一次比较。当比较结果和设定值相匹配,比较匹配寄存器加1,否则比较匹配计数器将清0。当匹配计数器到达(CMPMATCNT+1) 设置的值时,CMPF 位将置1,如果CMPIE(ADCMPRx[1])位设置为1,将产生一个ADC_INT 中断。在扫描模式,软件可以通过该功能监控外部输入引脚电压变化而不会增加软件负载。详细逻辑框图如下:
在这里插入图片描述
中断源
ADC 中断有 3 个中断源。当 ADC 完成转换, A/D 转换完成标志 ADF(ADSR[0]) 将被置 1 。
CMPF0(ADSR[1])和CMPF1(ADSR[2])为比较功能的比较标志位。当转换结果与ADCMPR0/1设置的条件匹配时,相应的位将置1。当ADF(ADSR[0]), CMPF0(ADSR[1]) 和 CMPF1(ADSR[2])标志有一个置1且相应中断使能位ADIE(ADCR[1])和CMPIE(ADCMPRx[1])置1,ADC中断将产生。软件可以清除这些标志位来取消中断请求。
在这里插入图片描述


/*************************ADC配置大体如下************************************************/
ADC:
	配置ADC:
	/* Enable ADC module clock */
    CLK_EnableModuleClock(ADC_MODULE);

    /* ADC clock source is 22.1184MHz, set divider to 7, ADC clock is 22.1184/7 MHz */
    CLK_SetModuleClock(ADC_MODULE, CLK_CLKSEL1_ADC_S_HIRC, CLK_CLKDIV_ADC(7));
	
	配置ADC时一定要端口的数字输入功能禁止
    /* Disable the P1.0 - P1.3 digital input path to avoid the leakage current */
    GPIO_DISABLE_DIGITAL_PATH(P1, 0xF);	//0000 1111
	
    /* Configure the P1.0 - P1.3 ADC analog input pins */
    SYS->P1_MFP &= ~(SYS_MFP_P10_Msk | SYS_MFP_P11_Msk | SYS_MFP_P12_Msk | SYS_MFP_P13_Msk);
    SYS->P1_MFP |= SYS_MFP_P10_AIN0 | SYS_MFP_P11_AIN1 | SYS_MFP_P12_AIN2 | SYS_MFP_P13_AIN3 ;	
	
GPIO  IP有个寄存器叫OFFD(OFF  Digital),关闭相应管脚的数字通路的意思。如果某个管脚配置
为模拟功能,例如:ADC、DAC、ACMP、SEG、COM、DH1、DH2、V1、V2、V3等功能,这
些管脚对应的OFFD  bit应该使能,关闭到数字区域的通路,避免内部数字器件不停的打开、关闭
而漏电	
	
	
	
NUC029xAN  A/D转换器支持四种操作模式:  单次模式,  Burst模式,  单周期扫描模式和连续扫描模
式
ADC continuous scan mode sample code :	
	//开启ADC
    /* Power on ADC module */
    ADC_POWER_ON(ADC);

    /* Set the ADC operation mode as continuous scan, input mode as single-end and
     enable the analog input channel 0, 1, 2 and 3 */
    ADC_Open(ADC, ADC_ADCR_DIFFEN_SINGLE_END, ADC_ADCR_ADMD_CONTINUOUS, 0xF);

    /* clear the A/D interrupt flag for safe */
    ADC_CLR_INT_FLAG(ADC, ADC_ADF_INT);

    /* start A/D conversion */
    ADC_START_CONV(ADC);

    /* Wait conversion done */
    while(!ADC_GET_INT_FLAG(ADC, ADC_ADF_INT));
	//转换结束后的值会放在使能通道对应的A/D寄存器中。

    /* clear the A/D interrupt flag for safe */
    ADC_CLR_INT_FLAG(ADC, ADC_ADF_INT);

    for(u32ChannelCount = 0; u32ChannelCount < 4; u32ChannelCount++)
    {
     i32ConversionData = ADC_GET_CONVERSION_DATA(ADC, u32ChannelCount);
     printf("Conversion result of channel %d: 0x%X (%d)\n", u32ChannelCount, i32ConversionData, i32ConversionData);
    }

    /* Wait conversion done */  ADC_ADF_INT: Convert complete interrupt flag
    while(!ADC_GET_INT_FLAG(ADC, ADC_ADF_INT));

    /* Stop A/D conversion */
    ADC_STOP_CONV(ADC);

    for(u32ChannelCount = 0; u32ChannelCount < 4; u32ChannelCount++)
    {
     i32ConversionData = ADC_GET_CONVERSION_DATA(ADC, u32ChannelCount);
     printf("Conversion result of channel %d: 0x%X (%d)\n", u32ChannelCount, i32ConversionData, i32ConversionData);
    }

    /* clear the A/D interrupt flag for safe */
    ADC_CLR_INT_FLAG(ADC, ADC_ADF_INT);	
	
	
	
	//关闭ADC
    /* Disable ADC module */
    ADC_Close(ADC);

    /* Disable ADC IP clock */
    CLK_DisableModuleClock(ADC_MODULE);

    /* Disable External Interrupt */
    NVIC_DisableIRQ(ADC_IRQn);	
	
	


  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于 jQuery 的事件,我可以和你分享一些学习笔记。 1. 绑定事件 在 jQuery 中,我们可以通过以下方式来绑定事件: ``` $(selector).event(function(){ // 事件处理程序 }) ``` 其中,`selector` 表示要绑定事件的元素,`event` 表示要绑定的事件类型,比如 `click`、`mouseover` 等等。事件处理程序则是在事件触发时要执行的代码块。 2. 多个事件绑定 我们可以通过 `on()` 方法来同时绑定多个事件: ``` $(selector).on({ event1: function(){ // 事件处理程序1 }, event2: function(){ // 事件处理程序2 } }) ``` 这样,当 `event1` 或 `event2` 中任意一个事件触发时,对应的处理程序都会被执行。 3. 解除事件 如果需要解除某个元素的事件处理程序,可以使用 `off()` 方法: ``` $(selector).off(event); ``` 其中,`event` 表示要解除的事件类型。如果不指定事件类型,则会解除该元素上所有的事件处理程序。 4. 事件委托 在 jQuery 中,我们可以使用事件委托来提高性能。事件委托是指将事件绑定到父元素上,而不是绑定到子元素上,然后通过事件冒泡来判断是哪个子元素触发了该事件。这样,当子元素数量较多时,只需要绑定一次事件,就可以监听到所有子元素的事件。 ``` $(selector).on(event, childSelector, function(){ // 事件处理程序 }) ``` 其中,`selector` 表示父元素,`event` 表示要绑定的事件类型,`childSelector` 表示要委托的子元素的选择器,事件处理程序则是在子元素触发事件时要执行的代码块。 以上是 jQuery 中事件的一些基本操作,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值