找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
楼主: lidong85
打印 上一主题 下一主题
收起左侧

stc8单片机自带ADC值跳动严重,采样数据波动很大

  [复制链接]
楼主
ID:226055 发表于 2020-12-4 10:20 | 显示全部楼层
    你的问题不像是来源于硬件,但使用STC8A8K64S4A12单片机确实有几点需要注意:
    1、相对于之前的STC15及更早的单片机系列,STC8A有了ADC电源引脚及参考电压引脚,所以单片机的最大IO口说是单片机总引脚数减去5(之前单片机是减去2,这个2就是VCC和GND)。
    2、STC8A的ADC电源引脚及参考电压引脚必须要接,否则单片机不会正常工作。参考电压引脚接2.5V基准电压没有任何问题,而且这样接只会提高ADC采样的精度。
    3、一定注意ADC引脚带采集信号的电压不要大于STC8A参考电压引脚的电压,即待测信号不要大于2.5V(如果采用的是2.5V电压基准)。
    4、附上一段ADC采集的源码,对采集的结果没有做任何软件滤波的,效果也是刚刚的。
  • /**************************************************************************
  • 功能描述:ADC口初始化
  • 入口参数:无
  • 返回值:无
  • *************************************************************************/  
  • void    ADC_config(void)  
  • {     
  •     ADC_CONTR|=0x80;        //开AD转换电源  
  •     delay_ms(10);           //适当延时等待AD转换供电稳定  
  •     ADC_CONTR|=0x0E;              //选择P0.6作为模拟功能AD使用  
  •     ADC_CONTR&=0xFE;              //选择P0.6作为模拟功能AD使用  
  •       
  •     ADCCFG&=0xFC;             //AD转换速度为416个时钟数转换一次  
  •     ADCCFG|=0x0C;             //AD转换速度为416个时钟数转换一次  
  •     ADC_CONTR&=0xDF;          //清AD转换完成标志  
  •          
  •     EADC=0;                   //禁止ADC转换中断  
  •     ADCCFG|=0x20;             //ADC转换结果ADC_RES存高4位,ADC_RESL存低8位  
  •     ADC_CONTR|=0x40;          //启动AD转换,ADC_START=1  
  • }  
  •   
  • /**************************************
  • 功能描述:ADC口检测AD转换值函数
  • 入口参数:无
  • 返回值:ADC 12位数据
  • ***************************************/  
  • uint16  Get_ADC12bitResult(void)      
  • {  
  •     uint16  AD_Dat=0;  
  •   ADC_CONTR&=0xDF;          // 将ADC_FLAG清0  
  •     ADC_CONTR&=0xBF;        //关闭AD转换,ADC_START=0  
  •     //12位AD结果的高4位放ADC_RES的低4位,低8位在ADC_RESL  
  •     AD_Dat = ADC_RES;              //将ADC_RES低4位移到应在的第9位至第12位  
  •     AD_Dat <<= 8;  
  •     AD_Dat|= ADC_RESL;         //将ADC_RESL的8位移到应在的低8位  
  •       
  •   ADC_CONTR|=0x40;           //启动AD转换,ADC_START=1  
  •     return  AD_Dat;   
  • }  
  •   
  • /***************************************************************************
  • 功能描述:读取ADC采集的原始值
  • 入口参数:无
  • 返回值:实时原始值
  • **************************************************************************/  
  • uint16  HandleADC(void)   
  • {  
  •     uint16 Temp_signal;  
  •    
  •   //读取采集的原始值  
  •     Temp_signal=Get_ADC12bitResult();   
  •   
  •   //返回采集的原始值  
  •     return Temp_signal;   
  • }



   5、再附上ADC的电路图部分及实物图片段,以鉴真相。






回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表