|
问题没说清楚
仪器的数值显示错误,是短时间闪一下马上恢复正常还是一直是错的,如果一直是错的,还能变化吗?你用了什么算法?不同的算法在相同的数据下输出是不同的,这些不讲明白,没人能帮你。 如果使用积分算法做滤波,ADC不能运转了,TIMER启动的DMA就读到固定值,滤波后就是一个直流分量,交流量为0。只要还有显示,还能变化,ADC就是运转的,ADC就是一个比较的过程,受干扰后结果变化几倍是不可能的。 看你的描述,ADC是在连续转换模式,此方式不推荐使用。首先是功耗上升,结果是晶片局部发热,半导体器件对温度是很敏感的。如果只是实验还可以。 软件问题:你的ADC速度设置多少?如果是1M,每1微秒就是一次DMA!那要占多少总线时间?你的算法必然操作RAM,那么DMA期间CPU在空转,每20毫秒还有一次大的DMA,这些要考虑在内。在没有以上DMA打扰的情况下,你测试过整个计算程序的时间消耗吗?128点的算法在20毫秒内能计算完吗?如果算不完下一个DMA2是否把你当前点后的数据修改了?如果算不完,计算过程中禁止过DMA2吗?整个运算中的数据定义有无问题?计算中有数据溢出吗?有除0错吗? 如果以上问题都不存在,那么请把一段用于计算的128点数据发送出来,才可以判断是否一定是ADC的问题。方法很简单,智能测控肯定有通讯,写个调试程序,事先定义一个按键,在出现错显示的情况下按一下,CPU接到此键后停止DMA1和2,把所有缓冲区的数据包括ADC的缓冲通过通讯线发送出来,用电脑收一下,存起来就可以了。如果发现确实是ADC的数据不正常,没有按波形变化,就可以向ST兴师问罪了,如果是程序问题,还是静下心来,好好研究吧。 可以说一下我的测试结果:2层板,严格按照EMC有关要求布板,中心电平提高到1/2VREF,在ADC后减2048恢复波形数据,在交流无输入时,IAR下随机打断运行,可以看到大部分数据刷新变红,但数值漂动在-1~1之间,几百次试验仅出现过两次漂到2,对ADC精度无任何意见。 使用过各种恶劣手段对付此CPU,包括阳光暴晒,摸腿,拔8M晶体,多次出现IWDG复位,但未出现ADC数据失常问题。 我遇到的WWDG问题已经解决,正如版主所说,是没看到调试画面就RST了。在使能WWDG后很短时间内,把它的时钟关闭,就可以停到正确的断点上了。喂狗不成的主要原因是窗口太小,离0X40太近了,没喂到狗就先RST了。目前已经用在了设备的调试程序中,运转正常。 关于最近的调试收获,可以告诉大家两点:一是IIC操作24C16时,一定要给SDA和SCL充足的高电平时间,否则操作不能成功。二是IWDG和WWDG也是如此,其中WWDG要短一点,但是也要在上电后四万次空循环操作后才能稳定。 |
|