一、任务
设计并制作一台数字显示的简易频率计。
二、要求
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给出的设计方案:
为了设计一个简易频率计,我们需要以下几个关键模块:
#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) {
// 主循环
}
}
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代码展示了核心功能的基本实现方法。
本题目考察的主要知识点: