**这是本文档旧的修订版!**
三色灯控制
====硬件平台====
====设计要求====
- 掌握按键消抖和PWM的实现原理
- 了解LED通过PWM调亮度的方法
- 掌握三基色颜色合成的原理
- 基于STEP-MXO2第二代平台实现三色灯的基本颜色合成及亮度控制
工作原理
这里三色灯是由光学三基色(红绿蓝)三种颜色的LED灯组合而成。
根据红绿蓝三色的不同组合可以合成不同颜色的光,例如红色和绿色组合可以产生黄色的光,绿色和蓝色组合可以产生青色的光,相同颜色不同亮度组合也会产生不同的光等等,如图。
本实验中我们实现三基色的固定组合,最终输出产生图中的红色、绿色、蓝色、黄色、青色、品红、白色7中颜色,然后根据PWM的原理调节LED灯颜色的亮度,使用PWM,给LED灯上施加数字信号,通过调整数字信号的占空比(调整占空比 = 调整有效值)来控制LED灯的亮度。
如上图所示,脉冲信号的周期为T,高电平脉冲宽度为t,占空比为t/T。为了实现PWM脉宽调制,我们需要保持周期T不变,调整高电平脉宽t的时间,从而改变占空比。
- 当t = 0时,占空比为0%,因为我们的LED硬件为低电平点亮,所以为最亮的状态。
- 当t = T时,占空比为100%,LED灯为最暗(熄灭)的状态。
我们使用按键控制t的变化,控制RGB合成色的亮度。
====硬件连接====
====代码设计====
设计文件
三色灯设计要求我们输出不同的颜色同时亮度可调,我们使用一个按键循环控制颜色,另外使用两个按键控制灯的亮度,接口定义如下:
input clk_in, input rst_n_in, input key_color, input key_up, input key_down, output led_R, output led_G, output led_B
有按键输入,需要按键消抖,具体原理请参考按键消抖实验,调用按键消抖的功能模块
//Debounce for key_color Debounce Debounce_color(.clk(clk_in),.rst_n(rst_n_in),.key_n(key_color),.key_pulse(color_pulse)); //Debounce for key_up Debounce Debounce_up(.clk(clk_in),.rst_n(rst_n_in),.key_n(key_up),.key_pulse(up_pulse)); //Debounce for key_down Debounce Debounce_down(.clk(clk_in),.rst_n(rst_n_in),.key_n(key_down),.key_pulse(down_pulse));
定义计数器cnt,每当按动按键key_color时,cnt在0~7之间循环计数,然后使用case语句,根据cnt不同的状态控制三色灯输出不同的颜色:
always@(posedge color_pulse or negedge rst_n_in) begin if(!rst_n_in) begin cnt <= 3'd0; color <= 3'd0; end else begin cnt <= cnt + 3'd1; case(cnt) 3'd0: color <= BLACK; 3'd1: color <= RED; 3'd2: color <= GREEN; 3'd3: color <= BLUE; 3'd4: color <= YELLOW; 3'd5: color <= CYAN; 3'd6: color <= MAGENTA; 3'd7: color <= WHITE; default: color <= BLACK; endcase end end
调用PWM功能模块,实现亮度的调节,具体原理见脉冲发生器和[呼吸灯]]实验,产生PWM信号Lightness_out,然后根据PWM控制亮度,如下:
assign led_R = Lightness_out? color[0]:1'b1; assign led_G = Lightness_out? color[1]:1'b1; assign led_B = Lightness_out? color[2]:1'b1;
引脚分配如下:
管脚名称 | clkin| rstnin| keycolor | keyup| keydown | ledR| ledG | led_B | ||||
---|---|---|---|---|---|---|---|---|
FPGA管脚 | C1 | N14 | L14 | M13 | M14 | M2 | N2 | P2 |
仿真结果
资源报告
资源 | 数量 | 比例 | 说明 |
---|---|---|---|
LUTs | 59 | 3% | |
寄存器 | 78 | 2% | |
存储器 | 0 | 0% | |
IO管脚 | 8 | ||
时钟频率 | 12MHz |
知识点
- 颜色合成原理
- PWM脉宽调节
- 脉冲发生原理
参考文档
相关文档
文件名称 | 功能 |
---|---|
Color_led.v | 三色灯,顶层模块 |
Debounce.v | 按键消抖模块 |
Lightness.v | PWM亮度调节模块 |