Advertisement

基于FPGA的VHDL语言呼吸灯设计

阅读量:

网上的各种参考资料内容不够详尽, 希望能够将个人思路与大家分享, 共同进步

有不足的地方希望大家能指出,共同进步!

1.系统概述

本设计基于AlteraCyclone II EP2C35平台,在锁相环以及计数器等数字电路中实现了某种功能。通过该系统能够生成其占空比可随着时间自动调节的PWM波形。从而实现了每隔2秒调节LED指示灯亮度的变化。

2.系统原理图

见图1所示,其中input和output分别构成输入输出模块。其中altpll0模块是锁相环组件,在此电路中inclk0作为输入引脚使用,并通过c0端子作为输出引脚配置。此外,在count10模块中,clk端子作为输入信号接收端口连接至系统主控单元,并通过outclk端子实现反馈回路的闭环控制。在pwm功能块中,则通过clkus作为时钟信号源的输入接口完成脉冲宽度调制控制逻辑。最后,在FPGA开发板上50MHz主振荡器输出端配置了PIN_U11端子用于同步信号传输,并通过PIN_W22端子连接至LED灯1的电平控制电路。

图1 系统原理图

该50MHz信号由input端输入后经锁相环模块处理后得到稳定的10MHZ时钟输出,并通过c_out引脚输出到下一级电路系统。随后,在十分频计数器模块内部对其时钟频率进行细分处理后得到所需1MHZ基准脉冲,并将其输出至pwm_out引脚以完成后续波形调节任务。最后所得的经过调制后的数字控制信息则被送至W22引脚接通相应的逻辑电路实现对LED亮度值的有效控制

3.系统工作流程

50MHz晶体管经过PLL锁相环和十进制分频计数器的处理后,生成所需的1MHz时钟信号。所有计数调制过程均基于所述的1MHz基准时钟信号进行。

对上升沿进行计数操作,在达到或满额定的1000个上升沿(相当于持续时间约为1毫秒)时,则采取以下措施:首先将输出电压降至预定水平,并将此时的计数值清零;随后生成一个频率稳定的PWM信号(其频率设定为1kHz)。每当完成一次上边沿计数值递增操作后(即将pwmcount与pwgat比较),如果两者相等,则提升输出电压至预定高电平。特别地,在输入信号处于low状态(即完成一次完整呼吸周期的一半)的情况下,在每一次提升电压的操作之后均增加阈值一位;而在输入信号仍处于low状态但已经完成整个呼吸周期的一半阶段(high状态)时,则减少阈值一位以恢复正常的呼吸调节节奏。整个系统的最大允许阈值为999位而最小允许阈值则定为1位这一设定确保了整个呼吸调节过程能够稳定运行在2秒的时间间隔内

图2 系统流程框图

4.模块代码

1.十分频计数器的VHDL实现

2.波形调制的VHDL实现

全部评论 (0)

还没有任何评论哟~