此示例演示如何配置 CLB 逻辑块以充当单次 PWM 发生器。该示例使用组合逻辑 (LUT)、状态机 (FSM)、计数器和 HLC 来演示收到外部/软件触发时的单次 PWM 输出生成功能。
CLB 逻辑块配置为在接收到触发信号时模拟单次触发计时器。计时器从零开始计数,达到匹配值、然后停止计数,直到接收到下一个触发信号。输出在计数器正在计数时被驱动为高电平,在计数器达到最大值并停止计数时被驱动为低电平。上述逻辑是使用 LUT、FSM 和计数器实现的。另一个计数器用于确保后续系统仅响应上升沿事件,不响应输入电平。该示例还使用 HLC 子模块和 CLB 中断机制支持可变脉冲宽度。HLC 用于在每个第 3 个触发信号事件(由另一个计数器跟踪)之后生成中断,并且脉冲宽度由应用更新。示例中配置的输出脉冲范围是 0.2μs - 0.8μs,每个中断 ISR 的阶跃增加 50ns。PWM 寄存器配置为使用活动和影子寄存器,这也是使用 HLC 块完成的。
整体 CLB 配置如图 4-14 所示。
该示例支持两种配置模式:基于软件的触发和基于外部信号的触发。可以通过将 EXAMPLE_MODE 设置为 0/1 来选择所需的模式。对于基于软件的触发,您可以在 CCS“Expressions”窗口中手动将 SOFT_TRIGGER 从 0 更新为 1,并观察示波器上的单次脉冲输出。请注意,在将该变量设置为“1”之前,该变量已设置为“0”,因为 CLB 系统仅响应上升沿。而对于基于外部信号的触发,EPWM 模块配置为生成 1MHz 的触发信号,并且导通时间非常短(10% 占空比)。GPIO0 上生成的此 EPWM 信号在内部路由为 CLB 的触发信号输入,因此无需外部连接。
要运行该示例,请执行以下过程:
- 在 CCS v9.0 或更高版本中,依次点击“Project”->“Import CCS Projects…”。
- 导航到 CLB 工具示例目录。路径为:
- [C2000Ware]\driverlib\f28004x\examples\clb\ccs,在后续描述中,假设使用上述 C2000Ware 目录。
- 选择工程“clb_ex17_one_shot_pwm”并点击“Finish”。
- 在 CCS Project Explorer 窗口中,展开工程“clb_ex17_one_shot_pwm”并打开文件“clb_ex17_one_shot_pwm.syscfg”。
- 检查逻辑块的配置并观察 LUT_0 和 FSM_0、COUNTER_0、COUNTER_1、COUNTER_2、HLC 和输出 LUT 中的逻辑表达式。
- 将 EXAMPLE_MODE 配置为 0/1,以在软件/外部触发信号模式下运行。
- 在 CCS 菜单中依次选择“Project”->“Build Project”。
- [可选] – 有关如何运行 CLB 仿真的说明,请参阅节 3.5.3。
- 在 F28004x 控制卡上加载示例。
- 如果选择了软件触发信号模式:
- 向 CCS“Expressions”窗口添加 SOFT_TRIGGER 变量。
- 将 GPIO2 连接到示波器并确保示波器处于“One-shot”模式而不是“FREE_RUN”模式。
- 运行示例并在窗口中设置 SOFT_TRIGGER = 1,您应该能够在示波器上观察到单个脉冲。
- 首先设置 SOFT_TRIGGER = 0,然后设置 SOFT_TRIGGER = 1 以生成下一个脉冲。
- 每次重复上述步骤以提供上升沿触发信号。
- 每三次触发后,脉冲将增加 50ns。
- 如果选择了外部触发信号模式:
- 将 GPIO0(触发信号)和 GPIO2(输出)连接到示波器并将示波器配置为 FREE_RUN 模式。
- 在触发信号的每三个上升沿之后,您应该观察到输出脉冲宽度的线性变化。