完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
问题如下:用的stms207芯片,timer1 100us中断,采样2路电流,软件启动AD,电机不转时,value1值在210附近,调节电位器,当value2超过255时候,value1变大,value2变小,明显两个AD转换值异常!怎么会有此现象,怎么解释??
@near @interrupt @svlreg void TIM1_UPD_OVF_TRG_BRK_IRQHandler (void) { //100us 中采集2路AD,一路电流,一路电位器 // static unsigned int count2=0; TIM1->SR1 = (u8)(~0x01);//清除中断悬挂位 cnt_1ms++; count2++; if(count2>=5000) //5000,0.5S时间累计 { count2=0; GPIOD->ODR ^= GPIO_PIN_5; } ADC2->CSR = 10; //一路电流 ,待机偏移量,1v附近 ADC2->CR1 |= 0x01; nop(); while((ADC2->CSR 0x80)==RESET); //没转换完,等待 ADC2->CSR = (u8)(~0x80); //清EOC标志 ADConverValue1= (u16)(ADC2->DRH<<8) + (u8)ADC2->DRL;//读取AD转换值 ADC2->CSR = 13; //一路电位器,0~1024 ADC2->CR1 |= 0x01; nop(); while((ADC2->CSR 0x80)==RESET); //没转换完,等待 ADC2->CSR = (u8)(~0x80); //清EOC标志 ADConverValue2= (u16)(ADC2->DRH<<8) + (u8)ADC2->DRL;//读取AD转换值 }[/td] 以下内容为评论 [td]折腾了半天,解决办法就是同一路,多采样一次,即两路AD至少采样4次,各取后一次的值。奇葩的ADC啊,难道没人遇到过这问题?? 另外:若中断中只是采样一路AD,就没有此问题,转换的值始终是对的。 [/td] [td]从你的程序来看,你只是采样了一次,严格来说一次采样的值在工程应用中是不可取的,通常是做多次采样后再滤波,最简单的就是多次采样后取平均值。我常用的是多次采样后按大小排序,去掉小的几个和大的几个,中间剩下的取平均值。在这里我给你提供一些简单滤波算法的参考。 假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad(); 1、限副滤波 /* A值可根据实际情况调整 value为有效值,new_value为当前采样值 滤波程序返回有效的实际值 */ #define A 10 char value; char filter() { char new_value; new_value = get_ad(); if ( ( new_value - value > A ) || ( value - new_value > A ) return value; return new_value; } 2、中位值滤波法 /* N值可根据实际情况调整 排序采用冒泡法*/ #define N 11 char filter() { char value_buf[N]; char count,i,j,temp; for ( count=0;countvalue_buf[i+1] ) { temp = value_buf; value_buf = value_buf[i+1]; value_buf[i+1] = temp; } } } return value_buf[(N-1)/2]; } 3、算术平均滤波法 /* */ #define N 12 char filter() { int sum = 0; for ( count=0;countvalue_buf[i+1] ) { temp = value_buf; value_buf = value_buf[i+1]; value_buf[i+1] = temp; } } } for(count=1;count=N) return new_value; delay(); new_value = get_ad(); } return value; } |
|
相关推荐
1个回答
|
|
STMS207芯片的AD转换值异常可能有以下几个原因:
1. 电源电压不稳定:如果电源电压不稳定,可能会导致AD转换值波动。请检查电源电压是否稳定。 2. 电磁干扰:电磁干扰可能导致AD转换值异常。请检查电路板是否有屏蔽措施,以及是否有其他干扰源。 3. 采样时间不足:如果采样时间过短,可能导致AD转换值不稳定。请检查采样时间是否足够。 4. 电位器接触不良:如果电位器接触不良,可能导致AD转换值波动。请检查电位器是否正常工作。 5. AD转换器本身的问题:如果AD转换器本身存在问题,可能导致AD转换值异常。请检查AD转换器是否正常工作。 6. 软件问题:软件中可能存在逻辑错误,导致AD转换值异常。请检查软件代码,确保AD转换和数据处理逻辑正确。 针对您提到的现象,以下是一些建议: 1. 检查电源电压是否稳定,以及是否有电磁干扰。 2. 确保采样时间足够,以获得稳定的AD转换值。 3. 检查电位器是否正常工作,接触是否良好。 4. 检查AD转换器是否正常工作。 5. 检查软件代码,确保AD转换和数据处理逻辑正确。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1810 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1631 浏览 1 评论
1098 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
737 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1687 浏览 2 评论
1945浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
750浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
584浏览 3评论
604浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
568浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 14:14 , Processed in 0.797437 second(s), Total 80, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号