搜索
bottom↓
回复: 0

【正点原子FPGA连载】第十一章触摸按键控制LED灯实验

[复制链接]

出0入234汤圆

发表于 2021-1-25 16:43:31 | 显示全部楼层 |阅读模式
1)实验平台:正点原子超越者FPGA开发板
2)  章节摘自【正点原子】超越者之FPGA开发指南
3)购买链接:https://item.taobao.com/item.htm?&id=631660290421
4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/fpga/zdyz-chaoyuezhe.html
5)正点原子官方B站:https://space.bilibili.com/394620890
6)正点原子FPGA技术交流群:905624739
QQ群头像.png

100846rel79a9p4uelap24.jpg

100846f1ce1fg14zbg0va4.png

第十一章触摸按键控制LED灯实验




随着电子技术的不断发展,触摸按键的应用场景越来越广泛。触摸按键在稳定性、使用寿命、抗干扰能力等方面都优于传统的机械按键,被广泛应用于遥控器,便携电子设备,楼道电灯开关,各类家电控制面板等方面。本章将介绍触摸按键的控制方法并使用开发板上的触摸按键控制LED的亮灭。
本章分为以下几个章节:
1111.1  简介
11.2  实验任务
11.3  硬件设计
11.4  程序设计
11.5  下载验证


11.1简介
触摸按键主要可分为四大类:电阻式、电容式、红外感应式以及表面声波式。根据其属性的不同,每种触摸按键都有其合适的使用领域。
电阻式触摸按键由多块导电薄膜按照按键的位置印制而成,但由于耐用性较差且维护复杂,目前使用率较低;红外感应式触摸按键通过红外扫描来识别按键位置,一般在较恶劣的环境下使用;表面声波式触摸按键利用声波扫描来识别是否按下,使用寿命长,较适合公共场所的POS机,无人售货机等处使用。
电容式触摸按键:这种按键的诞生主要是为了克服电阻式按键耐用性差的不足所提出的。电容式触摸按键采用电容量为评判标准,其感应区域可穿透绝缘外壳(玻璃、塑料等)20mm以上。其灵敏度和可靠性不会因环境条件的改变或长期使用而发生变化,具有防水、强抗干扰能力强、适应温度范围广以及使用寿命长等优点,是现代使用最广泛,发展最迅速的一种触摸按键。
接下来,我们具体了解一下电容触摸按键的构造和工作原理。
电容触摸按键主要由按键IC部分和电容部分构成。按键IC部分主要由元器件供应商提供,用于将电容的变化转换为电信号。电容部分指的是由电容极板、地、隔离区等组成触摸按键的电容环境。
任何两个导电的物体之间都存在着感应电容,在周围环境不变的情况下,该感应电容值是固定不变的。如下图所示,手指接触到触摸按键时,按键和手指之间产生寄生电容,使按键的总容值增加。
11764.png

图 11.1.1 触摸按键寄生电容示意图

触摸按键按下前后,电容的变化如下图所示。电容式触摸按键IC在检测到按键的感应电容值改变,并超过一定的阈值后,将输出有效信号表示按键被按下。
11900.png

图 11.1.2 触摸过程电容变化示意图

11.2实验任务
本节的实验任务是使用触摸按键控制LED灯的亮灭,开发板上电后LED为点亮状态,手指触摸后LED熄灭;当再次触摸时,LED点亮。
11.3硬件设计
超越者开发板上的触摸按键部分的原理图如图 11.3.1所示。其中TPAD是芯片的输出引脚,连接到超越者开发板的IO端口。
111142.png

图 11.3.1 触摸按键电路原理图

