差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
呼吸灯 [2016/06/28 11:05]
anran [代码设计]
呼吸灯 [2017/03/22 23:51]
zhijun
行 24: 行 24:
  
 结合呼吸灯的原理,整个呼吸的周期为最亮→最暗→最亮的时间,即t的值的变化:0→T→0逐渐变化,这个时间应该为2s 结合呼吸灯的原理,整个呼吸的周期为最亮→最暗→最亮的时间,即t的值的变化:0→T→0逐渐变化,这个时间应该为2s
-====硬件连接====+====硬件说明====
 ------ ------
 呼吸灯的设计较为简单,我们使用25MHz的系统时钟作为高频信号做分频处理,调整占空比实现PWM,通过LED灯LD1指示输出状态。 呼吸灯的设计较为简单,我们使用25MHz的系统时钟作为高频信号做分频处理,调整占空比实现PWM,通过LED灯LD1指示输出状态。
行 30: 行 30:
 {{ :​led电路连接.jpg |LED电路连接}} {{ :​led电路连接.jpg |LED电路连接}}
  
-====代码设计==== +====Verilog代码==== 
----- +------
-===设计文件===+
  
 {{ :​呼吸灯程序设计.jpg |呼吸灯程序设计}} {{ :​呼吸灯程序设计.jpg |呼吸灯程序设计}}
行 38: 行 37:
 呼吸灯设计要求呼吸的周期为2s,也就是说LED灯从最亮的状态开始,第一秒时间内逐渐变暗,第二秒的时间内再逐渐变亮,依次进行。 呼吸灯设计要求呼吸的周期为2s,也就是说LED灯从最亮的状态开始,第一秒时间内逐渐变暗,第二秒的时间内再逐渐变亮,依次进行。
  
-本设计中需要两个计数器cnt1和cnt2,cnt1随系统时钟同步计数(系统时钟上升沿时cnt1自加1)范围为0~T,cnt2随cnt1的周期同步计数(cnt1等于T时,cnt2自加1)范围也是0~T,这样每次cnt1在0~T的计数时,cnt2为一个固定值,相邻cnt1计数周期对应的cnt2的值逐渐增大,我们将cnt1计数0~T的时间作为脉冲周期,cnt2的值作为脉冲宽度,则占空比 = cnt2/​T,​占空比从0%到100%的时间 = cnt2*cnt1 = T^2 = 1s = 25M个系统时钟,T = 5000,我们定义CNT_NUM = 5000作为两个计数器的计数最大值。+本设计中需要两个计数器cnt1和cnt2,cnt1随系统时钟同步计数(系统时钟上升沿时cnt1自加1)范围为0~T,cnt2随cnt1的周期同步计数(cnt1等于T时,cnt2自加1)范围也是0~T,这样每次cnt1在0~T的计数时,cnt2为一个固定值,相邻cnt1计数周期对应的cnt2的值逐渐增大,我们将cnt1计数0~T的时间作为脉冲周期,cnt2的值作为脉冲宽度,则占空比 = cnt2/​T,​占空比从0%到100%的时间 = cnt2*cnt1 = T^2 = 1s = 12M个系统时钟,T = 2400,我们定义CNT_NUM = 2400作为两个计数器的计数最大值。
  
 {{ ::​呼吸灯pwm原理.jpg |PWM呼吸灯原理}} {{ ::​呼吸灯pwm原理.jpg |PWM呼吸灯原理}}
  
 <code verilog> <code verilog>
-parameter CNT_NUM = 5000 //period = (5000^2)*2 = 50000000 ​= 2s+parameter CNT_NUM = 2400 //period = (2400^2)*2 = 24000000 ​= 2s
 </​code>​ </​code>​
  
行 92: 行 91:
  
 ^ 管脚名称 | clk_in| rst_n_in| Breath_led| ^ 管脚名称 | clk_in| rst_n_in| Breath_led|
-^ FPGA管脚 | C1    | A2      ​A3        |+^ FPGA管脚 | C1    | L14     N13        |
 ====仿真结果==== ====仿真结果====