开源可编程手环学习第七步--模数转换
第一节 模数转换硬件电路
本实验将P01作为模数转换接口,使用两个电阻分压来测量电池的电压,如下图所示:
开发板系列教程:http://pan.baidu.com/s/1bnBJsMr
手环DIY开源学习教程:http://pan.baidu.com/s/1eQlUGiI
阅读软件:http://pan.baidu.com/s/1o6ELGCE
淘宝小店:shop115904315.taobao.com
第二节 ADC寄存器
2.1 GPADC介绍
DA14580集成一个高速超低功耗的10位通用模数转换器。可以工作于单端模式也可以工作于差分模式。ADC模块有一个1.2V的电压校准器,作为满量程的参考电压。
该ADC模块是10位动态模数转换,转换时间为65ns;最大的采样率为3.3MHz;超低功耗(在100KHz的采样速率下典型供电电流为5uA);有单端与差分两个输入比例;有4个单端或者2个差分输入通道;电池检测功能;斩波器功能;偏移和零刻度调整;公共端模式输入电平调整。
2.2 寄存器介绍
2.2.1 ADC控制寄存器
15位:使LDO输出为0V;
14位:打开LDO;
13位:通过相反的ADC符号获取两个采样值来取消内部的偏置电压,强烈建议用于DC的测量;
12位:在中间刻度采样。
11位:ADC模式选择,’0’为差分模式,’1’为单端模式;
10位:’0’表示默认模式,’1’表示输入和输出的相反信号来取消内部的偏置与低频;
9:6位:ADC输入选择,这个设置必须在GP_ADC_START位使能之前。如果GP_ADC_SE=1即为单端模式,则0000表示选择P00引脚,其余见上图,没有在上图中出现的组合值时被忽略的。如果GP_ADC_SE=0即为差分模式,则0000表示P00与p01,其他任意组合表示P02与P03。
5位:ADC中断控制,’0’关闭ADC中断,’1’使能ADC中断;
4位:ADC中断标志位,’1’表示模数转换准备好并且已经产生一个中断,在写任何值到GP_ADC_CLEAR_INT_REG之前必须被清除;
3位:ADC时钟选择,’0’表示使用内部高速ADC时钟,’1’表示使用数字时钟;
2位:保留不使用,保持0;
1位:’0’表示ADC转换准备好,’1’表示开始一次转换,在转换之后该位被清零,产生ADC中断;
0位:’0’表示关闭ADC并处于复位状态,’1’表示使能ADC并开始采样。
2.2.2 ADC第二控制寄存器
15:4位:保留不使用;
3位:对LDO增加20uA的常量负载电流使ADC参考电压的纹波最小;
2位:使能LDO的动态负载电流使ADC参考电压的纹波最小;
1位:输入电压值,’0’表示输入电压最大1.2V,’1’表示输入电压通过3倍衰减最大3.6V;
0位:使能几个信号的延时功能。
2.2.3 ADC正偏移寄存器15:10位:保留不使用;
9:0位:正值偏移调整。
2.2.4 ADC负偏移寄存器15:10位:保留不使用;
9:0位:负值偏移调整。
2.2.5 ADC清除中断寄存器15:0位:写任何值到该寄存器,清除ADC中断,读取则返回0。
2.2.6 ADC结果寄存器15:10位:保留不使用;
9:0位:ADC转换结果。
2.2.7 ADC延时寄存器15:8位:保留不使用;
7:0位:定义LDO使能的延时值。
2.2.8 ADC第二延时寄存器15:8位:定义ADC开始的延时值,默认为17us;
7:0位:定义ADC使能的延时值,默认为16us。
2.3 寄存器配置讲解#define GP_ADC_CTRL_REG (* ( volatile uint16*)0x50001500)
#define GP_ADC_CTRL2_REG (* ( volatile uint16*)0x50001502)
#define GP_ADC_OFFP_REG (* ( volatile uint16*)0x50001504)
#define GP_ADC_OFFN_REG (* ( volatile uint16*)0x50001506)
#define GP_ADC_CLEAR_INT_REG (* ( volatile uint16*)0x50001508)
#define GP_ADC_RESULT_REG (* ( volatile uint16*)0x5000150A)
#define GP_ADC_DELAY_REG (* ( volatile uint16*)0x5000150C)
#define GP_ADC_DELAY2_REG (* ( volatile uint16*)0x5000150E)
ADC初始化寄存器配置:
使能LDO,单端模式,默认符号,则GP_ADC_CTRL_REG =0x4800;
使能ADC,则GP_ADC_CTRL_REG =0x4801;
增加常量电流减少纹波,输入最大电压为3.6V,允许信号延时,则GP_ADC_CTRL2_REG =0x4800;
选择P01作为输入引脚,则GP_ADC_CTRL_REG =0x4841;
读取转换结果,先启动转换GP_ADC_CTRL_REG |= 0x0002;等待转换完成while(GP_ADC_CTRL_REG&0x0002);清除中断标志GP_ADC_CLEAR_INT_REG=0;读取结果adc_result =GP_ADC_RESULT_REG;
第三节 ADC实验
实验需要使用的模块有:手环,Jlink调试工具,一根手环下载调试线。
将JLINK通过下载调试线连接到手环的USB调试接口,JLINK插在有拨码开关的一端,注意丝印标注一一对应,将JLINK插上电脑的USB口,如下图所示:
打开ADC实验的Keil工程Simple_ADC.uvproj,位于目录:..\ 4_实战教程\1_裸机篇\3_模数转换实验\模数转换实验,如下图所示:
使用手环调试下载线连接好Jlink,编译,点击DEBUG,然后点击全速运行,根据电池电量,LED亮的数量随着变化,如下图所示:
开发板系列教程:http://pan.baidu.com/s/1bnBJsMr
手环DIY开源学习教程:http://pan.baidu.com/s/1eQlUGiI
阅读软件:http://pan.baidu.com/s/1o6ELGCE
淘宝小店:shop115904315.taobao.com