开发板上所使用的触摸IC型号为AR101(或者JL223B,和AR101完全兼容),它可以通过OP1和OP2两个引脚选择不同的工作模式:OP1拉低时,OUT引脚输出信号高电平有效;OP1拉高时,OUT输出信号低电平有效。
当OP2拉低时,触摸IC工作在同步模式(类似于非自锁的轻触按键),即触摸时输出有效电平,松开后输出无有效电平;OP2拉高时触摸IC工作在保持模式(类似于自锁按键),即检测到触摸操作后输出有效电平,松开后,输出电平保持不变。当再次检测到触摸操作时,输出电平变化并继续保持。
图 11.3.1中触摸IC的引脚OP1和OP2均拉低,因此当手指按在触摸按键上时,TOUT管脚输高电平,松开后输出低电平。
本实验中,系统时钟、复位按键、触摸按键和LED灯的管脚分配如下表所示。
表 11.3.1 触摸按键控制LED管脚分配图
1131.png

对应的UCF约束语句如下所示:
  1. # PlanAhead Generated physical constraints
  2. NET "sys_clk" LOC = N8 | IOSTANDARD = "LVCMOS33";
  3. NET "sys_rst_n" LOC = G16 | IOSTANDARD = "LVCMOS33";
  4. NET "led" LOC = T5 | IOSTANDARD = "LVCMOS33";
  5. NET "touch_key" LOC = P7 | IOSTANDARD = "LVCMOS33";
复制代码

11.4程序设计
本次设计的模块端口及信号连接如下图所示。通过捕获触摸按键端口的上升沿,得到一个时钟周期的脉冲信号,来控制LED灯的亮灭。
112130.png

图 11.4.1 模块端口及信号连接图

