STM8 ADC1连续模式切换通道干扰问题的解决
初始化ADC1:
void Init_ADC(void)
{
GPIO_Init(GPIOD, (GPIO_Pin_TypeDef)(GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_5|GPIO_PIN_6), GPIO_MODE_IN_FL_NO_IT);
ADC1_DeInit();
ADC1_Cmd(ENABLE);
ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_3, ADC1_PRESSEL_FCPU_D18, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL3,DISABLE);
ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_4, ADC1_PRESSEL_FCPU_D18, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL4, DISABLE);
ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_5, ADC1_PRESSEL_FCPU_D18, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL5,DISABLE);
ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_6, ADC1_PRESSEL_FCPU_D18, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL6,DISABLE);
ADC1_ScanModeCmd(ENABLE);
ADC1_DataBufferCmd(ENABLE);
ADC1_ITConfig(ADC1_IT_EOCIE,ENABLE);//在中断中获取AD值
ADC1_StartConversion();
}
中断:
INTERRUPT_HANDLER(ADC1_IRQHandler, 22)
{
uint32_t tmp;
ADCValue[0]=ADC1_GetBufferValue(3);
ADCValue[1]=ADC1_GetBufferValue(4);
ADCValue[2]=ADC1_GetBufferValue(5);
ADCValue[3]=ADC1_GetBufferValue(6);
ADC1_ClearITPendingBit(ADC1_IT_EOC);
ADC1->CSR &= (uint8_t)(~ADC1_CSR_CH);//Clear the ADC1 channels
ADC1->CSR |= (uint8_t)(ADC1_CHANNEL_6); //在此处会在其它带AD功能的输出脚产生尖峰干扰,如PC4
tmp=ADCValue[0]+ADCValue[1]+ADCValue[2]+ADCValue[3];
}
由于PC4我已经配置为TIM1的PWM输出,无论是否配置PC4的GPIO与否,这个脚都是输出状态。查了有人说在切换时先关掉ADC,实测不行,那个只适用于单次采集。连续的得不到数据。估计是ADC开启后需要较多时间恢复电平,但是在中断中不可能给很多时间进行等待,实际应用也不允许。
最后的解决办法:
将PWM的时基调低,分配从不分配设置到32分频,这样PWM的输出频率就降低到越1khz左右,在该脚旁路一个0.1的电容,将那个干扰脉冲吸收,再输出去基本符合要求了。唯一美中不足的是,当PWM的定时值过低时,宽度与那个脉冲的宽度相近的时候,他也被吸收了。但是基本不影响使用,算是解决了罢。
STM8 ADC1连续模式切换通道干扰问题的解决的更多相关文章
- 【stm32】用TIM1产生6路ADC,用CCR4触发ADC1的注入通道采样
这几天一直在使用STM32来写sensorless BLDC的驱动框架,那么必须会用到TIM1的CCR1/CCR2/CCR3产生的六路互补PWM,以及用CCR4来产生一个中断,用来在PWM-ON的时候 ...
- STM8 ADC 多个通道连续扫描缓冲区数据带中断模式的正确写法
近日调试了STM8S的ADC采集多通道数据的程序,按照之前的立即,将ADC1设置为:扫描模式,连续采集,数据缓存模式,中断使能后应该可以在中断后读取到数值了,可是无论怎样都只能读取到第一个缓冲器的数据 ...
- 【转载】jQuery动画连续触发、滞后反复执行解决办法
转载: http://www.cnblogs.com/yuejin/archive/2012/12/18/2822595.html jQuery中slideUp .slideDown.animate等 ...
- jQuery动画连续触发、滞后反复执行解决办法
jQuery中slideUp .slideDown.animate等动画运用时,如果目标元素是被外部事件驱动, 当鼠标快速地连续触发外部元素事件, 动画会滞后的反复执行,其表现不雅. 则解决办法: 1 ...
- ORA-03113:通信通道的文件结尾解决
今天跟往常一样,登陆PL/SQL,确登陆失败,出现一个错误“ORA-01034”和“ORA-27101”如图: 然后就就通过命令提示符去登陆Oracle,去查看怎么回事,然后问题进一步出现,错误“OR ...
- ORA-03113: 通信通道的文件结束解决方法一例
开发项目时,使用的是Oracle数据库.最近遇到了“ORA-03113: 通信通道的文件结束”错误.如下图所示: 经过网上查资料和请教同事,终于找到了解决ORA-03113错误的办法. 解决步骤如下: ...
- ORA-03113:通信通道的文件结尾 解决办法
登录Oracle时出现错误:“ORA-03113:通信通道的文件结尾” 错误排查方法 Oracle出现错误,查看trace日志寻找问题根源:D:\oracle\diag\rdbms\orcl\orcl ...
- 提示ORA-03113:通信通道的文件结尾解决
第一步: sqlplus / as sysdbashutdown abortstartup mountSQL> show parameter background_dump_dest; NAME ...
- STM32应用实例十五:STM32的ADC通道间干扰的问题
最近我们在开发一个项目时,用到了MCU自带的ADC,在调试过程中发现通道之间村在相互干扰的问题.以前其实也用过好几次,但要求都不高所以没有太关注,此次因为物理量的量程较大,所以看到了变化. 首先来说明 ...
随机推荐
- 微信 HTML5 VIDEO 视频播放解决方案
原文链接:https://www.jianshu.com/p/e4573acf6564 webkit-playsinline && playsinline="true&quo ...
- visio基础
右下角是一个切换文件的按钮 也可以用ctrl+tab键进行切换 页面底部左边是一个页面的增加与切换的几个按钮 这是切换页面不是切换文件 右上角这个按钮是一个功能隐藏的按钮 左上角这个按钮可以自定义快速 ...
- HolidayFileDisPersonViewList.js中的一些基础
1,CSS display 属性 使段落生出行内框: p.inline { display:inline; } none 此元素不会被显示 详细介绍: http://www.w3school.com ...
- $Noip2011/Luogu1314$ 聪明的质监员 二分+巧妙前缀和
$Luogu$ $Sol$ 首先$W$一定是某个$w_i$.于是一种暴力方法就出炉了,枚举$W$再计算. 注意到,满足$S-Y$的绝对值最小的$Y$只可能是两种,一种是$<S$的最大的$Y$,一 ...
- HDU2089 不要62 题解 数位DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 题目大意:求区间 \([l,r]\) 范围内不包含数字"4"且不包含连续的数 ...
- React useEffect的源码解读
前言 对源码的解读有利于搞清楚Hooks到底做了什么,如果您觉得useEffect很"魔法",这篇文章也许对您有些帮助. 本篇博客篇幅有限,只看useEffect,力求简单明了,带 ...
- Mysql备份与恢复(1)---物理备份
数据库对企业来说最重要的莫过于其中的数据,所以做好数据库的备份是一个不可或缺的工作.数据库及时备份可以帮助我们在数据库出现异常宕机时及时的使用备份数据进行恢复工作,将因为数据库宕机产生的影响降低到最小 ...
- 由数据迁移至MongoDB导致的数据不一致问题及解决方案
故事背景 企业现状 2019年年初,我接到了一个神秘电话,电话那头竟然准确的说出了我的昵称:上海小胖. 我想这事情不简单,就回了句:您好,我是小胖,请问您是? "我就是刚刚加了你微信的 xx ...
- 用Decorator实现依赖注入,像Java一样写后台
最近闲来无事,突发奇想,也顺便练练手,于是就萌生了,能否用typescript的decorator写一个Nodejs SpringMVC,通过依赖注入,自动实现文件加载,实例化等.然后就有了这个项目. ...
- Windows安装EMQ服务器(mqtt)
先去EMQ官网下载安装包 https://www.emqx.io/downloads#broker 注意:此处一定不能下错成企业版的,不然EMQ会由于缺少企业license无法启动服务 解压到任意路径 ...