我使用的是matlab XPC目标仿真。
简单描述一下我的模型:(宿主机台式机--------网线---------目标机PC\104)
1)PC\104主板上的串口1读IMU单元数据,115200,IMU工作频率100HZ,模型的仿真步长为0.002s
2)PC\104利用IMU数据在数学模型里计算出四个整数
3)PC\104主板上的串口2向DSP发送这个四数,自己设计好字头(FA,FF,32),四个整数以uint8形式发送,即一组数据包一共是3*1+4*2=11个字节,没有校验位。
4)PC\104主板上的串口2同时接收DSP发过来的四个数,字头和数据形式与3)中发送的一样。
现在的问题是这样的:
1)COM2读DSP发来的数据时,误码率很高,其表现形式是:字头可以正常检测到,但数据段部分会有某几个连续的采样时刻下的某个位 数据不对,就好比,人在抄数据,数据排布结构没错,但马虎了,某些数抄错了。
2)COM2向DSP发送数据时,误码率很高,其表现形式是:有时一组数据包还没有完全发完,就开始了下一组的发送,而下一组包还没发完时又开始了新的一组,但5、6个采样周期过后,又会恢复正常。就好比,数不会被抄错,但是会在没抄完一整组之后又开始抄下一组了。
需要说明的是:
1)COM1读IMU并不存在误码,从波形上看也没有毛刺,总之很完美,但COM1和COM2用的读写模块都是serial FIFO,设置上基本差不多,而且COM2已经把可调的选项都调了个遍也见好转。COM1和COM2调换了试验效果不变。
2)已经通过数据存储分析验证了,模型计算出来的数和字头的安排是没有问题的,即在serialFIFO模块之前的数据是没有错误的。
3)将DSP上的功能全部移到PC机上得新和串口连接尝试,效果相同,证明应该不是DSP端影响了数据的发送和接收。
4)串口线经过实验验证也没有问题。
百思不得其解,我怀疑的地方有两个,一是xPC下的serial FIFO模块的发送和接收能力不给力,另一是目标机主板上的串口不给力。
对于前者,我觉得可能性不大,我用的是matlab2011b,xPC已经到5.x版了,不可能连串口的收发都搞不定;对于后者,我实在是不知道主板上的串口有什么特别的讲究。
以前在RTW下也做过串口收发,没出过这么大的误码率,或者说根本就没误码,不知道为什么转到XPC之后就有这么大的问题。 |