在电子工程、资源勘探、仪器仪表等相关应用中,频率测量是电子测量技术中最基本最常见的测量之一,频率计也是工程技术人员必不可少的测量工具。但是,传统的频率测量方法在实际应用中有较大的局限性,基于传统测频原理的频率计的测量精度将随被测信号频率的变化而变化,传统的直接测频法其测量精度将随被测信号频率的降低而降低,测周法的测量精度将随被测信号频率的升高而降低。本文中提出一种基于ARM与CPLD宽频带的数字频率计的设计,以微控器STM32作为核心控制芯片,利用CPLD可编程逻辑器件,实现闸门测量技术的等精度测频。
本设计的技术指标:
测频范围:1Hz~200MHz,分辨率为0.1Hz,测频相对误差百万分之一。
周期测量:信号测量范围与精度要求与测频功能相同。
占空比测量:准确度99%。
计数范围:0~1000000000,可手动暂停、复位。
功耗大小:5V×250mA= 1.25W。
等精度测频原理
常用的直接测频方法主要有测频法和测周期法两种。测频法就是在确定的闸门时间Tw内,记录被测信号的变化周期数(或脉冲个数)Nx,则被测信号的频率为:fx=Nx/Tw。测周期法需要有标准信号的频率fs,在待测信号的一个周期Tx内,记录标准频率的周期数Ns,则被测信号的频率为:fx=fs/Ns。这两种方法的计数值会产生±1个字误差,并且测试精度与计数器中记录的数值Nx或Ns有关。为了保证测试精度,一般对于低频信号采用测周期法,对于高频信号采用测频法。但由于测试时很不方便,又提出了等精度测频方法。等精度测频方法是在直接测频方法的基础上发展起来的,它的闸门时间不是固定值,而是被测信号周期的整数倍,即与被测信号同步。 等精度测频系统的控制时序图如图1所示。
图1 等精度测频系统的控制时序图
在测量过程中,有两个计数器分别对标准信号和被测信号同时计数。首先给出闸门开启信号(预置闸门上升沿),此时计数器并不开始计数,而是等到被测信号的上升沿到来时,计数器才真正开始计数。然后,预置闸门关闭信号(下降沿)到来时,计数器并不立即停止计数,而是等到被测号的上升沿到来时才结束计数,完成一次测量过程。可以看出,实际闸门时间r与预置闸门时间r1并不严格相等,但差值不超过被测信号的一个周期。设在一次实际闸门时间r中,计数器对被测信号的计数值为Nx,对标准信号的计数值为Ns,标准信号的频率为fs,则被测信号的频率如式(1)所示。
(1)
图2为等精度测频逻辑框图,CNT1和CNT2是两个可控计数器,标准频率信号fs信号从CNT1的时钟输入端CLK输入,经整形后的被测信号fx从CNT2的时钟输入端CLK输入。每个计数器中的CEN输入端为时钟使能端,控制时钟输入。当预置门信号为高电平(预置时间开始)时,被测信号的上升沿通过D触发器的输出端,同时启动两个计数器计数;同样,当预置门信号为低电平(预置时间结束)时,被测信号的上升沿通过D触发器的输出端,同时关闭计数器的计数。
图2 等精度测频逻辑框图
系统硬件设计
使用ST公司的32bit处理器STM32F103C8作为主控芯片与高可靠性的可编程逻辑器件EPM240T100C5结合设计成频率计。
STM32F103C8的功能特点如下:(1) 最高频率可达72MHz,自带128/64KB的FLASH,1.25DMIPS/MHz,可以访问0等待周期的存储器。(2)供电电压范围为2.0~3.6V了,内嵌8MHz高速晶体振荡器,也可外部时钟供给,本系统采用CPLD时钟分频供给。(3)下载模式可采用串行线调试(SWD)接口和JTAG接口,本系统采用JTAG下载接口。
EPM240T100C5的功能特点如下:(1)支持内部时钟频率300MHz,本系统使用有源晶振50MHz供给。(2)片内电压调整器支持3.3V、2.5V或1.8V电源输入,本系统使用3.3V电压供给。(3)下载模式使用10针JTAG接口。
1 系统硬件结构框图
系统通过对STM32F103C8微控器的控制,经SPI总线向CPLD芯片EPM240T100发送数据和命令来控制内部逻辑单元。EPM240T100使用外部有源晶振50MHz供给,经4分频12.5MHz作为CPU的输入时钟。该系统的硬件结构如图3所示。其包括主控芯片模块、JTAG下载模块、复位电路模块、上位机显示模块、被测量输入模块。
图3 系统框图
2 系统的数字电路设计
微控器原理如图4所示。本系统处理器使用STM2F103C8,时钟由CPLD分频供给CPU,通过SPI方式将数据和命令传送给CPLD,而后用串口RS232发送到上位机显示。
图4 微控器原理图
关键字:频率测量 STM32 CPLD
引用地址:
基于STM32和CPLD的等精度测频设计
推荐阅读最新更新时间:2024-05-02 21:47
意法半导体STM32Cube.AI 开发工具增加深度量化神经网络支持
意法半导体(ST)发布了STM32Cube.AI version 7.2.0,这是微控制器厂商推出的首款支持超高效深度量化神经网络的人工智能(AI)开发工具。 STM32Cube.AI 将预先训练好的神经网络转换成STM32微控制器(MCU)可以运行的C语言代码 ,是充分利用嵌入式产品有限的内存容量和算力开发尖端人工智能解决方案的重要工具,将人工智能从云端下移到边缘设备,能够为应用带来巨大的优势,其中包括原生隐私保护、确定性实时响应、更高的可靠性和更低的功耗。边缘人工智能还有助于优化云计算使用率。 现在,通过支持 qKeras 或 Larq 等深度量化输入格式,开发者可以进一步降低神经网络代码量、内存占用和响应延迟
[物联网]
STM32 USART2发送数据笔记
硬件设备:STM32VCT6 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOA时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); //使能USART2时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; G
[单片机]
I2C总线通信接口的CPLD实现
摘要: 介绍采用ALTERA公司的可编程器件,实现I2C总线的通信接口的基本原理;给出部分VHDL语言描述。该通信接口号专用的接口芯片相比,具有使用灵活,系统配置方便的特点。
关键词: I2C总线 CPLD VHDL
I2C总线是PHILIPS公司开发的一种简单、双向二线制同步串行总线。它只需要两根线(串行时钟线和串行数据线)即可在连接于总线上的器件之间传送信息。该总线是具备多主机系统所需要的包括裁决和高低速设备同步等功能的高性能串行总线,应用极为广泛。
目前,虽然市场上有专用I2C总线接口芯片,但是地址可选范围小,性能指标固定,功能单一,而且使用不方便。针对I2C总线的电气特性及其通信协
[应用]
STM32的串口函数_库函数USART_SendData问题和解决方法
个人记录: 昨天做串口实验的时候一直没有成功的原因,连续调用USART_SendData总是会出现前一个被后一个覆盖的情况。 之前觉得ST的官方库应该没有问题就没往这方面想,现在查查,确实有库的问题,还是自己对库不太理解。 还有遇到的硬件复位以后,发送第一个字符丢失的情况。 1、后字节覆盖前字节 -----------------加判断while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET){} 2、硬件复位之后第一个字符丢失 -----------------USART_ClearFlag(USART2,USART_FLAG_TC); ----
[单片机]
STM32学习笔记-STM32堆栈区(一)
一个由C/C++编译的程序占用的内存分为以下几个部分: 栈区(stack):编译器自动分配释放,存放函数的参数值,局部变量的值等。操作方式类似于数据结构中的栈。 堆区(heap):一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。 文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放 程序代码区—存放函数体的二进制代码 编译后,各个区存储内容举例说明如下:
[单片机]
STM32 定时器输入捕获注意点
使用的是stm32f103rct6. 最近在写一个单定时器捕获4路pwm波的程序,那就必须在中断函数中改变检测边沿,通过手动记录捕获值来手动计算pwm的频率和脉宽值。 网上也有很多相关程序,但是我在写的时候却碰到了一个对于初学者来说非常不起眼的问题,导致结果怎么都不对: 如图中所示,我正在用TIM4_CH1,因为看见其他的结构体都是自己定义一边再使用的,于是我将‘TIM_TypeDef’这个结构体也自己定义了一个对象‘TIM4_Type’然后就发现结果不对。 后来仔细分析后发现这个结构体已在stm32f10x.h中有了对象实例:TIM4。并且这个TIM4所在的地方正是那些寄存器所处的地方,而我自己定义的对象‘TIM4_Type’是
[单片机]
STM32使用模拟IIC实现24C02读取
1.与硬件IIC的比较 1.1.使用灵活 可使用任意2个IO口实现,不用受芯片管脚限制; 1.2.速率快 通过调整延时,可以实现超过400k的速率,实际测试最大速率接近800k; 1.3.容错性强 硬件IIC在通信出错后,无法自行恢复,模拟IIC则可以迅速恢复; 2.底层接口函数 2.1. I2C_Start static uint8_t I2C_Start(void) { SDA_H; //拉高数据线 SCL_H; //拉高时钟线 I2C_DELAY; if(SDA_read == RESET) //SDA线为低电平则总线忙,退出 { return I2C_BUS_BUSY; } S
[单片机]
STM32速成笔记(14)—CAN通信
一、CAN通信简介 1.1 CAN简介 CAN全称是Controller Area Network,控制器局域网络,是ISO国际标准化的串行通信协议。CAN是国际上应用最广泛的现场总线之一。 CAN通信只有两根信号线,分别是CAN_H和CAN_L,CAN 控制器根据这两根线上的电位差来判断总线电平。总线申平分为显性电平和隐性申平,二者必居其一。发送方通过使总线电平发生变化,将消息发送给接收方。 • 2.0V---------逻辑0------显性电平 • 0 V-----------逻辑1------隐性电平 CAN总线遵从“线与”机制, 显性电平可以覆盖隐性电平 。这就导致 只有所有节点都发送隐形电平时总线才处于隐性状
[单片机]