本帖最后由 airwill 于 2012-8-6 21:21 编辑
再次测试:
为了准确测试扫描错误情况. 决定将输入改造一下. 将 PA0 输出0, PA7 输出1.
中间各脚模拟输入. 并用电阻依次连接起来(阻值不尽相同).
先设定为 ADC_ScanDirection_Backward, 关闭内部通道, 外通道数从 2到8 进行测试.
测试均从通道0(PA0) 开始. 采样时间 ADC_SampleTime_1_5Cycles
结果如下:
通道数 OVR AD 结果
2路: Y 0x000, 0x488
3路: Y 0x000, 0x50E, 0x526
4路: Y 0x000, 0x7E0, 0x55D, 0x565
5路: Y 0x000, 0x878, 0x838, 0x58D, 0x547
6路: Y 0x000, 0x8AF, 0x8A8, 0x84F, 0x58D, 0x54F
7路: Y 0x000, 0xB96, 0x9A4, 0x8F0, 0x872, 0x5A0, 0x553
8路: Y 0x000, 0xFFF, 0xD3F, 0x9F4, 0x913, 0x87C, 0x5A8, 0x553
采样时间 ADC_SampleTime_71_5Cycles
结果如下:
通道数 OVR AD 结果
2路: N 0x000, 0x43E
3路: N 0x000, 0x4CE, 0x43E
4路: N 0x000, 0x89A, 0xDFD, 0x43E
5路: N 0x000, 0x92B, 0x8A8, 0x4D8, 0x442
6路: N 0x000, 0x9D9, 0x938, 0x8AA, 0x4D3, 0x43F
7路: N 0x000, 0xE0E, 0x9E9, 0x93F, 0x8A9, 0x4D3, 0x443
8路: N 0x000, 0xFFF, 0xE05, 0x9E0, 0x938, 0x8AF, 0x4CB, 0x443
再加入三路内部通道TempSensor(ADC_Channel_16) Vrefint(ADC_Channel_17) 和 ADC_Channel_Vbat(ADC_Channel_18).
结果如下:
通道数 OVR AD 结果
8路: N 0x000, 0x6A3, 0x78D, 0xFFF, 0xE10, 0x9E2, 0x933, 0x8AF, 0x4CE, 0x43F
2路: N 0x000, 0x7FF, 0x6A0, 0x78A, 0x443
0路: N 0x788, 0x800, 0x6A0
改设为: ADC_ScanDirection_Upward, 再测试
0路: N 0x7FD, 0x78A, 0x6A0
2路: N 0x7F7, 0x000, 0x43E, 0x78A, 0x6A0
5路: N 0x7FD, 0x000, 0x444, 0x4D3, 0x8AA, 0x938, 0x78F, 0x6A3
8路: N 0x7F9, 0x000, 0x43E, 0x4C7, 0x8A5, 0x939, 0x9DE, 0xE07, 0xFFC, 0x78F, 0x6A3
从测试中可以归纳出来, 不论有没有出现 OVR 位, 都是最后一个通道先转换, 然后剩下的通道依次转换.
唯有在 ADC_SampleTime_1_5Cycles 条件下 3,4 个通道测试有些异常. 也可能是我的电阻有点大. 导致这样采样率的结果偏差太大.
基本结论:
1. 规则转换的通道存在反转问题, 即最后一个通道会最先转换.
2. OVR 没有能够反应和捕捉到过冲情况.
STM32F051RB 的ADC 规则转换 DMA 传输, 还是存在错位问题, 而且好象更严重(所有测试都没有发现正常结果, 我反复测试很多次, 希望能够看到一次正常的结果, 但是很失望, 没有遇到).
以上测试是借用调速器通过在 DMA 中断里设定断点, 跟踪获得的.
为了避免因为调速器的因素. 我在 DMA 中断里对转换的数据进行判断. 并用指示灯指示结果. 遗憾的是也都是错位的数据. |