历史上的今天
今天是:2024年12月23日(星期一)
2019年12月23日 | STM8L之ADC
2019-12-23 来源:eefocus
STM8L之ADC


/*******************************************************************************
*名 称: Hal_Comm_GetBatADC
*功 能: 获取电池电量信息
*入口参数: 无
*出口参数: 电量AD值
*说 明:
*******************************************************************************/
unsigned int Hal_Comm_GetBatADC(void)
{
unsigned int Result = 0, value_adc = 0;
unsigned char index = 0;
GPIO_Init(VOL_ADC_PORT,VOL_ADC_PIN,GPIO_Mode_In_FL_No_IT);//VOL_ADC
ADC1->CR1 |= 0x01;//使能AD
ADC1->CR3 &= ~0x1F;// 选择采样时间 384 周期 通道清空
ADC1->CR3 |= 0x00; // channel 0 is selected
ADC1->SQR[0] = ADC1->SQR[1] = ADC1->SQR[2] = ADC1->SQR[3] = 0x00;
ADC1->SQR[3] = 0x01;// 选择通道0扫描
ADC1->SR &= 0x00;// conversion not complete
ADC1->SR = 0; // conversion 标识清空
ADC1->CR1 |= 0x03;//使能AD并开始转换
while(!(ADC1->SR & 0x01)); //waitloop bit0: 1 complete 0 not complete
for(index = 0; index < 10; index++)
{
ADC1->SR = 0; // conversion 标识清空
ADC1->CR1 |= 0x03;//使能AD 开始转换
while(!(ADC1->SR & 0x01));//waitloop conversion complete
Result = ADC1->DRH; //总共计算16bit的值,但ADC为12 bit 长度
Result <<= 8; //ADC1->DRH为高8位,
Result += ADC1->DRL; //ADC1->DRL为低8位
value_adc += Result;
if(index != 0)value_adc = value_adc/2; //获取多次数据,计算平均值
index++;
}
ADC1->CR1 &= 0xFE;//关闭AD
ADC1->CR3 &= ~0x1F;//选择通道
ADC1->CR3 |= 0x11;
return value_adc;
}
我们一般在设计原理图的时候会把ADC的输入电压范围设定在:0~3.3v,如果设置ADC为12位的,那么12位满量程对应的就是3.3V,12位满量程对应的数字值是:2^12。数值0对应的就是0V。如果转换后的ADC数值为X,X对应的模拟电压为Y,那么会有这么一个等式成立:2^12/3.3=X/Y,=>Y=(3.3*X)/2^12
在我们的智能锁项目中,满量程Vref为3.31V,总电压(M6V)/测试电压(VOL_ADC) = 3
4096/3.31 = value_adc/Va
Va = value_adc * 3.31 / 4096
总电压 = Va * 3
即程序中的vin = value_adc * 3.31 * 3 / 4096
上一篇:STM8 低功耗设计
史海拾趣
|
ADS2005A快速入门中文教程.doc ADS Momentum 仿真设计流程(英文).doc ADS Momentum 简介.doc ADS功能概述(ADS2005A,ADS2004A,ADS2003C).doc ADS中常用的数据文件.doc ADS主要仿真器介绍(ADS2005A, ADS2004A, ADS2003C).doc… 查看全部问答> |
|
就是双击任务栏上lan图标或wifi图标会弹出的窗口,如何在程序中调出这个窗口? 用ctlpnl.exe cplmain.cpl...貌似只能弹出网络控制面板中网络设置的窗口,而不是连接状态的窗口。… 查看全部问答> |
|
最近我们的产品发现了这个现象. 我在本论坛上搜索,发现这个问题真不少.当然,有些朋友很偏激,说ti是烂货,心情我是很理解的,因为我也遇到了这个问题,也很烦,但所有的帖子多没有下文,是否解决这个问题? 但我根据经验,和所有出现这个情况的用户的使用 ...… 查看全部问答> |
|
实训工程1 简易播放器项目需求基本需求:1. 使用Buzz播放音乐,音乐数据存在Code Flash空间2. 开机后在LCD显示所有音乐,可以通过上、下键翻页。当前音乐有指示。按确定键播放音乐。3. 播放音乐的同时在LCD1602屏上显示音乐的信息:演唱者,时间等 ...… 查看全部问答> |
|
之前用IAR for ARM感觉印象不错~ 最近要用51,之前都是用的Keil,打算试试IAR,于是去下载了IAR for 8051 我用的单片机是STC89C5608AD 但是程序编译之后烧进去不能执行啊!!代码已经简单到不能再简单了啊!!! #include int main() { &nb ...… 查看全部问答> |




