[牛人杂谈] N76E003之ADC电量检测(程序、分析、电路)

[复制链接]
2135|8
 楼主| xinpian101 发表于 2019-6-16 17:52 | 显示全部楼层 |阅读模式
先来看看N76E003 ADC工作方式
191495d06113a242f9.png
再看下相关寄存器,方便理解上图
588035d061149a3f6c.png
现在我们只需要配置好以上几个寄存器,就可以开始使用ADC了,为了保证程序的及时性,我们采取ADC中断的方式进行处理,ADCF是中断标志位。(上图ETGSEL中,ADC模块提供了外部触发的功能,可以使用PWM上升沿,下降沿,中点等进行触发,该功能在N76E003驱动夏普PM2.5传感器时使用到了,简单而言就是依托PWM驱动传感器(里面的LED),然后ADC在PWM的中点进行采样,获取正确的(光电二极管电压))

 楼主| xinpian101 发表于 2019-6-16 17:57 | 显示全部楼层
接下来让我们配置相关代码(此次代码,源自新唐官方例程修改)
  1. #include "N76E003.h"
  2. #include "Common.h"
  3. #include "Delay.h"
  4. #include "SFR_Macro.h"
  5. #include "Function_define.h"



  6. void ADC_ISR (void) interrupt 11
  7. {
  8.         if(ADCF)
  9.         {
  10.                 clr_ADCF;//清除ADC转化完成标志,进行下一次转换
  11.                 set_ADCS;//当单次转换完成后,ADCS会硬件置0,需要重新使能
  12.                 printf ("\n Value = 0x%bx",ADCRH);//输出测量值高八位
  13.         }
  14. }
  15. void main (void)
  16. {
  17.   Set_All_GPIO_Quasi_Mode;
  18.         InitialUART0_Timer1(9600);//串口0配置,引脚P06\07
  19.         Enable_ADC_AIN6;//配置使能P03,作为AIN6。
  20.         //P04_FALLINGEDGE_TRIG_ADC;// 使用P04下降沿触发中断,使                            用外部触发时,可以不使能ADCS。
  21.   set_EADC;//使能ADC中断
  22.         EA = 1;
  23.         set_ADCS;//使能ADCS,启动ADC测量
  24.         while(1);
  25. }
 楼主| 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 | 显示全部楼层
heisexingqisi 发表于 2019-6-16 19:44 | 显示全部楼层
12位,可以,给力。
heisexingqisi 发表于 2019-6-16 19:44 | 显示全部楼层
新唐的配置都挺好的,不知道哪个系列有DAC
小明的同学 发表于 2019-6-16 23:01 | 显示全部楼层
这个还真是好用
小灵通2018 发表于 2019-6-16 23:28 | 显示全部楼层
ADC功能很厉害。
小明的同学 发表于 2019-6-17 09:10 | 显示全部楼层
ADC的性能这么好。
下次我也用用看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

129

主题

1650

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部