触摸按键控制LED代码如下:
  1. 1  module touch_led(
  2. 2      //input
  3. 3      input        sys_clk,      //时钟信号50Mhz
  4. 4      input        sys_rst_n,    //复位信号
  5. 5      input        touch_key,    //触摸按键
  6. 6   
  7. 7      //output
  8. 8      output  reg  led           //LED灯
  9. 9  
  10. 10 );
  11. 11
  12. 12 //reg define
  13. 13 reg    touch_key_d0;
  14. 14 reg    touch_key_d1;
  15. 15 reg    switch;
  16. 16
  17. 17 //wire define
  18. 18 wire   touch_en;
  19. 19
  20. 20 //根据按键信号的上升沿判断按下了按键
  21. 21 assign  touch_en = (~touch_key_d1) & touch_key_d0;
  22. 22 always @ (posedge sys_clk or negedge sys_rst_n) begin
  23. 23     if(sys_rst_n == 1'b0) begin
  24. 24         touch_key_d0 <= 1'b0;
  25. 25         touch_key_d1 <= 1'b0;
  26. 26     end
  27. 27     else begin
  28. 28         touch_key_d0 <= touch_key;
  29. 29         touch_key_d1 <= touch_key_d0;
  30. 30     end
  31. 31 end
  32. 32
  33. 33 //对触摸按键端口接收的数据延迟两个周期
  34. 34 always @ (posedge sys_clk or negedge sys_rst_n) begin
  35. 35     if (sys_rst_n == 1'b0)
  36. 36         switch <= 1'b0;
  37. 37     else begin
  38. 38         if (touch_en)
  39. 39             switch <= ~switch;
  40. 40         else
  41. 41             switch <= switch;
  42. 42     end
  43. 43 end
  44. 44
  45. 45 //根据上升沿使能信号切换led状态
  46. 46 always @ (posedge sys_clk or negedge sys_rst_n) begin
  47. 47     if (sys_rst_n == 1'b0)
  48. 48         led <= 1'b1;
  49. 49     else begin
  50. 50         if (switch)
  51. 51             led <= 1'b0;
  52. 52         else
  53. 53             led <= 1'b1;
  54. 54     end
  55. 55 end
  56. 56
  57. 57 endmodule
复制代码

程序中第21至31行是一个经典的边沿检测电路,通过检测touch_key的上升沿来捕获按键按下的信号,一旦检测到按键按下,输出一个时钟周期的脉冲touch_en。每当检测到touch_en的脉冲信号,led取反一次。
为了验证我们的程序,我们在modelsim内对代码进行仿真。
Testbench模块代码如下:
  1. 1  `timescale 1ns/1ns
  2. 2  module tb_touch_led();
  3. 3  
  4. 4  //parameter define
  5. 5  parameter   T =20 ;
  6. 6  
  7. 7  //reg define
  8. 8  reg sys_clk;
  9. 9  reg sys_rst_n;
  10. 10 reg touch_key;
  11. 11
  12. 12 //wire define
  13. 13 wire led;
  14. 14
  15. 15 //*****************************************************
  16. 16 //**                    main code
  17. 17 //*****************************************************
  18. 18
  19. 19 //给输入信号初始值
  20. 20 initial begin
  21. 21     sys_clk              <=1'b0;
  22. 22     sys_rst_n            <=1'b0;
  23. 23     touch_key            <=1'b0;
  24. 24     #20  sys_rst_n       <=1'b1;
  25. 25     #10  touch_key       <=1'b1;
  26. 26     #30  touch_key       <=1'b0;
  27. 27     #110 touch_key       <=1'b1;
  28. 28     #30  touch_key       <=1'b0;
  29. 29 end
  30. 30   
  31. 31 //50Mhz的时钟,周期则为1/50Mhz=20ns,所以每10ns,电平取反一次
  32. 32 always # (T/2) sys_clk <= ~sys_clk;
  33. 33
  34. 34 touch_led  u0(
  35. 35 .sys_clk(sys_clk),
  36. 36 .sys_rst_n(sys_rst_n),
  37. 37 .touch_key(touch_key),
  38. 38 .led(led)
  39. 39 );
  40. 40 endmodule
复制代码

仿真波形如图 11.4.2所示。
114641.png

图 11.4.2 仿真波形图

测试代码中,第20至29行为信号的激励,起始时sys_clk、sys_rst_n、touch_key为低电平,20ns时将复位信号拉高,10ns后将touch_key拉高并保持30ns,模拟第一次按键触摸操作,110ns后再将touch_key拉高并保持30ns,模拟第二次按键触摸操作。从图 11.4.2仿真波形图可以看出,在第一次按下按键后led由高电平变为低电平,再次按下后,led电平再次发生改变。
11.5下载验证
首先我们打开触摸按键控制LED灯工程,在工程所在的路径下打开touch_led/prj/touch_led文件夹,在里面找到“touch_led.xise”并双击打开。注意工程所在的路径名只能由字母、数字以及下划线组成,不能出现中文、空格以及特殊字符等。touch_led工程打开后如图 11.5.1所示。
115145.png

图 11.5.1 触摸按键控制LED灯工程

工程打开后双击“Configure Target Device”一栏中的“Manage Configuration Project(iMAPCT)” (上图红框位置),在弹出的界面中双击“Boundary Scan”,下载界面如图 11.5.2所示。
115378.png

图 11.5.2 程序下载界面

如下图 11.5.3所示。将Xilinx下载器一端连接电脑,另一端与开发板上的JTAG下载口连接,然后连接电源线。
115537.png

图 11.5.3 超越者开发板实物图

打开电源开关,接下来我们下载程序,验证触摸按键控制LED灯功能。
开发板电源打开后,点击工具栏中的“Initialize chain”图标(图 11.5.4红框位置),添加工程目录下的“touch_led.bit”文件。然后双击“Program”将工程编译完成后得到的bit文件下载到开发板中,如图 11.5.5所示。
115841.png

图 11.5.4 硬件连接

115900.png

图 11.5.5 程序下载完成界面

程序下载完成后,可以看到超越者开发板上的LED0处于点亮状态,触碰一次触摸按键,就可以看到LED灯熄灭,再次触摸点亮LED灯。如下图所示:
116033.png

图 11.5.6 触摸按键控制LED灯效果图


阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 09:39

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表