二次仪表频率计大学学位论文.docx
- 文档编号:23385256
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:30
- 大小:716.21KB
二次仪表频率计大学学位论文.docx
《二次仪表频率计大学学位论文.docx》由会员分享,可在线阅读,更多相关《二次仪表频率计大学学位论文.docx(30页珍藏版)》请在冰豆网上搜索。
二次仪表频率计大学学位论文
毕业论文(设计)
论文题目:
二次仪表频率计设计
学生姓名:
范存永
学号:
1008020205
所在院系:
电气信息工程学院
专业名称:
自动化
届次:
2014届
指导教师:
苗磊
目录
前言2
1.总体方案设计2
1.1系统方案实现框图2
1.2软硬件开发环境和工具3
2.硬件电路设计3
2.1单片机模块设计4
2.2信号输入电路6
2.3人机界面设计7
3.系统软件设计9
3.1系统软件实现框图9
3.2频率信号采集和测量程序设计10
3.3人机界面程序设计13
4.系统测试15
4.1软硬件调试15
4.2调试总结17
5.总结17
参考文献:
18
二次仪表频率计设计
学生:
范存永(指导老师:
苗磊)
(淮南师范学院电气信息工程学院)
摘要:
本课题是基于stm32单片机设计的一个二次仪表频率计。
通常,在工业生产中,各种现场信号如压力、温度、流量等都是通过相应压力变送器、温度变送器、流量变送器传送出来,即特定传感器把物理量变为对应的200-800HZ的频率信号。
二次仪表频率计用来检测其对应频率,并将其转换为对应的实际物理量显示出来。
关键字:
stm32;二次仪表;频率计;传感器;实际物理量;频率信号
DesignOfSecondaryInstrumentFrequencyMeter
Student:
FanCunyong(GuidanceTeacher:
MiaoLei)
(CollegeofElectricalandInformationEngineering,HuainanNormalUniversity)
Abstract:
ThisstudydesignedasecondaryinstrumentfrequencymeterbasedontheSTM32MCU(MicroControllerUnit).Generally,intheindustrialproduction,manyspotsignalslikepressureandtemperatureandfluxaresendoutbyhomologouspressuretransmitterandtemperaturetransmitterandfluxtransmitterrespectively.Allinall,thephysicalquantityistransferedbyspecificsensorintoafrequencysignalratedfrom200HZto1000HZ.Secondaryinstrumentfrequencymeterisusedtodetectthecorrespondingfrequencyandtransferitintocorrespondingphysicalquantity,thendisplayit.
Keywords:
stm32,secondaryinstrument,frequencymeter,sensor,actualphysicalquantity,frequencysignal
前言
通常工业生产中,各种现场物理量如压力、温度、流量等都是通过相应压力变送器、温度变送器、流量变送器传送出来的。
这些变送器是把物理量转变成对应的200Hz-800Hz的频率信号,为了准确读出这些物理量的值,就需要通过频率计准确无误的测量出变送频率并换算成实际的物理数值。
无论是在科技研究中还是在实际应用中,毫无疑问,频率测量的作用都显得尤为重要。
但传统的频率计通常采用组合电路和时序电路等大量的硬件电路构成,不仅产品体积较大,运行速度慢,而且测量低频信号时不宜直接使用。
与传统的测量方式相比,运用单片机频率计有着体积更小,运算速度更快,测量范围更宽的优点,而且电路简单,开发周期和成本都降低。
在传统的频率计中有许多功能是依靠硬件来实现的,而采用单片机测量频率之后,有许多以前需要用硬件才能实现的功能现在仅仅依靠软件编程就能实现,而且不同的软件编程能够实现不同的功能,因此使得制作成本大大降低。
基于实际应用需求和当前技术发展,本文设计出以STM32单片机为测量和控制核心的频率计方案。
该设计能够检测出200Hz-800Hz的频率信号,并能根据现场需要换算成与一次仪表相同的物理数值,具有频率显示、按键设置、LED状态显示功能。
1.总体方案设计
1.1系统方案实现框图
本系统的方案框图如图1所示,包括信号输入端的滤波整形电路、STM32单片机部分和人机交互部分。
图1系统方案图
为了去除包括工频干扰在内的其他低频干扰,在信号输入端设计了高通滤波器,滤除200Hz以下的低频干扰。
信号整形电路能将输入的三角波、正弦波、锯齿波整形为单片机可以识别的矩形波。
STM32单片机通过输入捕获/比较功能捕获到脉冲信号,运算处理后得到脉冲频率,在LCD128128上显示。
通过按键设置频率和温度、湿度等物理量的关系,就能现场得到一次仪表相同的物理数值。
此外,电源部分提供系统需要的5V和3.3V电压,下载接口用来下载程序和在线仿真,LED指示灯用来指示系统运行状态。
1.2软硬件开发环境和工具
设计工具分为:
硬件设计工具、软件设计工具。
硬件电路原理图和PCB的绘制使用的是AltiumDesignerwinter09;软件开发工具是KeilMDKV4.1。
AltiumDesigner是从Protel发展过来的,是将原理图编辑、电路仿真、PCB设计,FPGA设计以及打印等功能结合在一起的集成开发环境。
KeilMDK,也称MDK-ARM,RealviewMDK、I-MDK、uVision4 等。
MDK-ARM软件为基于Cortex-M、Cortex-R4、ARM7、ARM9处理器设备提供了一个完整的开发环境。
2.硬件电路设计
硬件电路设计部分包括STM32单片机模块设计、信号输入电路设计和人机界面设计,如图2所示。
图2硬件电路图
2.1单片机主板模块设计
在考虑硬件资源、开发容易程度和成本之后,本设计选用意法半导体的STM32F103RCT6,STM32系列是专为高性能、低成本和低功耗的嵌入式应用而设计的ARMCotex-M3内核。
STM32片上拥有ADC、DAC、TIM、FSMC、USART、DMA、USB、以太网等众多资源,而且自带底层库函数,极大地缩短了开发周期。
2.1.1STM32最小系统
本设计主要利用STM32的GPIO、USART、输入捕获和定时器功能,因此考虑功能和成本选用QFP64封装的STM32F103RCT6。
STM32F103RCT6内部具有256KFLASH和48KRAM,并且具有丰富的片上资源,包括IIC、SPI、UART、SDIO和三路ADC。
单片机最小系统包括主控MCU、复位电路、时钟电路和程序下载仿真接口,该部分设计如图3所示。
STM32F103RCT6采用3.3V供电,为了去除电源噪声干扰,在每个电源引脚接了去耦电容,并且将模拟地和数字地分开,在单点处用0欧电阻或电感连接。
STM32有多个时钟可以选择,HIS振荡器时钟、HSE振荡器时钟和PLL时钟可以用来驱动系统时钟,LSI振荡器和LSE外部低速时钟可以用来驱动看门狗或RTC。
由于没有使用RTC功能,本设计只接了8M外部高速时钟,并联20pf的电容帮助起振。
图3STM32主控电路图
STM32的RST引脚是低电平复位,该部分由电容、电阻和按键构成上电复位和按键复位电路。
如图3所示。
2.1.2电源部分
本系统需要3.3V和5V两种电压供电。
5V用来给单电源运放、电压比较器LM393供电,以及LCD12864液晶的背光供电。
为了达到低功耗,STM32采用低电压3.3V供电。
所以3.3V用来给单片机供电和LED供电。
为了获得3.3V电压,需要对输入的5V直流电进行稳压,这里采用LM1117-3.3V芯片。
稳压电路如图4所示。
LM1117是一个低压差电压调节器,具有较宽的电压输入和800mA的电流输出。
另外,为了直观显示3.3V电压状态,本设计在输出端加了发光二极管指示灯,当有3.3V电压输出时,发光二极管点亮。
图4电源稳压电路
2.1.3下载仿真电路
STM32可以用串口下载,可以用JTAG和SWD方式进行仿真调试。
JTAG是国际标准测试协议,主要用于芯片内部测试。
标准的JTAG接口是4线:
TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。
许多器件都用它来仿真调试,STM32当然也不例外。
但是考虑到引脚使用和下载速度问题,本设计采用SWD模式。
SWD模式在高速模式下比JTAG更可靠,基本使用JTAG仿真模式的情况下都可以直接使用SWD模式的。
当电路板子空间有限或者单片机引脚欠缺的情况下,SWD是最好的选择,这里只使用到SWDATA和SWCLK两个IO端口,加上电源和地即可进行下载和仿真。
设计电路如图5所示。
图5SWD下载仿真电路
2.2信号输入电路
为了获得单片机能够识别的脉冲信号,必须对输入的信号进行滤波整形。
本设计在信号输入端加入高通滤波电路和信号整形电路。
2.2.1高通滤波电路
滤波电路选用二阶有源高通滤波器。
有源滤波电路相对于无源滤波电路,具有较高的开环电压增益和输入阻抗、较低的输出阻抗和很好的自适应能力。
二阶滤波器相对于一阶滤波器而言,具有更好的滤波效果。
为了获得单片机能够识别的脉冲信号,必须对输入的信号进行滤波整形。
本设计在信号输入端加入高通滤波电路和信号整形电路。
本设计的二阶有源高通滤波器能滤除低于200Hz的低频干扰,滤除诸如50Hz的工频等干扰频率。
滤波电路如图6所示。
运算放大器选用LM358芯片。
LM358可双电源也可单电源供电,具有宽电压、高增益、低功耗和内部频率补偿等特点,完全满足设计要求。
图6高通滤波电路
2.2.2信号波形整形
高通滤波电路输出的是频率信号的正电压部分,为了获得单片机能够是别的脉冲信号就必须对其整形。
整形电路可以选用施密特触发器或者比较器,当电压高于某一阈值事输出高电压,低于某一阈值时输出低电压,从而将频率信号整形为脉冲信号。
本设计选用LM393比较器,通过改变电位器的阻值调整比较器的正向端阈值电压,在反相端输入频率信号时,输出端获得输出脉冲。
此外,为了防止电压过高烧坏单片机,在输出端加了一个3.3V的稳压二极管。
电路如图7所示
图7比较整形电路
2.3人机界面设计
为了给用户提供一个有好的人接界面,将测量结果直观的显示出来,并能通过按键设置一些参数,本系统设计了LCD1602液晶显示、按键操作和LED状态指示灯。
2.3.1LCD128x128液晶显示器
人机界面的显示使用LCD128x128,可以显示128x128点阵单色或4灰度级的图片,可以显示英文、数字、符号或64个16x16的汉字。
该液晶采用3.3V供电,采用6800总线驱动。
由于不需要显示很多的汉字,本设计没有选用带有字库的液晶,而是使用软件生成需要的字库添加到代码里。
LCD128128控制端口为数据命令选择端口(RS)、片选端口(CS)、读端口(RD)、写端口(WR),以及八位数据端口(D0-D7)。
2.3.2按键和状态指示灯
当采集到频率信号时,为了转换成一次仪表的物理量,需要用户手动输入物理量与频率之间的线性关系数据,所以加入按键功能。
按键设计四个,分别定义为功能键、增大建、减小键和确认键。
功能键用来切换主菜单功能,增大键和减小键用来调整参数大小。
参数设定好之后按确认键确认数据,完成数据输入。
由于STM32的GPIO端口的输入可以位置为上拉输入、下拉输入和浮空输入模式,因此外部电路就省去了上拉电阻,只需要软件配置为输入上拉模式即可。
按键的一个端口接地,另一端口接到单片机IO口,当检测到IO端口被拉低时,即认为有按键被按下。
按键电路图如图8所示。
图8按键输入电路图
LED状态指示灯用以指示系统运行状态和输入频率大小。
当系统正常运行时,LED1每隔一秒闪烁一次,用以指示系统运行正常。
LED2用来间接地指示输入频率大小,当STM32捕获到输入脉冲时翻转LED指示灯,频率越高,闪烁越快,反之频率越低,闪烁越慢。
LED指示灯在一般的产品设计中都有很重要的作用。
本系统设计了两个状态指示灯,指示灯电路如图9所示。
LED是电流驱动器件,电流的大小决定LED的亮度,为了避免大电流烧坏LED指示灯,加了1K欧的电阻限流。
图9LED状态指示灯电路
3.系统软件设计
3.1系统软件实现框图
软件部分分为主函数程序和中断函数程序。
当系统电源开启的时候,单片机先进行初始化工作,配置时钟频率为72MHz,配置用到的GPIO端口,设置中断优先级;配置定时器、输入捕获模式;初始化LCD12864、LED、按键等外设。
在循环中更新显示、读取键值。
当定时时间到的时候进入中断函数。
在进入中断函数中,首先清除中断标志,读取捕获的脉冲计数值,算出信号频率。
然后清除技术寄存器的值,开启定时器后退出中断函数,进入主函数,进行新一轮的循环。
主程序和中断程序的流程图如图10所示
图10主程序和中断程序流程图
当采集到频率信号时,为了转换成一次仪表的物理量,需要用户手动输入物理量与频率之间的线性关系数据,所以加入按键功能。
按键设计四个,分别定义为功能键、增大建、减小键和确认键。
功能键用来切换主菜单功能,增大键和减小键用来调整参数大小。
参数设定好之后按确认键确认数据,完成数据输入。
按键初始化之后需要再循环里不断地检测,当检测到按键输入引脚拉低时,即有按键按下,然后延时20毫秒进行按键“消抖”,因为手动操作会有抖动,如不进行消抖操作,那么短时间会判断出有多次按键操作。
延时之后,按键输入状态稳定,此时若仍然检测到按键按下,则确定是按键操作,然后判断键值,根据键值做出相应的处理。
按键操作流程图如图11所示。
图11按键操作流程图
3.2频率信号采集和测量程序设计
STM32需要对系统时钟、模块时钟和特定寄存器进行配置才能正常工作。
该部分包括STM32系统初始化、输入捕获定时器配置和频率计算。
3.2.1STM32系统配置和初始化
本系统程序采用KeiluVision4进行编写、编译和调试仿真。
使用STM32标准外设库函数StdPeriph_Lib_V3.5进行开发,从而不必关心底层寄存器的配置,减少了工作量,缩短了开发周期。
STM32外部接8MHz晶振,通过内部PLL可以让系统频率达到72MHz。
STM32时钟包括AHB高速系统时钟总线、APB2高速外设时钟总线和APB1低速外设时钟总线。
调用SystemInit(),配置AHB和APB2时钟为72MHz,APB1时钟为36MHz。
另外用到的端口和外设也要对其时钟进行配置。
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
3.2.2STM32输入捕获和定时器
STM32输入捕获的原理是当选定的输入引脚发生选定的脉冲触发沿(上升沿或下降沿)的时候,该时刻定时器的计数值TIMx_CNT会被保存,同时也会产生捕获中断。
本设计的思想是用定时器计时,输入捕获进行计数,所以需要配置定时器和输入捕获模式。
定时需用普通定时器TIM2,首先对TIM2的时钟进行配置,由于TIM2内部是接在APB1的时钟总线上,因此调用库函数配置定时器时钟如下:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
为了每秒钟读取一次捕获脉冲计数值,需要配置装载寄存器,并且开启定时中断,当定时时间到的时候进入中断函数进行处理。
具体的配置如下:
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period=10000-1;
TIM_TimeBaseStructure.TIM_Prescaler=7200-1;
TIM_TimeBaseStructure.TIM_ClockDivision=0;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
TIM_Cmd(TIM2,ENABLE);
STM32是抢占式内核,允许中断嵌套,每个中断拥有一个优先级,高优先级的中断可以打断低优先级的中断。
当优先级相同时,根据中断向量表中默认的排列顺序进行中断响应。
所以STM32开启定时器需要对中断向量表进行配置。
NVIC_InitTypeDefNVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
配置好中断向量表,必须给中断一个入口函数,当中断到来的时候可以找到这个函数,进行相应的处理。
下面的就是TIM2的中断入口函数:
voidTIM2_IRQHandler()
{
//判断增计数中断标志位置位
if(TIM_GetITStatus(TIM2,TIM_IT_Update)!
=RESET)
{
//清除中断标志
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
//进行相应的算法处理
……
}
}
输入捕获模式用以捕捉脉冲信号进行计数。
本系统选择TIM4的Channal2通道(PB.8)作为脉冲输入引脚。
这里需要开启TIM3时钟和GPIOA时钟:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
PB.8作为脉冲捕获引脚需要配置为浮空输入模式:
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB,&GPIO_InitStructure);
对输入捕获模式的配置主要包括输入通道、上升沿捕获方式、捕获预分频和输入脚是否滤波等,这里开启捕获中断进行计数,数据处理放在定时中断中。
TIM3输入捕获模式详细的配置如下:
TIM_ICInitStructure.TIM_Channel=TIM_Channel_2;
TIM_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising;
TIM_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI;
TIM_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV1;
TIM_ICInitStructure.TIM_ICFilter=0x00;
TIM_PWMIConfig(TIM4,&TIM_ICInitStructure);
TIM_SelectInputTrigger(TIM4,TIM_TS_TI2FP2);
TIM_SelectSlaveMode(TIM4,TIM_SlaveMode_Reset);
TIM_SelectMasterSlaveMode(TIM4,TIM_MasterSlaveMode_Enable);
TIM_Cmd(TIM4,ENABLE);
TIM_ITConfig(TIM4,TIM_IT_CC2,ENABLE);
定时器TIM2一秒的定时时间到的时候会进入定时中断函数,在这里首先关闭定时器,读取输入捕获计数值就可以得到频率了。
将脉冲计数器清零后重新开启定时器之后退出定时中断。
3.3人机界面程序设计
人机交互界面程序设计包括LCD128x128程序设计、LED状态指示灯设计和按键输入程序设计。
3.3.1LCD128x128显示
LCD128x128程序包括液晶初始化函数、写命令函数、写数据函数、清屏函数、以及汉字和字符的显示。
初始化需要配置控制端口和数据端口,并严格遵守写入数据和写入命令时序。
时序图如图12所示。
图12LCD128x128写入时序图
初始化和读写函数只需要遵守时序并且发送正确的命令字即可。
本部分程序主要是实现汉字和字符的显示。
由于液晶不带字库,需要程序里添加字库。
这里采用字库生成软件PCtoLCD2002生成C格式字库数据,如下所示:
其中Stru_GB16结构体定义为:
typedefstruct
{
uint8Index[2];
uint8Msk[32];
}Stru_GB16;
这样每次检索结构体中的Index成员,如果是对应的汉字则将成员数组Msk的数据显示出来。
本部分实现的接口函数如下:
voidGUI_DispString(uint8Row,uint8Col,uint8*str);
voidGUI_DispUnString(uint8Row,uint8Col,uint8*str);
voidGUI_DispHZ(uint8Row,uint8Col,uint8*PStr);
voidGUI_DispUnHZ(uint8Row,uint8Col,uint8*PStr);
3.3.2按键和指示灯
按键由于输入端口没有上拉电阻,需要配置内部上拉输入。
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
当检测输入电压为低时则认为按键被按下。
由于操作按键的时候存在抖动,所以需要软件“消抖”,消抖可以用状态机消抖也可以简单地延时消抖。
本设计为了采用延时策略,当检测到按键输入引脚为低电平时,延时30ms再次读取,如果仍然是低电平则确认按键被按下。
单片机读取IO电平状态的函数为:
GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1);//读取PA.1脚
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二次 仪表 频率计 大学 学位 论文