打印

TIM1设置为60KHz触发ADC,怎么得到90KHz的结果?

[复制链接]
3161|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ddb_21ic|  楼主 | 2009-11-1 14:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ddb_21ic 于 2009-11-2 11:15 编辑

代码见3楼附件
沙发
ddb_21ic|  楼主 | 2009-11-1 17:41 | 只看该作者
通过示波器测试发现,这个60KHz是没问题的。但是通过ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;来触发ADC转换。ADC输出规则转换3个通道,输出到DMA,缓存大小为120字。DMA半满/全满中断打开。
结果应该是20Ksps每通道,但是得到的结果是30Ksps/通道。中断频率应该是1KHz成了1.5KHz。
ADCCLK=9MHz(72/8=9);
SAMPLE=55.5;
Fsps=9,000,000/(12.5+55.5)=132,325.94Hz,关了连续转换模式。
怎么转换实际速度大了1.5倍呢?

使用特权

评论回复
板凳
ddb_21ic|  楼主 | 2009-11-1 18:18 | 只看该作者
这是ADC部分的完整代码

gcc_C_tmm800_adc.pdf

19.12 KB

使用特权

评论回复
地板
barboon| | 2009-11-2 09:41 | 只看该作者
楼主,我看了看代码,没做实验,理论推测一下,发现一个问题

/* ADC1 configuration ------------------------------------------------------*/
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 3;
ADC_Init(ADC1, &ADC_InitStructure);

你看ADC_InitStructure.ADC_ScanConvMode = ENABLE;
这句话的意思是一个触发信号过来,ADC就连续把你的3个通道转换一下

不过看楼主的意图,似乎是希望一次触发信号,只转换1个通道,60KHz的触发信号,实现3个通道分别有20Ksps的采样率
我建议改成ADC_InitStructure.ADC_ScanConvMode = DISABLE;

楼主目前ADC时钟9MHz,一个通道采样加转换是12.5 + 55.5 = 68个时钟
3个就是68 * 3 = 204时钟,9 MHz/ 208 = 43 KHz,实际上你的60KHz的触发信号超过这个43 KHz
就是说你的每2个触发信号会丢掉一个,我估计这是造成你实际采样率变成30 Ksps的原因

使用特权

评论回复
5
ddb_21ic|  楼主 | 2009-11-2 11:10 | 只看该作者
谢谢LS的兄弟,不过计算下来,就算扫描模式下,一个触发引起一个扫描,也不该是采样率变大1.5倍。
9MHz/68 = 132KHz,如果你的分析成立,那么结果应该是至少2倍。就是说一个触发之后,转换2次成功,第三次被下一个触发中断。而且,通过对转换结果在PC上画波形图来看,并没有发生数据错位的情况。
所以,不应该出现你说的这种情况。

使用特权

评论回复
6
barboon| | 2009-11-2 11:34 | 只看该作者
楼主可能没明白我的意思,一个触发信号会引起3个通道连续进行转换
我认为发生的情况可能是这样的:
第一个TIM1触发信号到达ADC,通道1转换,OK,DMA传输,然后自动开始通道2转换OK,DMA传输
接着是第三个通道转换,转换过程中第二个触发信号到达,由于三个通道都设置成规则组,因此是不会打断第三个通道的转换的,通道三继续转换,接着DMA,而TIM1的触发信号会丢失掉,但是数据不会错位。
直到第三个触发信号开始新的一轮转换,这个过程中第四个触发信号又丢掉
这样的结果就是60KHz的触发频率,实际上只有一半是有效的,结果变成每个通道都是30Ksps。

使用特权

评论回复
7
ddb_21ic|  楼主 | 2009-11-2 12:32 | 只看该作者
那我再试一下。
我的理解,关了扫描模式就是只处理一个通道了。

使用特权

评论回复
8
ddb_21ic|  楼主 | 2009-11-2 13:08 | 只看该作者
11.3.8 Scan mode
This mode is used to scan a group of analog channels. Scan mode can be selected by setting the SCAN bit in the ADC_CR1 register. Once this bit is set, ADC scans all the channels selected in the ADC_SQRx registers (for regular channels) or in the ADC_JSQR (for injected channels). A single conversion is performed for each channel of the group. After each end of conversion the next channel of the group is converted automatically. If the CONT bit is set, conversion does not stop at the last selected group channel but continues again from the first selected group channel.

使用特权

评论回复
9
ddb_21ic|  楼主 | 2009-11-2 13:11 | 只看该作者
是我没仔细看资料,确实如Barboon所说。
一个触发是转换一组通道,而不是一个通道。
当然我上面需要实现的功能,不是应该关闭SacnMode,而是要把TIM的频率降下来。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

105

主题

1105

帖子

3

粉丝