硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4713|回复: 2
收起左侧

STM8S003 双通道采集 互相影响

[复制链接]

4

主题

13

回帖

25

积分

新手上路

积分
25
发表于 2016-11-25 17:34:10 | 显示全部楼层 |阅读模式
我是在STM8S开发板ADC采样滤波例程上做的修改,整体思路是AIN2的采样处理函数放在定时器内10ms调用一次,AIN3的采样处理函数放在同一定时器内500us调用一次 ,主程序100ms获取一次AIN2滤波后的值,3S获取一次AIN3滤波后的值,问题是当在定时器中断内屏蔽掉AIN2或AIN3的采样处理函数另外一个通道则采集正常,否则AIN2输入端与GND短接采集结果不为0,AIN3采集结果无明显变化。
  1. /*
  2. *********************************************************************************************************
  3. *    函 数 名: AdcProTds
  4. *    功能说明: ADC采样处理,插入 systick中断进行调用
  5. *    形    参:无
  6. *    返 回 值: 无
  7. *********************************************************************************************************
  8. */
  9. void bsp_AdcProTds(void)
  10. {
  11.     static uint16_t tds_buf[SAMP_COUNT_TDS];
  12.     static uint8_t tds_write;
  13.     uint16_t sum;
  14.     uint8_t i;
  15.   
  16.     tds_buf[tds_write] = ADC1_GetConversionValue();
  17.     if (++tds_write >= SAMP_COUNT_TDS)
  18.     {
  19.         tds_write = 0;
  20.     }
  21.     /* 下面这段代码采用求平均值的方法进行滤波
  22.         也可以改善下,选择去掉最大和最下2个值,使数据更加精确
  23.     */
  24.     sum = 0;
  25.     for (i = 0; i < SAMP_COUNT_TDS; i++)
  26.     {
  27.         sum += tds_buf[i];
  28.     }
  29.     g_usAdc_Tds_Value = sum / SAMP_COUNT_TDS;    /* ADC采样值由若干次采样值平均 */
  30.     ADC1_StartConversion();        /* 软件启动下次ADC转换 */
  31.     ADC1_ConversionConfig(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_3,ADC1_ALIGN_RIGHT);   
  32. }
  33. /*
  34. *********************************************************************************************************
  35. *    函 数 名: AdcProTemp
  36. *    功能说明: ADC采样处理,插入 systick中断进行调用
  37. *    形    参:无
  38. *    返 回 值: 无
  39. *********************************************************************************************************
  40. */
  41. void bsp_AdcProTemp(void)
  42. {
  43.     static uint16_t temp_buf[SAMP_COUNT_TEMP];
  44.     static uint8_t temp_write;
  45.     uint16_t sum;
  46.     uint8_t i;
  47.   
  48.     temp_buf[temp_write] = ADC1_GetConversionValue();
  49.     if (++temp_write >= SAMP_COUNT_TEMP)
  50.     {
  51.         temp_write = 0;
  52.     }
  53.     /* 下面这段代码采用求平均值的方法进行滤波
  54.         也可以改善下,选择去掉最大和最下2个值,使数据更加精确
  55.     */
  56.     sum = 0;
  57.     for (i = 0; i < SAMP_COUNT_TEMP; i++)
  58.     {
  59.         sum += temp_buf[i];
  60.     }
  61.     g_usAdc_Temp_Value = sum / SAMP_COUNT_TEMP;    /* ADC采样值由若干次采样值平均 */
  62.     ADC1_StartConversion();        /* 软件启动下次ADC转换 */
  63.     ADC1_ConversionConfig(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_2,ADC1_ALIGN_RIGHT);   
  64. }
复制代码
回复

使用道具 举报

4

主题

13

回帖

25

积分

新手上路

积分
25
 楼主| 发表于 2016-11-26 17:29:39 | 显示全部楼层
好了,解决了
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2017-2-17 09:34:35 | 显示全部楼层
如何解决的,是否可以共享一下
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-28 17:26 , Processed in 0.281281 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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