电控学院课程设计(论文)课程名称:ARM课程设计题目:基于ARM的频率计系统设计院(系):电xxxxxxxxxxxxxxx专业班级:测控技术与与仪器xxxx班姓名:xxxxxxxxxxxx学号:xxxxxxxxxxxxxxxxxxxxxxxxx指导教师:xxxxxxxxxxxxxxxxxxxxxxx2017年1月6日摘要随着移动设备的流行和发展,嵌入式系统已经成为一个热点。它并不是最近出现的新技术,只是随着微电子技术和计算机技术的发展,微控制芯片功能越来越大,而嵌入微控制芯片的设备和系统越来越多,从而使得这种技术越来越引人注目。它对软硬件的体积大小、成本、功耗和可靠性都提出了严格的要求。嵌入式系统的功能越来越强大,实现也越来越复杂,随之出现的就是可靠性大大降低。最近的一种趋势是一个功能强大的嵌入式系统通常需要一种操作系统来给予支持,这种操作系统是已经成熟并且稳定的,可以是嵌入式的Linux,WINCE等等。本文所要研究的就是基于ARM嵌入式系统的频率计系统的设计与实现。本设计采用了32位ARM微处理器STM32F103作为核心处理器和ARMLinux作为嵌入式操作系统。实现了单位周期的频率计数,采用串口与基于Labview的上位机实现通信,将实时结果显示在上位机的界面。关键词:嵌入式系统,ARM,STM32F103,嵌入式linux,Labview前言在电子技术各参数中,频率测量的精确度是最高的,因而人们常利用某种确定的函数关系把其他电参数的精确测量转换为频率的测量。目前,测量频率方法主要有低频测周期、高频测频率、多周期同步测量法以及多周期完全同步测频法。采用低频端测周、高频端测频时,存在中界频率测量误差大即测量死区问题,因此频率的测量准确度很难提高到较高的数量级;采用多周期完全同步测频法,则闸门控制时间必须是被测信号与时标信号周期个数的最大公约数,因此进行一次完全同步测量需要很长的时间,不适于对实时性要求较高的场合,多周期同步测频法,其最大优点就是与被测信号频率大小无关,测量速度快,精度高。但多周期同步测量法存在同步电路结构复杂,易造成误触发,可靠性不高,且此方法虽在原理上消除了±1量化误差,但在实际应用中,经过同步电路之后,只消除了-1量化误差,仍不能保证完全消除+1量化误差,因此测量精度会间歇性的出现较大偏差等问题。集成数字频率计由于所用元件少、投资少,体积小,功耗低,且可靠性高,功能强,易于设计和研发,使得它具有技术上的实用性和应用的广泛性。不论从我们用的彩色电视机、电冰箱,DVD,还有我们现在家庭常用到的数字电压表数字万用表等等都包含有频率计。现在频率计已是向数字智能方向发展,即可以很精确的读数也精巧易于控制。数字频率计已是现在频率计发展的方向,它不仅可以很方便的读数,而且还可以使频率的测量范围和测量准确度上都比模拟先进.而且频率计的使用已是很多的方面,数字卫星、数字通讯等高科技的领域都有应用。所以频率计的发展是一个整体的趋势。一、系统概述1、STM32F103简介ARM公司是专门从事基于RISC技术芯片设计开发的公司,作为知识产权供应商,本身不直接从事芯片生产,靠转让设计许可由合作公司生产各具特色的芯片,世界各大半导体生产商从ARM公司购买其设计的ARM微处理器核,根据各自不同的应用领域,加入适当的外围电路,从而形成自己的ARM微处理器芯片进入市场。目前,全世界有几十家大的半导体公司都使用ARM公司的授权,因此既使得ARM技术获得更多的第三方工具、制造、软件的支持,又使整个系统成本降低,使产品更容易进入市场被消费者所接受,更具有竞争力。STM32F103xx增强型系列由意法半导体集团设计,使用高性能的ARMCortex-M332位的RISC内核,工作频率为72MHz,内置高速存储器(高达128K字节的闪存和20K字节的SRAM),丰富的增强I/O端口和联接到两条APB总线的外设。所有型号的器件都包含2个12位的ADC、4个通用16位定时器和2个高级定时器,还包含标准和先进的通信接口:多达2个I2C和SPI、3个USART、一个USB和一个CAN。2、总体方案设计本次频率计系统设计采用以STM32F103xx系列芯片为核心,由于F103系列芯片的内部资源较多,本次设计充分利用芯片内部资源,设计出高精度的频率计系统。图:系统整体框图STM32F103待测信号发生模块定时器上位机显示结果系统的主体功能是充分利用定时器,用32内部的通用定时器3的复用功能--输入捕获。通过输入捕获对外部输入STM32芯片内部的脉冲上升沿计数,输入捕获功能可以实现每一次外部脉冲输入的上升沿引发一次中断,再通过通用定时器4定时一秒,通过定时一秒钟计算输入捕获中断次数来判断钟外部脉冲输入的频率,最后将这个数据传送给上位机通过虚拟仪器LABVIEW来显示出频率。设计中考虑到采用STM32F103开发板作为硬件基础,板子承受的最大电压为3.3V,而且程序调试中如果接入外部脉冲输入,不能够立即查询出问题所在,所以通过芯片内部资源通用定时器5的复用功能输出PWM波来模拟外部脉冲输入,这样也可以更加简化硬件设计,所以本次系统充分利用32芯片内部定时器资源来设计系统。图:系统设计流程图二、整体功能设计1、STM32通用定时器简介STM32的通用定时器是一个通过可编程预分频器(PSC)驱动的16位自动装载计数器(CNT)构成。STM32的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等。使用定时器预分频器和RCC时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。STM32的每个通用定时器都是完全独立的,没有互相共享的任何资源。STM3的通用TIMx(TIM2、TIM3、TIM4和TIM5)定时器功能包括:1)16位向上、向下、向上/向下自动装载计数器(TIMx_CNT)。2)16位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为1~65535之间的任意数值。3)4个独立通道(TIMx_CH1~4),这些通道可以用来作为:A.输入捕获B.输出比较C.PWM生成(边缘或中间对齐模式)D.单脉冲模式输出4)可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用1个定时器控制另外一个定时器)的同步电路。5)如下事件发生时产生中断/DMA:A.更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)B.触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)C.输入捕获D.输出比较E.支持针对定位的增量(正交)编码器和霍尔传感器电路F.触发输入作为外部时钟或者按周期的电流管理2、定时器功能简介本次设计系统中需要利用通用定时器产生一秒定时。STM32F103中的通用定时器可以由向上计数、向下计数、向上向下双向计数多种计数模式。向上计数模式中,计数器从0计数到自动加载值(TIMx_ARR计数器内容),然后重新从0开始计数并且产生一个计数器溢出事件。在向下模式中,计数器从自动装入的值(TIMx_ARR)开始向下计数到0,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。而中央对齐模式(向上/向下计数)是计数器从0开始计数到自动装入的值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器溢出事件;然后再从0开始重新计数。系统中采用向上计数模式,并打开定时中断功能,当定时一秒进入中断后后,读取输入捕获进入中断的次数并将数据通过串行口发送到上位机显示。图:系统整体硬件3、PWM简介PWM是PulseWidthModulation的缩写,中文意思就是脉冲宽度调制,简称脉宽调制。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,其控制简单、灵活和动态响应好等优点而成为电力电子技术最广泛应用的控制方式,其应用领域包括测量,通信,功率控制与变换,电动机控制、伺服控制、调光、开关电源,甚至某些音频放大器,因此研究基于PWM技术的正负脉宽数控调制信号发生器具有十分重要的现实意义。PWM是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。只要带宽足够,任何模拟值都可以使用PWM进行编码。本次设计系统中利用通用定时器的复用功能输出比较输出PWM波,系统中通过调节PWM波的输出周期来改变模拟输出的脉冲频率。4、输入捕获简介输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32的定时器,除了TIM6和TIM7,其他定时器都有输入捕获功能。STM32的输入捕获,简单的说就是通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄存器(TIMx_CCRx)里面,完成一次捕获。同时还可以配置捕获时是否触发中断/DMA等。接下来,我们介绍我们需要用到的一些寄存器配置,需要用到的寄存器有:TIMx_ARR、TIMx_PSC、TIMx_CCMR1、TIMx_CCER、TIMx_DIER、TIMx_CR1、TIMx_CCR1这些寄存器在前面全部都有提到(这里的x=5),我们这里就不再全部罗列了,我们这里针对性的介绍这几个寄存器的配置。首先TIMx_ARR和TIMx_PSC,这两个寄存器用来设自动重装载值和TIMx的时钟分频,再来看看捕获/比较模式寄存器1:TIMx_CCMR1,这个寄存器在输入捕获的时候,非常有用,有必要重新介绍,该寄存器的各位描述如图所示:当在输入捕获模式下使用的时候,对应图的第二行描述,从图中可以看出,TIMx_CCMR1明显是针对2个通道的配置,低八位[7:0]用于捕获/比较通道1的控制,而高八位[15:8]则用于捕获/比较通道2的控制,因为TIMx还有CCMR2这个寄存器,所以可以知道CCMR2是用来控制通道3和通道4。本次频率计设计系统中采用TIM5_CH1来捕获上升沿脉冲信号,也就是要先设置输入捕获为上升沿检测,记录发生上升沿的时候TIM5_CNT的值。当上升沿到来时,发生捕获,并记录得到一次脉冲信号值。这样,定时一秒钟捕获到上升沿的次数,就是每秒测量到的脉冲次数,即捕获的脉冲频率,这就是我们所需要的结果,然后通过串口连接到上位机,将数据发送到上位机labview显示结果。5、串口通信设计通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIRENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。接口通过三个引脚与其他设备连接在一起。任何USART双向通信至少需要两个脚:接收数据输入(RX)和发送数据输出(TX)。RX:接收数据串行输入。通过采样技术来区别数据和噪音,从而恢复数据。TX:发送数据输出。当发送器被禁止时,输出引脚恢复到它的I/O端口配置。当发送器被激活,并且不发送数据时,TX引脚处于高电平。在单线和智能卡模式里,此I/O口被同时用于数据的发送和接收。串口做为ARM的重要外部接口,同时也是软件开发的重要调试手段。对于单片机学习来说,非常重要。而我们开发板使用的STM32F103最多可以提供5路串口。那么STM32的串口操作步骤是怎么样的呢?1)打开GPIO的时钟使能和USART的时钟使能。2)设置串口IO的IO口模式。(一般输入是模拟输入,输出是复用推挽输出)3)初始化USART。(包括设置波特率、数据长度、停止位、效验位等)4)如果使用