海涛 陆代泽 韦文 吴宗霖 海蓝天
摘 要:为了实现对各类信号源的模拟、捕获和显示,基于STM32设计了一个综合实验方案,并采取“信号发生+信号捕获”的设计理念.以方波信号为例,利用STM32开发板,设计了一套方波信号源和相应的检测系统,该系统利用一块STM32按要求输出不同类型的方波信号,另一块STM32对方波信号进行捕获.实验结果表明:单片机1可成功实现对方波信号的模拟,单片机2则实现了对信号的捕获与显示,证实了方案的正确性与可行性.该方案是一种拓宽单片机实验范围的新思路,可应用于对工业现场各类信号源的模拟及捕获.
关键词:STM32;信号源;方波信号;输入捕获
中图分类号:TP368;TN409 DOI:10.16375/j.cnki.cn45-1395/t.2021.01.004
0 引言
目前,国内高校的单片机教学都是以51系列单片机为教学对象,实验装置多以51系列单片机为控制核心[1-4].虽然可以使用ATmega 16等性能更强的单片机替代51系列单片机,从而完成对实验装置的升级改造[5].但是实验装置采取的是实验箱的形式,不仅笨重而且大都是偏向于验证性的实验[6].当学生需要进行一些创新性设计时,实验装置无法满足要求,迫切需要新的单片机及理念来满足学生的学习需求.与51单片机相比,STM32具有内核先进、高度集成、性能出众、易于开发、便于携带的特点[7],且相关软件、硬件资料完全公开[8].以STM32开发板代替原有的实验装置或实验平台,作为单片机实验教学的延伸,有助于激发学生的创新能力,为单片机的实验教学开拓了一种新的思路.
本文基于STM32开发了一个方波信号发生器及其检测的实验系统,即实验由两个综合实验构成(一个模拟输出与输入实验).通过该实验可使学生掌握STM32的信号发生、输入捕获、LED显示以及定时器的原理和应用,起到举一反三的作用.
1 总体设计方案
设计目标是:使用STM32单片机1(简称单片机1)产生一个可调的方波信号,通过另一块STM32单片机2(简称单片机2)捕获方波信号并进行显示.实现方式为:通过按键电路在单片机1上产生可调的方波信号,再由单片机2来捕获单片机1产生的方波信号,最终利用液晶屏、示波器等对方波信号进行显示.本次设计的方波信号发生与检测系统的原理图如图1所示:单片机1通过PB5与PE5端口产生方波信號,单片机2使用PA0与PE3端口进行方波信号的捕获检测.
方波信号发生器在设计时要求具有待机、PB5端口输出方波、PE5端口输出方波以及可调相位差等4种状态,并通过STM32上的LED灯DS0、DS1来显示其状态.设计的方波信号发生器预计能实现的功能如图2所示.
从图2可知,按键KEY0与按键KEY1是低电平有效,按键KEY_UP为高电平有效.由KEY0来实现状态的切换选择,通过KEY1与KEY_UP对方波信号进行控制.
2 方波信号发生器的设计
2.1 硬件设计及与传统发生器的对比
STM32常用的有STM32F103~F107系列,基于Cortex-M3内核且采取的是冯·诺依曼结构[9-10].本次实验的单片机选取STM32F103系列,其芯片为STM32F103ZET6,用到的硬件资源有:指示灯DS0、DS1、按键KEY_UP、按键KEY0、按键KEY1.通过按键电路与STM32单片机结合产生相位不同、频率不同的方波信号,并通过LED进行显示.基于STM32F103ZET6方波信号发生器的电路原理图如图3所示.
传统的方波信号发生器如图4所示,由纯硬件电路所组成,包括振荡器、变换器、输出级、电源等部分.方波信号的调频、调幅等一系列控制操作均是通过旋钮改变元器件的电阻值、电容值来实现,但此方法存在较大的不足:通过旋钮调节很难准确调节出所需要的变量,在进行实验时耗时较大且容易存在误差;同时,频繁地对元器件进行调节操作会造成器件的快速磨损,严重降低器件寿命,发生故障的概率相对较高.
而基于STM32的方波信号发生器是由硬件和软件相结合来产生方波信号,其核心部分是由芯片STM32F103ZET6结合所编程序来实现方波信号的产生.与传统信号发生器相比,其频率和幅值的调节都是通过修改程序来实现,在相同实验条件下,可克服传统纯硬件方波信号发生器的一些缺点.此外,其产生的方波信号可以通过单片机自身的显示装置进行验证,更加直观和易于操作.
2.2 软件设计
方波信号实际上是一个二值函数,要使STM32产生一个可调的方波信号,即通过编程控制STM32的定时器,调节其I/O口电平输出频率.STM32拥有多个GPIO,且每个GPIO组都有16个I/O口[11].本次设计需要用到的I/O口数量为5个,其I/O分配表如表1所示.
本次实验以MDK5.14为STM32的开发环境,根据要求在MDK Keil软件使用C语言编写程序,并烧录到单片机中,调整定时器参数改变I/O口输出频率.方波信号发生器的程序设计流程示意图如图5所示.
如图5所示:在STM32中,进行外设的配置操作之前先使能该外设时钟,时钟的使能通过调用函数RCC_APB2PeriphClockCmd()实现.而PB5与PE5初始化通过调用函数GPIO_Init()实现,目的是为了配置I/O口模式和速度.开启AFIO时钟,是为了对AFIO_EXTICRx(x=1~4)寄存器进行读/写操作而准备.按照图5的流程图编写好程序后,通过与按键电路相结合,即可控制I/O口输出电平的高低、频率及脉冲宽度.
3 方波信号的检测
在STM32中,其输入捕获模式可以用来测量高电平的脉冲宽度或信号的频率[12].若使用单片机2来检测单片机1产生的方波信号,则需要通过STM32的定时器实现输入捕获[13].本次实验使用TIM5_CH1(PA0端口)来捕获高电平脉冲,方波信号捕获主程序的部分代码如下:
STM32输入捕获的原理为:对TIMx_CHx上的边沿信号进行检测,若检测的边沿信号发生突变(上升沿突变或者下降沿突变),则将定时器的当前值TIMx_CNT存放到与其相对应的捕获/比较寄存器TIMx_CCRx中,从而实现一次信号的捕获.
本次实验TIM5的CH1先设置为上升沿捕获,在第一次捕获到上升沿的时候,清除TIM5的计数值、计数溢出次数等计时变量与相关寄存器,再设置PA0端口为下降沿捕获.成功捕获下降沿后,按照TIM5的计时公式算出高电平脉宽,并进行记录,然后再次把PA0端口配置为上升沿捕获,TIM5也重新计时.第二次捕获到上升沿的时候,同理,算出时长,最后将前后两个时间相加再运算,即可计算出方波信号频率与周期.在知道方波信号周期的前提下,通过信号捕获功能,即可得到两个方波信号之间的相位差.
为了实现方波信号的捕获与参数显示,还需要加入LCD液晶显示器的显示程序,STM32的TFTLCD显示模块是一块分辨率为240*320 的电阻触摸屏,使用16位并口驱动[14],单片机2信号捕获与显示的程序设计流程图如图6所示.
4 实验验证
為了验证单片机1是否可以产生方波以及单片机2是否可以捕获单片机1产生的方波,通过 FlyMcu软件将MDK Keil中编译无误的方波信号发生器的程序与信号捕获与显示的程序分别烧录到两块STM32开发板中进行验证.同时使用杜邦线将单片机1的PB5和单片机2的PA0相连接,单片机1的PE5和单片机2的PE3相连接.观察是否可以通过单片机1上的按键产生方波和对方波信号进行控制,且由单片机2捕获其频率并显示.
方波信号发生器的输出模式由KEY0进行选择,当KEY0按下不同的次数时,单片机1的输出模式及开发板上的指示灯DS0、DS1的显示结果如表2所示.
由于STM32的DS0与DS1是低电平有效,因此,表2中,“1”代表指示灯不亮,“0-”代表指示灯交替闪烁.当单个指示灯交替闪烁时,相应端口产生方波信号,同时闪烁则说明两个端口产生方波.
实验中,单个方波信号的初始周期设定为 0.2 s,通过按键可在原有周期的基础上增多或减少0.2 s.PB5与PE5同时产生方波信号时,两个信号的周期均为1.2 s,周期的最大值设定为3.6 s.当存在相位差时,通过按键每次可在原有相位差上增加或减少36°.若方波信号同相,按键按下5次则将使方波信号反相(180°),再按5次又将恢复同相.
为了探究所设计方案的可靠性与准确性,首先以单片机1随机产生12组不同频率、不同周期以及不同相位差的方波信号,并以单片机2对其进行捕获测量,通过多次反复试验来观测单片机2可否较好捕获单片机所产生的方波信号.实验数据的汇总结果如表3所示.
表3中,[T1]、[f1]和[T2]、[f2]为单片机1的PB5与PE5产生的方波信号的周期、频率,[T12]、[f12]和[T22]、[f22]为单片机2的PA0与PE3检测到的周期、频率,[θ1]为单片机1发生的两个波形的相位差,[θ12]为单片机2检测到的两个波形的相位差.
由表3的数据对比可知,在PB5或PE5端口单独产生方波信号、PB5和PE5端口同时产生方波信号等不同情况时,单片机2捕获后测量到的周期、频率以及相位差等参数与单片机1产生的信号相差无几.单片机1成功实现了方波信号的发生,单片机2则实现了信号的捕获与检测,达到了预期的目标.同时,多次反复的实验结果也从侧面证实了本文所设计方案的可行性与可靠性.
方波信号并不能直观地看出,但在单片机1上可通过LED灯DS0和DS1来判断是否有方波产生.当PB5端口产生方波时LED灯DS0闪烁;当PE5端口产生方波时LED灯DS1闪烁;当PB5与PE5同时产生方波时,DS0与DS1同时闪烁.以PB5端口产生方波为例,单片机1上的红色LED灯闪烁(DS0),并且单片机2通过捕获单片机1的方波信号后在液晶屏显示其频率,实验结果及实物图如图7所示.
为了更加直观地观察出方波信号的相位差及其变化情况,当单片机1的PB5端口与PE5端口同时产生方波(可调相位差状态)时,使用型号为TDS1001B-SC的示波器对单片机2捕获后的波形进行测量.
实验的步骤为:首先将KEY0按键按下3次使DS0、DS1同时闪烁,此时通过单片机1上的按键KEY1与按键KEY_UP对频率进行调整,对相位差进行控制;之后通过这两个按键对方波信号的相位进行调整和控制,并观察示波器上波形的变化情况.示波器导出的测量结果如图8所示.
5 结语
通过利用STM32片机,成功设计了一个方波信号发生器及其检测的实验系统.单片机1产生了可调的方波信号,单片机2则实现了捕获与显示,并通过多次反复的实验证实了设计方案的准确性与可行性.单片机1产生的方波信号亦可以由单片机1自己捕获并显示,其原理与单片机2的捕获原理一致.本文成功实现了方波信号的模拟输出和输入捕获,能推广到对正弦波、锯齿波、三角波和谐波等各类信号源的模拟上,也可以模拟应用现场的信号并进行发生和捕捉,降低实验开发的成本及周期,拓宽了单片机的实验范围,也为综合实验开拓了一种新的思路.本次实验综合应用了STM32的定时器、I/O口、按键电路、输入捕获、LED显示等多个模块与功能,有助于学生掌握这些模块的功能与应用,激发学生的学习兴趣和自主创新能力.
参考文献
[1] 王琳霖,王伟,曹国强,等. 基于单片机的机电控制实训平台设计[J].实验技术与管理,2018,35(4):82-85.
[2] 朱向庆,黎东涛,苏超益,等. 适合于项目教学法的三合一单片机实验箱设计[J].实验技术与管理,2013,30(7):55-59.
[3] 徐小栋,胡春,董守昆,等. 利用Proteus软件构建单片机虚拟仿真实验室[J].计算机与数字工程,2012,40(1):154-157.
[4] 許京雷. 嵌入式系统课程内容设置[J].中国教育技术装备,2017(8):85-86.
[5] 海涛,陈明媛,骆武宁,等. 一种单片机实验装置升级改造的实现方案[J].实验室研究与探索,2010,29(3):76-79,87.
[6] 朱向庆,何昌毅,朱万鸿,等. 基于STM32单片机的通信技术实验系统设计[J].实验技术与管理,2019,36(8):81-84.
[7] 汤泽坤,唐培和,徐奕奕. 基于Stm32的光伏监控系统的设计[J].广西科技大学学报,2015,26(4):54-59.
[8] 刘军,张洋,严汉宇. 例说STM32[M].3版. 北京:北京航空航天大学出版社,2018.
[9] 沈红卫,任沙浦,朱敏杰,等. STM32单片机应用与全案例实践[M].北京:电子工业出版社,2017.
[10] 魏永辉. 嵌入式STM32下无源蜂鸣器发声[J].科技展望,2016,26(24):163.
[11] 卢有亮. 基于STM32的嵌入式系统原理与设计[M].北京:机械工业出版社,2014.
[12] 潘宇. 基于FPGA和STM32的脉宽频率测量方法[J].实验室研究与探索,2017,36(2):83-86.
[13] 张洋,刘军,严汉宇,等. 原子教你玩STM32:库函数版[M].2版. 北京:北京航空航天大学出版社,2015.
[14] 潘盛辉,曹蓬,吴甜甜,等. 基于STM32的障碍物定位检测系统设计[J].广西科技大学学报,2017,28(3):97-102.