,并基于该编码与LED 恒流驱动芯片TLS3001通信实现对LED系列的控制。

在曼彻斯特(Manchester)编码中,每个二进制位(码元)的中间都有电压跳变。用电压的正跳变表示“0”,电压的负跳变表示“1”。由于跳变都发生在每一个码元的中间位置(半个周期),接收端就可以方便地利用它作为同步时钟,因此这种曼彻斯特编码又称为自同步曼彻斯特编码。如图1所示。

从图1可以看出曼彻斯特编码本身并不复杂,在有些应用中可以采用单片机软件编程实现编码。但若应用系统要求较高的数据传输速率,比如本文后面介绍的LED控制中要求数据传送速率范围在100KHz~2MHz时,用软件实现曼彻斯特编码可能达不到速率要求。本文将采用PSoC3UDB实现曼彻斯特编码,即用Datapath实际基本控制逻辑,用PLD实现状态机,由于其采用硬件实现故能达到速率要求。

CypressPSoC3使用基于单循环流水线MIPS),提供业界广泛采用的5.5V至0.5V电压范围和低至200nA的休眠电流,可以满足极低功耗的应用场合。PSoC3的高性能模拟子系统和数字系统都拥有可编程通路,允许将任何模拟或数字信号(包括可编程时钟)分配到任何通用I/O引脚,这为使用者提供了真正的“系统级”可编程能力。

UDB(Universal Digital Blocks)是PSoC3可编程数字系统的核心功能,由PLD和Data path组成,可以创建各种通用外设和定制化功能。PSoC3的数字逻辑部分由多个UDB通过矩阵和可编程互联组成,PSoC3、UDB和Datapath的关系如下图2所示。

采用PSoC3的UDB 实现曼彻斯特编码,就是用Datapath实现简单的控制逻辑,在PLD中用Verilog语言描述曼彻斯特模块功能的过程。在PSoC Creator中设计的曼彻斯特模块如下所示:

该模块只有一个时钟输入和一个曼彻斯特编码输出,要编码的数据是通过Datapath的FIFO输入的。Datapath的配置可采用Cypress提供的“Datapaht Configuation Tool”工具实现,如图3所示:

F0,用做暂存下一个数据的FIFO,当A0为空时从F0中load 数据到A0

状态机是曼彻斯特模块功能的具体实现,通过Verilog语言描述在PLD中运行,如图4所示:

数据的每一个位需要两个时钟来产生曼彻斯特编码输出,即Shift/NOP或者Load&Shift/NOP过程。当没有数据时,verilog语言描述为状态机进入IDLE阶段并输出0。

由于从F0 下载数据到A0时一次只能下载1byte 数据,为了保证曼彻斯特编码频率的一致性,在每个数据字节移位到最后1bit的同时从F0下载数据到A0,即Load&Shift阶段。

这是一个基于PSoC3 UDB的应用,采用前面介绍的曼彻斯特编码模块与三通道LED 恒流驱动芯片TLS3001通信以控制LED系列。系统应用框图如图6所示,其中TLS3001_2与TLS3001_3和TLS3001_1一样都接有LED灯的。

TLS3001 是单线传输、三通道LED 恒流驱动芯片,内置12 位灰阶控制的PWM调制功能。3 个恒流输出通道所输出的电流值不受输出端负载电压影响,并提供恒定一致的输出电流,用户可以选择不同的外接电阻来调整输出电流,调整范围从0 到30mA。内置电压调节器,使芯片正常工作在5~17V 的较宽电压范围内,输出端口最大耐压达到17V。

根据TLS3001芯片要求,在芯片上电后必须先发一次同步帧,以便芯片检测通讯的波特率。同步帧的格式为:15b+4b0001+11b,在发送同步帧后必须延时一段时间再发送数据帧。在发送若干帧数据后,重新发送一次复位帧,等待1ms 之后,再发送一次同步帧, 以便芯片消除积累误差, 复位帧格式为:15b+4b0100d. 数据帧格式为:15b+4b0010(数据头)+ 第一个芯片39bit 数据 + 第二个芯片39bit 数据 + + 第n 个芯片39bit 数据。其数据时序如图7所示:

这样,就使用前面定义的曼彻斯特模块发送编码流,以对LED灯的控制,控制软件流程如图8所示:

用示波器观测编码输出管脚的波形,其时序完全能满足TLS3001芯片的要求,如下图9所示,其中通道2为时钟输出,通道1为Manchester编码输出。

本文主要介绍了PSoC3的UDB功能,并用UDB实现曼彻斯特编码模块的过程。由于其硬件实现的方式故可输出很高的编码频率。

更多精彩尽在这里,详情点击:http://smrzyz.com/,曼城