最近我被要求设计一款双通道讯号转换器,从双极输入电压到双极输出电流;我马上假设这应该是一个纯类比设计,但有些事情却困扰了我。其中一个明确的需求是,每个通道要有一颗根据输入讯号变化亮度的双色LED,并以红灯或是绿灯来分别指示讯号为正或是负。
这会遇到两个问题;第一,LED驱动会需要升压,所以没有接近零的死区;第二,我可以预见一个状况是当讯号为负,LED(以及可能是输出)却呈现正值,反之亦然。这种状况的机械当量称作为后座力(backlash)。我认为并非要采用可变电压来驱动LED,而是采用PWM驱动器如Linear的LTC6992,但我仍会产生一个偏移,也无法解决后座力的问题。
此外,我会需要两颗PWM驱动器(每个通道一颗),这也可能得增加额外的电路让LED由红变绿;于是一个合乎逻辑的作法是去找适合的低阶微控制器(MCU)。
我先从Microchip的产品找起,但我发现适合的是记忆体容量较小的16C系列,意味着得使用组合语言。我曾在其他的开发案使用过16C系列,却遇到指令集不足(该系列MCU是RISC架构元件)以及记忆体区段(memorysegmentation)问题;因为这样的偏见,我又找了NXP的元件以及Freescale的ARMCortex-M0晶片。
因为选择太多,我开始犹豫不决。不过以前我曾在一个案子采用Freescale的CodeWarrior开发环境,却发现我们得额外付费才能取得我们需要的支援服务,这又让我产生偏见。
总之我现在可以告诉你,我已经成为Cypreess的PSoC 的支持者。我曾采用PSoC 1做过许多个小规模设计案,以及用PSoC 5做过一个大型设计;我也听过一些关于采用ARMCortex-M0核心的PSoC 4的一些热门讨论,但看到PSoC 4的价格,实在是令我惊喜。
还好我的设计案在价格上有一些机动性,而且据了解,PSoC 的配置灵活性通常能减少一些外部元件的运用;当然,我们已经有仿真器以及一些经验,所以我决定进一步看看这款元件以及搭配的PSoC 4PioneerKit开发工具(可相容Arduino外壳)。该款开发工具采用多才多艺的PSoC 4200系列元件,这也成为我的设计案出发点。
想知道更多与PSoC 相关的资讯?请连结Cypress资源中心
Cypress提供了很棒的开发环境PSoC Creator,能让你进行产品配置、编程以及除错;PSoC 的架构介于MCU与FPGA之间,除了处理器核心,该元件具备一些可配置的类比电路,以及一些可编程数位电路(不过与FPGA的又不太相同)。开发者也能随着元件取得一系列所需功能IP进行配置;该开发环境如下图所示。
PSoC Creator开发环境
如果你需要ADC,只要从开发环境右方的元件选择区选择该功能区块并拖曳下来;如果你需要PWM,也是一样的步骤。要运算放大器或是SPI控制器吗?也没问题!把它们连结在一起以取得一个架构图,然后选择哪些接脚与不同的功能关联,完成了硬体编译,就可以准备好撰写应用程式。
每个你所配置的元素都有其代码与标头,在开发环境的“WorkspaceExplorer”区域可以找到;所有的API呼叫包含在标头档案中,能轻易地复制剪贴到你的程式码中。在开发环境的右下角可以看到符号与“OpenDatasheet”选项,每个零件都有自己的规格表,你能在进行配置前先取得,或是在配置完成后按滑鼠右键来取得。
PSoC Creator还包含免费的KeilC编译器,可提供的支援也是免费的;令我个人满意的是,此系统并非以Eclipse为基础。如果你真的想要冒险,你也可以采用一种Cypress称为“datapaths”的技巧,打造小型硬体机器或其他功能。甚至还可以使用Verilog语言。