基于STM32的四路抢答器.docx
《基于STM32的四路抢答器.docx》由会员分享,可在线阅读,更多相关《基于STM32的四路抢答器.docx(27页珍藏版)》请在冰豆网上搜索。
基于STM32的四路抢答器
课程设计说明书
题目:
基于STM32的四路抢答器
学院:
年级专业:
学号:
学生姓名:
指导教师:
摘要
在各种智力竞赛场合,抢答器是必不可少的最公正的用具。
在我们各种竞赛中我们也经常能看到有抢答的环节,某些举办方采用让选手通过举答题板的方法判断选手的答题权,这在某种程度上会因为主持人的主观误断造成比赛的不公平性,而抢答器的应用就能避免这种弊端。
今天随着科技的不断进步抢答器的制作也更加追求精益求精,人们摆脱了耗费很多元件仅来实现用指示灯和一些电路来实现简单的抢答功能,使第一个抢答的参赛者的编号能通过指示灯显示出来,避免不合理的现象发生。
但这种电路不易于扩展,而且当有更高要求时就无法实现,例如参赛人数的增加。
随着数字电路的发展,数字抢答器诞生了,它易于扩展,可靠性好,集成度高,而且费用低,功能更加多样,是一种高效能的产品。
而如今在市场上销售的抢答器大多采用可编程逻辑元器件,或利用单片机技术进行设计。
本文实现了一个基于嵌入式STM32单片机的4路抢答器系统设计,本系统设计主要分为硬件设备和软件控制两大部分。
外部硬件使用STM32单片机作为控制中心,用4个按键作为抢答输入,抢答开始后,抢答成功者的LED灯标识为红色闪烁,并且显示各抢答输入的时间。
关键词:
智能抢答器,STM32,按键输入,数码管显示
第1章绪论
1.1课题研究的相关背景
抢答器是一种应用非常广泛的设备,在各种竞赛、抢答场合中,它能迅速、客观地分辨出最先获得发言权的选手。
早期的抢答器只由几个三极管、可控硅、发光管等组成,能通过发光管的指示辩认出选手号码。
现在大多数抢答器均使用单片机和数字集成电路,并增加了许多新功能,如选手号码显示、抢按前或抢按后的计时、选手得分显示等功能。
本系统设计主要分为硬件设备和软件控制两大部分。
外部硬件使用STM32单片机作为控制中心,用4个按键作为抢答输入,抢答开始后,抢答成功者的LED灯标识为红色闪烁,并且显示各抢答输入的时间。
1.2选题的目的和意义
通过这次设计,掌握STM32单片机的原理,了解简单多功能抢答器组成原理,初步掌握多功能抢答器的调整及测试方法,提高动手能力和排除故障的能力。
同时通过本课题设计与仿真进行调试,提高自己的动手能力,巩固已学的理论知识,建立单片机理论和实践的结合,了解多功能抢答器各单元电路之间的关系及相互影响,从而能正确设计、应用各个单元电路。
1.3课题研究的内容
本系统采用模块化设计智能抢答器,在抢答比赛中广泛应用,各组分别有一个抢答按钮。
抢答开始后,抢答成功者的LED灯标识为红色闪烁,并且显示各抢答输入的时间。
在通过研究并在设计验证后发现,采用单片机技术设计的抢答器与目前常用的抢答器相比,首先,电路连接简单,因为大多数功能单元都通过程序设计在单片机内部,第二,工作性能可靠,抗干扰能力优于目前抢答器。
所以本研究是一个实用的工程设计,具有创新性。
1.4国内外研究现状
抢答器作为一种电子产品,早已广泛应用于各种智力和知识竞赛场合,但目前所使用的抢答器有的电路较复杂不便于制作,可靠性低,实现起来很困难;有的则用一些专用的集成块,而专用集成块的购买又很困难。
为适应高校等多代表队单位活动的需要而设计一个多功能抢答器,这种抢答器具有电路简单,元件普通,易于购买等优点,很好地解决了制作者制作困难和难于购买的问题。
在国内外已经开始了普遍的应用。
1.5抢答器目前存在的主要问题
随着改革开放事业的不断深入,促使人们学科学、学技术、学知识的手段多种多样,抢答器作为一种工具,已广泛应用于各种智力和知识竞赛场合。
但抢答器的使用频率校低,且有的要么制作复杂,要么可靠性低,减少兴致。
作为一个单位若专购一台抢答器虽然在经济上可以承受,但每年使用的次数极少,往往因长期存放使(电子器件的)抢答器损坏,再购置的麻烦和及时性就会影响活动的开展。
而且目前多数抢答器存在3个不足之处:
第一,现场线路连接复杂。
因为每个选手位于抢答现场的不同位置,每个选手与控制台之间要有长长的连接线。
选手越多,连接线就越多、越乱,这些连接线不仅影响了现场的美观,而且降低了抢答器的可靠性,增加了安装的难度,甚至影响了现场人员的走动。
第二,电路复杂。
因为单片机只完成号码处理、计时、数据运算等功能,其它功能如选手号码的识别、译码、计分显示等仍只能通过数字集成电路完成。
采用单片机扫描技术识别选手抢按号码时,电路的延迟时间较大。
第三,选手抢按成功,但出现没有抢答被记录的问题。
第2章抢答器的系统概述
2.1系统的主要功能
本系统是借用单片机采用模块化设计的4路抢答器,包括4路抢答按纽、计时显示、抢答成功标识,各种相关显示调控功能等
本系统采用模块化设计的四路抢答器,在抢答比赛中广泛应用,各组分别有一个抢答按钮。
一共有4个按键输入,分别对应4路选手的抢答按键。
单片机是整个抢答器的核心,内部电路设计用汇编语言编写。
它完成了时间参数的设定,抢按号码的译码,保存;显示;输出,抢按及答题倒计时功能等。
本设计中,有四个共阳的数码管,四个数码管。
主持人按下复位键(RESET)后开始抢答。
抢答成功者的LED灯标识为红色闪烁,并且显示各抢答输入的时间。
2.2抢答器的工作流程
抢答器的基本工作原理:
在抢答后,按键产生的下降沿,被中断的LINE线捕捉,从而实现进入中断服务函数,进行LED闪烁,以及实现相应数码管的计时显示工作,进而标识识别出抢答成功者的标号,进行相应的回答。
2.3STM32的功能及简介
现阶段,市场上低端产品处理器以8位单片机为主,例如广为人知的C51系列,而高端则是以32位单片机为主,例如基于ARMCortex-M3内核的STM32系列,是专门为要求高性能、低功耗、低成本的嵌入式系统设计的芯片。
本系统是使用STM32单片机,采用模块化设计的4路抢答器,包括4路抢答按纽、计时显示、各种相关显示调控功能等。
采用STM32F103VET6的100管脚的单片机,连接四路按键,四路LED,以及要显示四个独立的数码管,故需要比较多的I/O口.使用外部中断包含16个的边沿检测器,用于产生中断,每个中断线都可以独立地配置它的触发事件(上升沿或下降沿或双边沿),并能够单独地被屏蔽;有一个挂起寄存器维持所有中断请求的状态。
EXTI可以检测到脉冲宽度小于内部APB2的时钟周期。
多达112个通用I/O口连接到16个外部中断线,满足系统
功能的需要。
从性能、价格、实际需要,STM32F103VET6较之8位8051单片机等,更为符合设计要求。
图2.4STM32单片机的内部结构图
ARMCortex-M3处理器是新一代的32位处理器,是一个高性能、低成本的开发平台,适用于微控制器、工业控制系统以及无线网络传感器等应用场合。
其特点为:
1.性能丰富成本低。
专门针对微控制处理器应用特点而开发的32位MCU,具有高性能、低成本、易应用等特点。
2.低功耗。
把睡眠模式与状态保留功能结合在一起,确保Cortex-M3处理器既可提供低能耗,又不影响很高的运行性能。
3.可配置性强。
Cortex-M3处理器的NVIC功能提高了设计的可配置性,提供了多达240个具有单独优先级、动态重设优先级功能和集成系统时钟的系统中断。
4.丰富的链接。
功能和性能兼顾的良好组合,使基于Cortex-M3的设备可以有效处理多个I/O通道和协议标准。
STM32系列处理器先进的内部结构:
1.哈佛结构。
使其在处理器整数性能测试上有着出色的表现,可以达1.25DMIPS/MHz,而功耗仅为0.19mW/MHz。
2.Thumb-2指令集以16位的代码密度带来了32位的性能。
3.内置了快速的中断控制器,提供了优越的实时特性,中断的延迟时间降到只需6个CPU周期,从低功率模式唤醒的时间也只需6个CPU周期。
4.单周期惩罚指令和硬件除法指令。
STM32在嵌入式系统应用领域有着无可比拟的优势,本系统应用的STM32F103ZET6的增强型系列单片机的功能也十分强大。
详细介绍如下:
1.内核:
(ARM 32位的Cortex™-M3 CPU)最高72MHz工作频率,在存储器的0等待周期访问时可达1.25DMips/MHz;单周期乘法和硬件除法。
2.存储器:
从256K至512K字节的闪存程序存储器;高达64K字节的SRAM;带4个片选的静态存储器控制器、支持CF卡、SRAM、PSRAM、NOR和NAND存储器;并行LCD接口,兼容8080/6800模式。
3.时钟、复位和电源管理:
2.0~3.6V供电和I/O引脚;上电/断电复位(POR/PDR)、可编程点压监测器(PVD);4~16MHz晶体振荡器;内嵌经出厂调校的8MHz的RC振荡器;内嵌带校准的40kHz的RC振荡器;带校准功能的32kHzRTC振荡器。
4.低功耗:
睡眠、停机和待机模式;VBAT为RTC和后备寄存器供电。
5.3个12位模数转换器,1μs转换时间(多达21个输入通道):
转换范围:
0至3.6V;三倍采样和保持功能;温度传感器
6.2通道12位D/A转换器
7.DMA(12通道DMA控制器):
支持的外设:
定时器、ADC、DAC、SDIO、I^2S、SPI、I^2C和USART。
8.调试模式:
串行单线调试(SWD)和JTAG接口;Cortex-M3内嵌跟踪模块(ETM)。
9.多达112个快速I/O端口:
51/80/112个多功能双向I/O口,所有I/O口可以映像到16个外部中断;几乎所有端口均可容忍5V信号。
10.多达11个定时器:
多达4个16位定时器,内个定时器有多达4个用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入;2个16位位带死区控制和急刹车,用于电机控制的PWM高级控制定时器;2个看门狗定时器(独立和窗口型的);系统时间定时器;24位自减型计数器;2个16位基本定时器用于驱动DAC。
11.多达13个通信接口:
多达2个I^2C接口(支持SM-Bus/PM-Bus);多达5个USART接口(支持ISO7816,LIN,Ir-DA接口和调制解调控制);多达3个SPI接口(18M位/秒),2个可复用为I^2S接口;CAN接口(2.0B主动);USB2.0全速接口;SDIO接口。
12.CRC计算单元,96位的芯片唯一代码
13.ECOPACK®封装
2.4抢答器的优点及组成
在知识比赛中,特别是做抢答题目的时候,在抢答过程中,为了知道哪一组或哪一位选手先答题,必须要设计一个系统来完成这个任务。
如果在抢答中,靠视觉是很难判断出哪组先答题。
利用单片机系统来设计抢答器,使以上问题得以解决,即使两组的抢答时间相差几微秒,也可分辨出哪组优先答题。
本文主要介绍了单片机抢答器设计及工作原理,以及它的实际用途。
系统工作原理本系统采用STM32单片机作为核心。
控制系统的四个模块分别为:
存储模块、显示模块、计时模块、抢答开关模块。
该抢答器系统通过四个个按键输入抢答信号;利用存储程序来完成软件的设计;利用四个4位七段共阳数码管来完成显示功能。
工作时,用按键通过开关电路输入各路的抢答信号,经单片机的处理,输出控制信号,控制四个七段数码管和喇叭工作。
在数码管上显示哪一组先答题,从而实现整个抢答过程。
2.5本章小结
本章主要讲述了抢答器的工作原理和本设计系统的工作流程。
在说明工作原理的过程中,突出了电路的组成单元以及这些单元如何实现抢答功能;在说明系统的流程时,结合本设计的内容,指出了参数设置的方法和意义。
抢答正常流程的实现,同时也说明了抢答器的优点和STM32的功能及简介。
第3章系统的硬件设计与开发
3.1系统硬件总体设计
本章主要内容是系统的硬件电路的实现,即现场检测设备的硬件电路设计,四路按键作为输入信号传给STM32单片机,STM32作为主控制芯片,四盏LED作为输出,抢答成功者的LED灯红色闪烁,四个独立数码管,分别显示各自的抢答时间,电源模块采用的12V的开关电源,再通过稳压芯片转换为所需5V和3.3V电源输出。
还需要USB转串口电路,JTAG调试电路,晶振、BOOT等外围电路。
图3.1系统主要功能模块
3.2STM32最小系统
采用STM32F103VET6最小系统,100引脚,512闪存,32位CPU,最高72Mhz工作频率,完全可满足本系统设计的需要。
3.3JTAG电路
JTAG(JointTestActionGroup,即联合测试行动小组)是一种国际标准的测试协议,主要应用于芯片的内部测试,现在主流的DSP、FPGA芯片等都支持JTAG协议。
标准的接口是4线制的,包括:
TMS、TCK、TDI、TDO,分别代表模式选择、时钟设置、数据输入和数据输出。
JTAG的基本原理是在器件内部定义一个TAP(TestAccessPort,即测试访问口)然后通过专门的调试工具对芯片内部的节点进行测试。
图3.3STM32的JTAG调试接口电路
3.4时钟频率电路的设计
单片机必须在时钟的驱动下才能工作。
在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。
时钟电路如图5所示。
图3.4外部振荡源电路
一般选用石英晶体振荡器。
此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。
电路中两个电容C1,C2的作用有两个:
一是帮助振荡器起振;二是对振荡器的频率进行微调。
C1,C2的典型值为30PF。
单片机在工作时,由内部振荡器产生或由外直接输入的送至内部控制逻辑单元的时钟信号的周期称为时钟周期。
其大小是时钟信号频率的倒数,常用fosc表示。
图中时钟频率为12MHz,即fosc=12MHz,则机器周期为1µs.
3.5复位电路的设计
单片机的第9脚RST为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图6所示:
图3.5复位电路
图6中由复位键以及电解电容C3、电阻R2构成按键及上电复位电路。
由于单片机是高电平复位,所以当复位键按下的时候,单片机的9脚RESET管脚将处于高电平,此时单片机就处于复位状态。
当上电后,由于电容的缓慢充电,单片机的9脚电压会逐步由高向低转化,经过一段时间后,单片机的9脚处于稳定的低电平状态,此时单片机上电就复位完毕,系统程序从0000H开始执行。
值得注意的是,在设计当中使用到了硬件复位和软件复位这两种功能,由上面的硬件复位后的各状态可知寄存器及存储器的值都恢复到了初始值,而前面的功能介绍中提到了倒计时时间的记忆功能,该功能的实现的前提条件就是不能对单片机进行硬件复位,所以设定了软件复位功能。
软件复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。
3.6数码管显示
显示功能与硬件关系极大,当硬件固定后,如何在不引起操作者误解的前提下提供尽可能丰富的信息,全靠软件来解决。
在这里我们使用的是四个独立七段数码管显示,通常在显示上我们采用的方法一般包括两种:
一种是静态显示,一种是动态显示。
其中静态显示的特点是显示稳定不闪烁,程序编写简单,但占用端口资源多;动态显示的特点是显示稳定性没静态好,程序编写复杂,但是相对静态显示而言占用端口资源少。
在本设计中根据实际情况采用的是动态显示方法。
图3.6共阴极数码管
图2.6中数码管采用的是4个七段共阳数码管,其中选手A数码管连接PB0-PB6口,选手B连接PB7-PB13,选手C连接PC7-PC13,选手D连接PC0-PC6口。
3.7键盘电路的设计
键盘是人与单片机打交道的主要设备。
关于键盘硬件电路的设计方法也可以在文献和书籍中找到,配合各种不同的硬件电路,这些书籍中一般也会提供相应的键盘程序,在单片机应用中键盘用得最多的形式是独立键盘和矩阵键盘。
它们都有各自的特点,其中独立键盘的硬件电路简单,而且在程序设计上也不复杂,一般都用在对硬件电路要求不高的简单电路中;矩阵键盘与独立键盘有很大区别,首先在硬件电路上它要比独立键盘复杂很多,而且在程序算法上要比它烦琐,而且在触点抖动按键同与断过程中可能会出现判断错误。
应该采用软件去抖方法,即延时重复扫描法,延时法的原理为:
在检测到有按键被按下时,执行一个10ms左右(具体时间应该视所使用的按键进行调整)的延时程序,再确认该键电平是否仍保持闭合状态的电平,若仍保持闭合状态电平,则确认该键处于闭合状态;同理,在检测到该键释放后,也应该采用相同的步骤进行确认,从而消除去抖的影响。
在本文设计中采用了独立键盘的方式,本设计中有4个抢答按键输入,如图3.7所示。
图3.7抢答按键
在图3.7中4个抢答按键分别接入单片机的PA0-PA3端口,单片机通过读写PA0-PA7的值来判断当前输入的是4个抢答按键中的哪一个,从而触发断,完成抢答成功者LED显示及抢答时间显示。
3.8LED电路
各类LED发展非常迅速,已经成为各种照明标识常用的显示元件,本系统采用IO口直接连接的LED驱动电路,如下图3.8。
在图308中4盏LED灯分别接入单片机的PA4-PA7端口,单片机通过写0写1,进而控制LED的亮灭与否。
3.9本章小结
本章详细讲述了以STM32为核心元件的抢答器的硬件电路具体设计过程,分析了具体电路。
在设计过程中,实现抢答功能的是通过编写程序的方法集成在STM32内部。
接着将程序下载到硬件电路中,配合周边的时钟电路,复位电路等,制作出符合设计要求的抢答器。
第4章系统的软件设计与开发
4.1系统总体设计
本系统的软件设计采用模块化编程,由LED显示,按键输入,数码管,主函数构成,使用中断,在按键输入后,下降沿检测,进而进入中断函数,完成数码管,LED的显示。
程序编译环境为KEILu-Vision5,主控制器采用ARMcortex-M3内核的STM32,调试工具为J-Link的JTAG仿真器,便于在线调试。
4.2STM32开发调试环境介绍
基于ARMcortex-M3内核的STM32微处理器得到越来越广泛的应用,所以开发工具也分为好多种,当下最流行的STM32的开发工具为KEILMDK和IAREWARM,两种工具各有千秋,作下简要介绍。
KEILMDK作为一个套件,包含了全套的软件模块,其中就包括KEIL公司的IDE环境“KEILu-Vision”,KEILu-Vision5是它的第五个版本。
而本文所使用的RVMDK全称是REALVIEWMDK,是KEIL公司专门用于嵌入式开发所使用的软件,REALVIEWMDK集成了包括u-Vision5的开发环境与REALVIEW编译器.另外一种开发工具IAREWARM,全称IAREmbeddedWorkbenchforARM,是ISRSystem公司为ARM芯片开发的一个集成环境,IAREWARM中包含了一个全软件的模拟程序,使得用户甚至不需要任何硬件的支持就可以模拟各种ARM内核、中断甚至外部设备,使用方便且便于操作,尤其适用于内核的移植。
调试工具J-Link是SEGGER公司为支持仿真内核芯片推出的一款JTAG仿真器,适用于KEIL、IAREWARM、REALVIEW等多种集成开发环境,特别适合开发基于ARM的嵌入式系统。
4.3程序流程图
在本设计中包括了以下主要的程序:
主程序,LED,数码管,按键,中断服务函数,主流程图如4.3所示:
图4.3程序设计流程图
4.4主要程序分析
4.4.1主程序分析
#include"main.h"
intmain(void)
{
LED_GPIO_Config();
KEY_Config();
DIGITRON_GPIO_Config();
TimeCount();
NVIC_Config();
while
(1)
{
}
}
程序分析:
进入主函数后,进行LED配置,按键配置,数码管配置,显示函数,以及中断配置,随后进入while死循环,等待中断响应。
4.4.2LED函数分析
#include"led.h"
voidLED_GPIO_Config(void)
{
/*定义一个GPIO_InitTypeDef类型的结构体*/
GPIO_InitTypeDefGPIO_InitStructure;
/*选择要控制的GPIOA引脚*/
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;
/*设置引脚模式为通用推挽输出*/
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
/*设置引脚速率为50MHz*/
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
/*调用库函数,初始化GPIOA*/
GPIO_Init(GPIOA,&GPIO_InitStructure);
/*关闭所有led灯*/
GPIO_SetBits(GPIOA,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);
}
程序分析:
进入LED_GPIO_Config后,完成LED相关引脚配置。
4.4.3按键配置函数
#include"key.h"
voidKEY_Config(void)
{
//GPIO配置
EXTI_InitTypeDefEXTI_InitStructure;
GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOA,&GPIO_InitStructure);
//EXTI配置
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0|\
GPIO_PinSource1|GPIO_PinSource2|GPIO_PinSource3);//中断源
EXTI_InitStructure.EXTI_Line=EXTI_Line0|EXTI_Line1|EXTI_Line2|EXTI_Line3;//中断线路
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//外部触发
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTI_InitStru