STM32的曼彻斯特编译码系统设计
4 软件设计
软件流程如图6所示。系统初始化包括时钟初始化、定时器初始化、DMA初始化等。如果一次性连续编码的数据最比较大时,应将这罩的DMA缓冲区设置为双缓冲,为每个用到的DMA通道开辟两个缓冲区。当DMA使用其中的一个缓冲区时,MCU调用编码或者译码算法来对另外一个缓冲区进行读写操作;当DMA数据传输完毕的时候,发生一个DMA传输结束中断,在中断服务程序里切换到另外一个缓冲区,并将编码算法或者译码算法标志位置位。当主程序查询到标志位置位后,MCU调用编码或者译码算法来对DMA先前指向的缓冲区进行处理(填充数据或者取数据)。当然,如一次性编码或者译码的数据不是很多时,我们只需一个缓冲区就够了。
因为CPU处理数据的速度要高于编码的速率,所以CPU可以空出时间来做其他的事情,时间的长短依赖于缓冲区的大小和编码的速率,等到主程序中查询到编码或者译码标志位置位了再去执行编码或者译码算法对数据进行处理,这样就提高了CPU的工作效率。在实时性要求不高的应用中,不再需要一个专门的CPU去处理编码或者译码。
5 方案验证
本方案已在汽车加速度传感器模拟系统中得到了验证,这里以某款加速度传感器的曼彻斯特编码协议为例,其数据帧格式为一帧数据为19位包括:2个起始位、2个类别位、10个数据位、5个CRC效验位。
5.1 编码方案验证
对图4所示电路的T1点测量曼彻斯特电压编码的波形,电流编码的波形通过测量T2、T3问的压降来间接测量。
对一帧数据0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 1连续编码,帧之间延时6μs,编码速率400kb/s,编码波形如图7所示。
5.2 译码方案验证
通过对某真实传感器输出的曼彻斯特电流码进行捕获译码,得到其ID信息,译码数据如图8所示。ID正确,译码成功。
结语
该没计方案可以方便地实现曼彻斯特电压、电流编码译码,实现方法灵活、可靠,适用于各种类型的曼彻斯特编码译码应用领域。目前,本设计方案已经成功地应用在汽车加速度传感器模拟系统中。
- 1553B总线中曼彻斯特编解码器的设计(04-11)
- STM32学习:ADC/DMA/USART(07-25)
- 采用ARM Cortex-M3单片机和DSP的逆变电源设计(06-24)
- STM32 ADC的采样周期确定(02-22)
- 基于STM32F103RB和CC1101的无线数传模块设计(07-23)
- 详解GPIO在STM32中的几种工作模式(09-24)