打印
[牛人杂谈]

N76E003之ADC电量检测(程序、分析、电路)

[复制链接]
1618|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
先来看看N76E003 ADC工作方式

再看下相关寄存器,方便理解上图

现在我们只需要配置好以上几个寄存器,就可以开始使用ADC了,为了保证程序的及时性,我们采取ADC中断的方式进行处理,ADCF是中断标志位。(上图ETGSEL中,ADC模块提供了外部触发的功能,可以使用PWM上升沿,下降沿,中点等进行触发,该功能在N76E003驱动夏普PM2.5传感器时使用到了,简单而言就是依托PWM驱动传感器(里面的LED),然后ADC在PWM的中点进行采样,获取正确的(光电二极管电压))

使用特权

评论回复
沙发
xinpian101|  楼主 | 2019-6-16 17:57 | 只看该作者
接下来让我们配置相关代码(此次代码,源自新唐官方例程修改)
#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"



void ADC_ISR (void) interrupt 11
{
        if(ADCF)
        {
                clr_ADCF;//清除ADC转化完成标志,进行下一次转换
                set_ADCS;//当单次转换完成后,ADCS会硬件置0,需要重新使能
                printf ("\n Value = 0x%bx",ADCRH);//输出测量值高八位
        }
}
void main (void)
{
  Set_All_GPIO_Quasi_Mode;
        InitialUART0_Timer1(9600);//串口0配置,引脚P06\07
        Enable_ADC_AIN6;//配置使能P03,作为AIN6。
        //P04_FALLINGEDGE_TRIG_ADC;// 使用P04下降沿触发中断,使                            用外部触发时,可以不使能ADCS。
  set_EADC;//使能ADC中断
        EA = 1;
        set_ADCS;//使能ADCS,启动ADC测量
        while(1);
}

使用特权

评论回复
板凳
xinpian101|  楼主 | 2019-6-16 17:57 | 只看该作者
接下来就是ADC采样电路的设计,下图为一个典型的分压电路,前期可以大致确定ADC的电压范围,建议加上R1,以此保护单片机。

其实N76e003测量电压时,可以先通过内部自带的带隙电压,逆推出VDD电压,进行计算

实际电压X=测量值Y(VDD/4096)
VDD=4096(UID中的带隙电压/ADC测量得到的带隙电压)
这样就可以得到VDD,然后通过以上公式对测量值进行计算,得到实际电压

使用特权

评论回复
地板
xinpian101|  楼主 | 2019-6-16 18:15 | 只看该作者

使用特权

评论回复
5
heisexingqisi| | 2019-6-16 19:44 | 只看该作者
12位,可以,给力。

使用特权

评论回复
6
heisexingqisi| | 2019-6-16 19:44 | 只看该作者
新唐的配置都挺好的,不知道哪个系列有DAC

使用特权

评论回复
7
小明的同学| | 2019-6-16 23:01 | 只看该作者
这个还真是好用

使用特权

评论回复
8
小灵通2018| | 2019-6-16 23:28 | 只看该作者
ADC功能很厉害。

使用特权

评论回复
9
小明的同学| | 2019-6-17 09:10 | 只看该作者
ADC的性能这么好。
下次我也用用看。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

113

主题

1493

帖子

1

粉丝