这段时间在搞的项目要用到430精确控制AD采样率,感觉自己搞了好久,期间没少问问题,论坛啊,QQ群啊,甚至还问过TI的员工,还和自己的小伙伴讨论了这个问题。非常给力的是最终我终于解决了这个问题。
因为我没有什么写代码的基础,当年的C语言也是水过去的。。。。。。单片机也没有学过,所以搞起来其实还是挺吃力的。最后程序的结构貌似也有些问题,不过先实现了精确控制AD采样的功能,还是挺有成就感。
在程序的结构上面可能我还有些问题,希望论坛的各位大神多给我些指导意见~~~非常感谢~~~~
好,废话不多说了,开搞~~~~我用的是MSP430F5529的板子~~~
首先说说我的思路。
其实思路很简单。设定AD 这里粗略的采样率一定要很大,然后在AD中断里面将ADC12MEM取到并转换的值赋给一个临时的temp 然后设定定时器,通过定时器设定固定时间进入定时器中断,在定时器中断里面将temp的值提取出来并处理~~~~~(我的程序是将temp转换并且通过UART串口发送到PC)
设定AD,AD的采样转换模式设为脉冲采样时序模式,时序图如下,从图上看到其实整个时序图是包含采样和转换的时间的,这里关于采样时间是有个公式:4*ADC12CLK*ADC12SHTx 注意,这里的采样时间其实是说得Tsample~
当时我在这里遇到个问题就是这个采样时间是指Tsample还是说 整个加起来的时间??最后问了TI的员工 ,他们回答我说 只是Tsample。Tsample通过SHT0x和SHT1x来定义,但是我们没有办法知道Tsync的时间,从图上来看差不多3个ADCCLK吧~~~~~~所以,通过这里想要达到精确设定AD采样率的目的就不大可能了,只能说是粗略的设置。
所以,整个的采样转换时间应该是Tsample+Tsync+Tconvert 那么采样率就是这个的倒数了 所以 大概采样转换时间就是 4*ADC12CLK*ADC12SHTx+3ADC12CLK+13ADC12CLK; 通过这里就可以粗略地设定AD采样率。
其实主要遇到的问题就在这里,我得到的结论就是单单凭设定SHT寄存器是无法精确设定采样率的,想要精确设定采样率还是需要定时器。
网上的大神们给的建议是通过定时器触发AD采样。这个我有点没有太懂,后来也没有搞~~~
其实我这个思路真正的AD采样率是很大的,而且是不确定的,但是通过定时器固定时间将ADC12MEM读取出来其实也就是精确设定了采样率~~~~~
比较简单浅显,我也是个菜鸟,希望大神们别鄙视我~~~~~~谢啦!!!!