【电机控制器】STC8H1K芯片——ADC电压采集
前言
提示:以下是本篇文章正文内容,下面案例可供参考
一、ADC
1.ADC初始化
1.ADC_CONTR
2.ADCCFG
3.ADCTIM
4.代码
void ADC_Init(void)
{
ADCTIM=0X3F;
ADCCFG=0X2F;
ADC_CONTR=0X80;
}
2.ADC读取
1.ADC_RES、ADC_RESL
2.代码
unsigned int ADC_Read(int channel)
{
ADC_RES=0;
ADC_RESL=0;
ADC_CONTR=(ADC_CONTR&0XF0)|0X40|channel;
_nop_();
_nop_();
_nop_();
_nop_();
while((ADC_CONTR&0X20)==0);
ADC_CONTR&=~0X20;
return ((unsigned int)ADC_RES<<8|ADC_RESL);
}
3.VREF电压读取——MCU工作电压
1.MCU工作电压计算公式
2.代码
unsigned int VREF_GetValtage(void)
{
unsigned int res;
unsigned char i;
float Valtage_VREF;
ADC_Read(ADC_CHANEEL_15);
ADC_Read(ADC_CHANEEL_15);
res=0;
Valtage_VREF=0.00;
for(i=0;i<8;i++)
{
res+=ADC_Read(ADC_CHANNEL_15);
}
res>>=3;
Valtage_VREF=(ADC_10BIT*ADC_BGV/res);
return (unsigned int)(Valtage_VREF*ADC_GAIN);
}
4.ADC被转换通道的输入电压读取
1.ADC被转换通道的输入电压计算公式
2.代码
unsigned int OverLoad_GetValtage(void)
{
unsigned int res;
unsigned char i;
unsigned int adcvin;
float Valtage_Overload;
ADC_Read(ADC_CHANNEL_10);
ADC_Read(ADC_CHANNEL_10);
res=0;
Valtage_Overload=0.00;
for(i=0;i<8;i++)
{
res+=ADC_Read(ADC_CHANNEL_10);
}
res>>=3;
adcvin=VREF_GetValtage();
Valtage_Overload=(adcvin*res/ADC_10BIT);
return (unsigned int)(Valtage_Overload);
}
5.ADC转换速度
二、实验——VREF——MCU工作电压
1.原理图
2.USB供电
3.锂电池供电
三、参考资料
STC8H1K08-36I-TSSOP20-规格书.PDF
STC8H单片机利用 ADC 第 15 通道测量外部电压或电池电压
51单片机——串口通信(发送和接受数据)
STC单片机基于Keil平台在线调试仿真
printf函数在Keil 开发C51单片机当中的使用细节
总结
本文仅仅简单介绍了【电机控制器】STC8H1K芯片——ADC电压采集,评论区欢迎讨论。