打印
[STM8]

求助,AD多通道的转换

[复制链接]
1036|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
WATS|  楼主 | 2016-7-7 11:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AD, ADC, dc, pi, IO
本帖最后由 WATS 于 2016-7-8 09:26 编辑

STM8S的多通道转换,在切换通道时出现波动,搞了好久也没解决,求助。下面是我写采用中值滤波,不知道哪里出了问题,AIN1又收不到数据uint8_t Temp_ADChanl(void)
{
  u8 Buffer=0,i=0,j=0;
  u16 tem=0;

  static u16 buf[N]={0};
  static u8 AD_ADON_Flag=1,n=0;
  if(ADC1->CR3&0X40)//缓冲区溢出标志位
  {
    ADC1->CR3&=~0X40;//清除缓冲区标志位

    if(AD_ADON_Flag)//通道选择标志位
    {
      if( n<N )//采用中值滤波
      {GPIO_WriteHigh(GPIOC,GPIO_PIN_5);
//      TEMPVal0=ADC_GetVal();//获取AD转换的值
        buf[n++] = ADC1_GetBufferValue(Buffer);//获取缓冲区的值
        ADC1->CR1 |= 0X01; //启动ADC   继续获取AIN0的AD值
        ADC1->CR1 |= 0X01; //启动ADC   继续获取AIN0的AD值
      }
      else
      {GPIO_WriteHigh(GPIOC,GPIO_PIN_5);
        GPIO_WriteHigh(GPIOE,GPIO_PIN_5);
        GPIO_WriteHigh(GPIOC,GPIO_PIN_7);
        n=0;

        ADC_Init();//AD初始化

        ADC1->CSR|=0X01;//切换到通道1
        AD_ADON_Flag=0; //通道选择的标志位

        for(i=0;i<N-1;i++)
          for(j=0;j<N-i;j++)
            if(buf[j]>buf[j+1])
            { tem=buf[j]; buf[j]=buf[j+1]; buf[j+1]=tem; }

        TEMPVal0 = buf[(N+1)/2];
        TEMPVal0=(int)(((float)TEMPVal0/1024)*50); //把电压值扩大10倍    50V

        ADC1->CR1 |= 0X01; //启动ADC
        ADC1->CR1 |= 0X01; //启动ADC
        return 0;
      }
    }
    else//通道选择标志位
    {
      if( n<N )//采用中值滤波
      {
//      TEMPVal0=ADC_GetVal();//获取AD转换的值
        buf[n++] = ADC1_GetBufferValue(Buffer);//获取缓冲区的值
        ADC1->CR1 |= 0X01; //启动ADC   继续获取AIN0的AD值
        ADC1->CR1 |= 0X01; //启动ADC   继续获取AIN0的AD值
      }

      else
      {
        n=0;

        ADC_Init();//AD初始化

        ADC1->CSR &=~0X01;//切换到通道0
        AD_ADON_Flag=1;

        for(i=0;i<N;i++)
          for(j=0;j<N-i;j++)
            if(buf[j]>buf[j+1])
            { tem=buf[j]; buf=buf[j+1]; buf[j+1]=tem; }

        TEMPVal1 = buf[(N+1)/2];
        TEMPVal1=(int)(((float)TEMPVal1/1024)*50); //把电压值扩大10倍    50V

        ADC1->CR1 |= 0X01; //启动ADC
        ADC1->CR1 |= 0X01; //启动ADC
        return 0;
      }
    }  
  }
  return 0;
}
沙发
bitofnoone| | 2016-7-7 15:27 | 只看该作者
你将两个ad都设置成规则通道就可以同步采集了吧,也就是实现了你说的同时采集

使用特权

评论回复
板凳
mmuuss586| | 2016-7-7 19:52 | 只看该作者
2个通道顺序采样就可以了,AD的速度这么快,人根本察觉不到

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

36

帖子

0

粉丝