[技术问答] SC92F7251单片机ADC通道转换,只有一个通道数据正常,请指...

[复制链接]
377|6
 楼主 | 2019-9-3 22:08 | 显示全部楼层 |阅读模式
我用了两全通道一个测电流 一个测电压,AIN4 AIN5
void ADC_Init(uchar Channel)
{         ADCCFG0=0x30;//1设定ADC输入   
         ADCCON |= 0X80;
     ADCCON|=Channel;
       
}

uint ADC_ZH()        //AD转换

{

unsigned int Tad=0,MinAd=0x0fff,MaxAd=0x0000,TempAdd=0;
unsigned char t=0;
        

        for(t=0;t<10;t++)
        {
                ADCCON |= 0X40;        //开始 ADC 转换
                while(!(ADCCON&0x10));        //等待 ADC 转换完成
                ADCCON&=~(0X10);        //清中断标志位
                Tad = ((unsigned int)ADCVH<<4)+(ADCVL>>4); //取得一次转换值
        if (Tad>MaxAd)
        {
                MaxAd=Tad        ;//获得当前的最大值
        }
        if (Tad<MinAd)
        {
                MinAd=Tad;        //获得当前的最小值
        }
        TempAdd+=Tad;        //转换值累加
        }
        TempAdd-=MinAd;        //去掉最小值
        TempAdd-=MaxAd;        //去掉最大值
        TempAdd>>=3;        //求平均值
        
                return(TempAdd);
                       
}
void ad_dq()
{  
  
   
   ADC_Init(4);
   u1 = ADC_ZH();
   shuo=((unsigned long)u1*240/4096*11);
   
  
   ADC_Init(5);
   u2 = ADC_ZH();
   x= u2;//*24*30/4096*1000/47;
  
   


}

使用特权

评论回复
| 2019-9-4 10:31 | 显示全部楼层
ADC基准电压选的多大?两通道,测电压和电流,哪个数据是对的?

使用特权

评论回复
| 2019-9-4 11:27 | 显示全部楼层
本帖最后由 JIULU 于 2019-9-4 11:32 编辑

shuo=((unsigned long)u1*240/4096*11); x= u2;//*24*30/4096*1000/47;
公式是怎么得出来的?



使用特权

评论回复
 楼主 | 2019-9-4 20:29 | 显示全部楼层
JIULU 发表于 2019-9-4 11:27
shuo=((unsigned long)u1*240/4096*11); x= u2;//*24*30/4096*1000/47;
公式是怎么得出来的?
...

这人是我电路里的分压电阻与参考电压计算出来的

使用特权

评论回复
 楼主 | 2019-9-4 20:30 | 显示全部楼层
赛元MCU3 发表于 2019-9-4 10:31
ADC基准电压选的多大?两通道,测电压和电流,哪个数据是对的?

只有U1的电压是对的

使用特权

评论回复
| 2019-9-5 13:07 | 显示全部楼层
多通道的AD转换在赛元MCU应用指南里面写的很清楚了,仔细看资料。

使用特权

评论回复
| 2019-9-19 16:58 | 显示全部楼层
切换通道第一个数据好像是不准确的

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表