加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSSRSS-巴斯仪表网
您当前的位置:首页 > 设计中心 > 可编程逻辑器件

FPGA入门:LED的FPGA控制

时间:2014-05-03  来源:123485.com  作者:9stone

  LED显示:让你的FPGA板发光!

  项目简介

  该项目包括6个部分:

  第一部分: LED闪烁

  第二部分: LED是怎样工作的(发光二极管的工作原理)

  第三部分: 改变发光二极管的亮度

  第四部分: 7段数码管显示

  第五部分: LED复用

  第六部分: LED点阵显示

  链接

  美信的LED显示技术.

  引脚复用 - 减少LED显示时使用的引脚数量.

  LED闪烁

  你有一个带LED的FPGA板吗?

  试试下面这个简单的设计

  ==========================================================

  module LEDglow(clk, LED);input clk;output LED;reg [23:0] cnt;always @(posedge clk) cnt<=cnt+1;wire [3:0] PWM_input = cnt[23] ? cnt[22:19] : ~cnt[22:19];reg [4:0] PWM;always @(posedge clk) PWM <= PWM[3:0]+PWM_input;assign LED = PWM[4];endmodule

  ==========================================================

  注意:"clk" 时钟信号的频率大约在 20MHz.

  否则的话,LED闪烁得可能会太快或太慢。

  LED是怎样工作的

  用FPGA控制LED

  理想的发光二极管控制器是一个电流源。

  FPGA的输出引脚是电压源,简单的解决办法是添加一个串联电阻到LED,通

  常电阻的大小取100到1K欧姆。

  

 

  LED基础

  LED (发光二极管) 是一个当有点流流经它时会发光的半导体器件。

  其符号看起来像二极管,有一个阴极和一个阳极。

  

 

  LED允许电流从一个方向导通,另一个方向截至,这点跟二极管是一样的

  跟所有二极管一样,LED也有一个导通电压,大约在2.0V左右。

  低于 2.0V 时, 不发光(没有电流流过LED).

  高于 2.0V 时, LED导通,发光强度随着流经LED电流的大小而变化。

  LED有两个极限参数:

  最大正向电流(最大发光强度).通常在10 mA量级.

  最大反向电压(尽管LED被反向偏置时没有电流流过它,但是也不要

  加太大的反向电压).通常反向电压限制在5V,比通常的二极管低得多!

   改变发光二极管的亮度

  点亮或熄灭LED

  下面是如何让LED闪烁的代码(开/关).

  ====================================================

  module LEDblink(clk, LED);input clk; // clock typically from 10MHz to 50MHzoutput LED;// create a binary counterreg [32:0] cnt;always @(posedge clk) cnt<=cnt+1;assign LED = cnt[22]; // blink the LED at a few Hz (change

  // the bit index to change the blinking rate)endmodule====================================================

  使LED半亮

  一种办法是增大串联在LED的电阻的阻值一倍。

  另一种办法是通过FPGA驱动LED一半的时间。如果切换的速度足够快的话,LED看

  起来就是半亮的。

  ====================================================

  module LEDhalflit(clk, LED);input clk; // clk should be at least 200Hz. Anything above

  //is fine (most FPGA boards have adequate clocks,

  // running at a few 10's of MHz)output LED;reg toggle;always @(posedge clk) toggle<=~toggle;

  // toggles at half

  //the clk frequency

  // (at least 100Hz)assign LED = toggle;endmodule====================================================

  平滑的改变LED的亮度

  对于LED亮度控制。PWM信号是一个理想的解决办法。

  下面是使用4位数字来控制LED产生16个亮度等级的例子。

  ====================================================

  module LED_PWM(clk, PWM_input, LED);input clk;input [3:0] PWM_input;

                                                         // 16 intensity levelsoutput LED;reg [4:0] PWM;always @(posedge clk) PWM <= PWM[3:0]+PWM_input;assign LED = PWM[4];endmodule=====================

  LED呼吸闪烁

  通过连续的改变LED的亮度,使得LED看起来像是在呼吸。

  ====================================================

  module LEDglow(clk, LED);input clk;output LED;reg [23:0] cnt;always @(posedge clk) cnt<=cnt+1;wire [3:0] PWM_input = cnt[23] ? cnt[22:19] : ~cnt[22:19];

  // ramp the PWM input up and downreg [4:0] PWM;always @(posedge clk) PWM <= PWM[3:0]+PWM_input;assign LED = PWM[4];endmodule====================================================

  这跟我们在第一节展示的例子的HDL代码是一样的.

分享到:
来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
栏目导航->可编程逻辑器件
  • 可编程逻辑器件
  • 传感器技术
  • 推荐资讯
    使用普通运放的仪表放大器
    使用普通运放的仪表放
    3V与5V混合系统中逻辑器接口问题
    3V与5V混合系统中逻辑
    数字PID控制及其改进算法的应用
    数字PID控制及其改进
    恶劣环境下的高性价比AD信号处理数据采集系统
    恶劣环境下的高性价比
    栏目更新
    栏目热门