最近使一个msp430f149和国产的usb芯片ch372,之前以为会很麻烦,结果用了labview的visa,居然可以生成usb芯片的驱动,然后就可以利用usb协议的批量(bulk)管道直接上下传数据,官方提供的dll都不用了。想了解的可以联系我,这个我已经弄好了。
问题来了:现在要做一个1kHz左右的信号采样处理,需要把信号送到labview然后进行锁相滤波,采样率越大越好。之前用msp430和串口进行采样(也是用labview),我把串口速率加到了460800(用的是usb转串口,大家平时估计很难见到这么高的串口速度),msp430每采一个数据就发一个,由于ad速度很高(我测得的是420ksps,用timerB测量1s内进入ad中断的次数,中断内不做任何操作,凑合吧),所以ad中断时间不计,串口每发送一个字节消耗10bit,ad点12位有两个字节,最后上位机端的采样率就是460800/20=23040(这个采样率对信号还原很重要,采样率不准得到的信号频率也变了,锁相也没法锁),感觉挺可以的 。改用了usb以后,流程和上面一样,结果采样率只有可怜的500sps 。
后来改了一下,先采1024个点再集中用usb发送,速度简直是飞啊(测得的采样率大概是10^6,其实就是usb发送数据的速度,由于每个点有两个数据,因usb发送速度大约是200k,也挺可以的)。其实问题就是usb发送单个数据的速率是很慢的,必须要大批量发送数据。但是msp430f149可怜的内存容量...我把数组设到2048就出错。除了外接高速存储,还有什么办法吗?例如用上片上flash这种冒险的做法。再不行我就要用cy68013了,它的usb传输是无需单片机干预的,可以与ad采样做到同步。我的要求不高,只要采样率能到10k就行。
|