本帖最后由 kkhkbb 于 2018-3-19 09:01 编辑
一、概述
ADC简介
ADC是A/D转换部件,单片机不能直接处理模拟量,所以需要ADC将模拟量转换为数字量后,在进行处理。在使用单片机进行模拟数据处理的过程中,ADC至关重要。ADC以下几种类型: - 积分型:积分型AD工作原理是将输入电压转换成时间(脉冲宽度信号)或频率(脉冲频率),然后由定时器/计数器获得数字值。
- 逐次比较型:逐次比较型AD由一个比较器和DA转换器通过逐次比较逻辑构成,从MSB开始,顺序地对每一位将输入电压与内置DA转换器输出进行比较,经n次比较而输出数字值。其电路规模属于中等。
- 并行比较型/串并行比较型:并行比较型AD采用多个比较器,仅作一次比较而实行转换,又称FLash(快速)型。
- Σ-Δ(Sigma delta)调制型:Σ-Δ型AD由积分器、比较器、1位DA转换器和数字滤波器等组成。
- 电容阵列逐次比较型:电容阵列逐次比较型AD在内置DA转换器中采用电容矩阵方式,也可称为电荷再分配型。
- 压频变换型:压频变换型(Voltage-Frequency Converter)是通过间接转换方式实现模数转换的。
二、硬件电路
在iCore3双核心开发板中,使用了个ADC进行电源监控分配如下表所示: | |
ADC1-14通道 | 5V电压 |
ADC1-15通道 | 输入电流 |
ADC3-15通道 | 1.2V电压 |
ADC3-4通道 | 3.3V电压 |
ADC3-5通道 | 2.5V电压 |
表9_0 ARM 电源监测ADC使用分配表
三、实验原理
使用ADC的5个通道,分别监测5种电源信息,使用程序进行相应的转换后,使用putty串口工具将采集到电源信息打印到PC机屏幕上,了解开发板的电源状态。
电压监控硬件连接示意图:
图9_1电压监测硬件连接图
由上图可知:VCC =(1 + R1 / R2)*ADC_IN;
故知:VCC = (1 + 49.9K / 10K)*ADC_IN = 6*ADC_IN;
其他电源监控同理可得:D3V3 = 2*ADC_IN;
A2V5 =2*ADC_IN;
D1V2 =ADC_IN。
电流监控硬件连接示意图如下图:
图9_2电流监测硬件连接图
由 ZXCT1009F 的原理可知:ADC_IN = 0.01 * (VCC - LOAD)*R2;
通过 R1 的电流:I = 100 *ADC_IN /R2 /R1;
带入 R2 = 10K,R1 = 0.02:得出:I =ADC_IN / 2;
四、源代码
主函数
//--------------------------- Include ---------------------------//
#include "..includeled.h"
#include "..includemain.h"
#include "..includeusart.h"
#include "..includeadc.h"
#include "..fwlibincSTM32f4xx_gpio.h"
//---------------------------- Define ---------------------------//
//-------------------------- Variable ---------------------------//
//--------------------- Function Prototype ----------------------//
//--------------------------- Function --------------------------//
/*
* Name : main
* Description : ---
* Author : ysloveivy.
*
* History
* --------------------
* Rev : 0.00
* Date : 11/21/2015
*
* create.
* --------------------
*/
int main(void)
{
int i;
//初始化
led.initialize();
LED_RED_ON;
usart4.initialize(115200);
adc.initialize();
usart4.printf("x0c"); //清屏
usart4.printf(" 33[1;32;40m"); //设置终端字体为绿色
usart4.printf("rnrnhello! I am iCore3!rnrnrn");
while(1){
for(i = 0;i < 10000000;i++);
//ADC 监控电源
for(i = 0;i < 5;i++){
adc.read(i);
}
//打印系统供电电压,
usart4.printf(" [V] %4.2fV, ",adc.value[0] * 6);
usart4.printf("[I] %3.0fmA , ",adc.value[1] / 2* 1000.);
usart4.printf("[1.2V] %4.2fV, ",adc.value[2]);
usart4.printf("[3.3V] %4.2fV, ",adc.value[3] * 2);
usart4.printf("[2.5V] %4.2fVr",adc.value[4] * 2);
}
}
五、实验现象
iCore3 双核心板红色 LED 常亮, 串口一直向终端输出电源监控的数据。
图9_3实验效果图
六、代码包下载
网盘:http://pan.baidu.com/s/1o7wSEO6