任务名称
1997年_B题:简易数字频率计
任务要求
难度

一、任务
设计并制作一台数字显示的简易频率计。
二、要求
1.基本要求
(1)频率测量
a.测量范围 信号:方波、正弦波;幅度:0.5V~5V;频率:1Hz~1MHz
b.测量误差≤0.1%
(2)周期测量
a.测量范围 信号:方波、正弦波;幅度:0.5V~5V;频率:1Hz~1MHz
b.测量误差≤0.1%
(3)脉冲宽度测量
a.测量范围 信号:脉冲波;幅度:0.5V~5V;脉冲宽度≥100μs
b.测量误差≤1%
(4)显示器
十进制数字显示,显示刷新时间 1~10 秒连续可调,对上述三种测量功能分别用不同颜色的发光二极管指示。
(5)具有自校功能,时标信号频率为 1MHz。
(6)自行设计并制作满足本设计任务要求的稳压电源。
2.发挥部分
(1)扩展频率测量范围为 0.1Hz~10MHz(信号幅度 0.5V~5V),测量误差降低为 0.01%(最大闸门时间≤10s)。
(2)测量并显示周期脉冲信号(幅度 0.5V~5V、频率 1Hz~1kHz)的占空比,占空比变化范围为 10%~90%,测量误差≤1% 。
(3)在 1Hz~1MHz 范围内及测量误差≤1%的条件下,进行小信号的频率测量,提出并实现抗干扰的措施。

评审标准

参考答案

GPT-4o给出的设计方案:

为了设计一个简易频率计,我们需要以下几个关键模块:

  1. 输入信号调理模块: 处理输入信号的幅度和波形,使其适合后续电路处理。
  2. 频率测量模块: 以计数方式进行频率测量,结合内部时钟实现高精度测量。
  3. 周期测量模块: 利用时间测量相邻信号上升沿(或下降沿)之间的时间差来计算周期。
  4. 脉冲宽度测量模块: 测量单个脉冲的宽度。
  5. 显示模块: 采用7段数码管或LCD显示技术,配合多种LED指示不同测量模式。
  6. 自校准模块: 利用内部1MHz参考时钟实现系统自校准。
  7. 电源模块: 稳定可靠的电源设计满足整体电路需求。

理论分析

  1. 频率测量误差分析: [ \text{测量误差} = \frac{1}{T_{\text{测量时间}}} ] 若选择1秒作为测量时间,则误差为0.1%。
  2. 周期测量误差分析: 采用高精度计时器,通过测量两个触发事件之间的时间间隔计算周期。误差主要由内部时钟精度决定。
  3. 脉冲宽度测量误差分析: 通过高精度定时器测量脉冲起始与终止的时间差,尽量减小内部定时器误差。

原理图设计要点

  1. 输入信号调理模块: 包括信号放大及整形电路(如运算放大器、比较器等),确保信号在0.5V至5V的范围内和适当的整形。
  2. 频率测量模块: 使用TTL电平,占空比调整至50%,通过计数器记录一定时间内脉冲数。
  3. 周期测量模块: 计数两个连续的上升沿之间的时间,需要高精度的RTC或计时器协助。
  4. 脉冲宽度测量模块: 采用精度为纳秒级的定时器。

核心器件设计要点

  1. 计数器(如74HC393): 高速的输入信号和较小的传播延迟确保计数精准。
  2. 高精度定时器(如NE555): 用于脉冲测量,在调节上确保稳定。
  3. MCU(如STM32系列): 集成多种定时器,并行处理能力强。主频应高于72MHz以确保高频信号的精准测量。

MCU C代码样例

#include "stm32f10x.h"

void TIM2_IRQHandler(void) {
    if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) {
        // 清除中断标志
        TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
        // 处理频率计数
    }
}

void setup_timer() {
    TIM_TimeBaseInitTypeDef timer_init_structure;
    NVIC_InitTypeDef nvic_structure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
    timer_init_structure.TIM_Period = 999;
    timer_init_structure.TIM_Prescaler = 71;
    timer_init_structure.TIM_ClockDivision = TIM_CKD_DIV1;
    timer_init_structure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM2, &timer_init_structure);
    TIM_Cmd(TIM2, ENABLE);

    TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
    nvic_structure.NVIC_IRQChannel = TIM2_IRQn;
    nvic_structure.NVIC_IRQChannelPreemptionPriority = 0;
    nvic_structure.NVIC_IRQChannelSubPriority = 0;
    nvic_structure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&nvic_structure);
}

int main(void) {
    setup_timer();
    while (1) {
        // 主循环
    }
}

FPGA Verilog代码样例

module frequency_counter(
    input clk,
    input rst,
    input signal,
    output reg [31:0] frequency
);

reg [31:0] counter;
reg [31:0] timer;

always @(posedge clk or posedge rst) begin
    if (rst) begin
        counter <= 0;
        timer <= 0;
        frequency <= 0;
    end else begin
        if (timer == 99999999) begin
            frequency <= counter;
            counter <= 0;
            timer <= 0;
        end else begin
            timer <= timer + 1;
            if (signal) begin
                counter <= counter + 1;
            end
        end
    end
end

endmodule

该设计方案结合硬件和软件的多方面指标,满足要求的测量精度和频率扩展能力。MCU和FPGA代码展示了核心功能的基本实现方法。


本题目考察的主要知识点:

  1. 信号调理: 如何处理不同类型及幅度的输入信号,使其适合后续电路处理。
  2. 频率测量: 使用计数器和高精度时钟进行频率测量,确保测量误差在规定范围内。
  3. 周期测量: 利用高精度计时器,通过测量相邻信号触发点之间的时间间隔计算信号周期。
  4. 脉冲宽度测量: 通过定时器测量脉冲的时间宽度,确保测量精度。
  5. 显示技术: 用显示器、数码管或LCD显示测量结果,并通过LED指示工作状态。
  6. 自校准功能: 利用内部参考信号,对系统进行自校准,保证测量精度。
  7. 电源设计: 提供稳定的电源,确保整个系统的可靠性。
  8. MCU/FPGA编程: 基本的嵌入式系统编程,以及硬件描述语言(Verilog)的基础知识。
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号