yhy08090 2021-07-31 09:42 采纳率: 0%
浏览 350

STC15F2K60S2 ADC采样数据不稳的问题

描述:

  1. ADC端口选取P1.3, P1.4,MCU这两个端口没有电路,直接连接一个可变电阻,供电电源3.3V;
  2. 软件初始化P1.3, P1.4为高阻模式, 波特率9600;
  3. 软件设置10位ADC精度;
  4. 测量P1.3, P1.4的电压,数据基本稳定在1.65--1.66V(可变电阻在中位);
  5. 软件读取寄存器的值,值一直不停跳动,而且上下浮动幅度很大(0x0141~0x0164),考虑到可能采样太快,这个数据是进行过软件滤波过的,每2毫秒采一次样,采集130次,去除最大值最小值后,128个数据的均值
  6. 这个数值跟公式计算ADC_Value = Vin/Vcc1024 = 1.65/3.31024 = 0x200相差很大,为什么?
uchar ch = 3;

P1M0 = 0x04; //P1.2设置为推挽,P1.3,P1.4高阻
P1M1 = 0x18;

/**********************************************
*****2ms秒@11.0592MHz********
***********************************************/
void Timer1Init(void)        //2毫秒@11.0592MHz
{
    AUXR |= 0x40;        //定时器时钟1T模式
    TMOD &= 0x0F;        //设置定时器模式
    TL1 = 0x9A;        //设置定时初始值
    TH1 = 0xA9;        //设置定时初始值
    TF1 = 0;        //清除TF1标志
    TR1 = 1;        //定时器1开始计时
    ET1 = 1;    //使能定时器0中断
}

/*----------------------------
初始化ADC
----------------------------*/
void InitADC()
{
    P1ASF = 0x18;                //设置P1.3、P1.4为AD口

        ADC_RES = 0;                    //清除结果寄存器
    ADC_RESL = 0;
        ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
        Delay(2);                       //ADC上电并延时
}

/* Timer1 */
void Timer1Isr() interrupt 3
{
    uint ADC_Value;
   
    ADC_CONTR &= !ADC_FLAG;         //清除ADC中断标志
   
    ADC_Value = (ADC_RES<<2);
    ADC_Value += ADC_RESL&0x3;
   
        ch++;
        if(ch >= 4)
      {
          ch = 3;
      }

    ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
}

  • 写回答

1条回答 默认 最新

  • dceacho 2021-07-31 10:21
    关注

    定时器中不判断ADC有没有转换完成?

    评论

报告相同问题?

问题事件

  • 修改了问题 7月31日
  • 创建了问题 7月31日

悬赏问题

  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上
  • ¥15 提问一个关于vscode相关的环境配置问题,就是输入中文但是显示不出来,代码在idea可以显示中文,但在vscode不行,不知道怎么配置环境
  • ¥15 netcore使用PuppeteerSharp截图
  • ¥20 这张图页头,页脚具体代码该怎么写?
  • ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
  • ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