一、选题
全国大学生电子设计竞赛刚刚完赛,本人选做的是A题:【失真度测量装置】。当时选题的时候看到它附带了说明:一定要使用TI公司的MCU以及它的片内ADC,不得使用其他片外ADC 和数据采集模块(卡)成品。其实看到这点都还好理解,毕竟题目要求简单,真要用STM32或者上FPGA做那也太容易了。 刚好暑假的时候实验室申请了一堆TI的板卡,什么MSP432P、MSP432E、C2000都有,就查了下他们片内ADC的性能:
- P系列ADC能到1MSPS,勉强够题目扩展要求(100KHz的五次谐波);
- E系列ADC能到2MSPS,足够题目扩展要求;
- C2000系列ADC能摸到更高,也足够题目扩展要求;
最后,我们选择的是MSP432E401Y这块板子,主要是因为它能用keil编程,ADC速率看上去也有挺大的余量。而P401R速率刚好摸到、C2000系列没啥资料还要用CCS编程就被我们放弃了。
二、做题
然后,就开始了疯狂踩坑之路。首先,串口、定时器一些外设都没啥大问题,对着例程敲敲代码就搞定了。DSP库的FFT运算也没啥问题,基本和在STM32上的流程一模一样。
三、贼坑的ADC
除了ADC,一看例程,好家伙,ADC有足足十多份例程,直接给我干懵了。 先是找了一份单次采样转换的例程抄了抄,让ADC采出来了正确的电压值;然后加上定时器触发加FFT实测,果然结果不对:采样率拉不上去,做不到扩展部分。 然后又赶紧找提高采样率的办法,最后看了好久的数据手册才看懂它所谓的采样序列的意思,再上机实测:采样率是上去了,但还是不够。 期间,学长还给了一份P401系列的ad+fft的代码做参考,然后我惊奇的发现,P系列和E系列的库函数居然完全不一样。(绝了) 最后,打算把DMA也加上,加上DMA你总得跑快点了吧。然而,加上了DMA的代码它还更慢了?!(妈的绝了) 最后的最后,实在搞不定它,干脆就摆烂了。。。
四、教训
- 选题的时候太草率了,没仔细判断其他题目的难易度就轻易选题了;
- 之前没用过MSP432系列的单片机,基本靠现学,对它的很多特性都不了解;
- 过于相信TI所谓大厂的产品了,这回用这块单片机,资料难找就算了,最关键的ADC采样率还调不出数据手册上所说的最大采样率(也可能是我菜);
- 忠告:下回电赛远离TI单片机(我是没有下回了);
ps:P系列DMA配置和E系列不一样,实验室另一个组用的P系列跑满了1MSPS
|