任务名称
2018年_A题:电流信号检测装置(本科)
任务要求
难度

一、任务

如图1所示,由任意波信号发生器产生的信号经功率放大电路驱动后,通过导线连接10Ω电阻负载,形成一电流环路;设计一采用非接触式传感的电流信号检测装置,检测环路电流信号的幅度及频率,并将信号的参数显示出来。

二、要求

  1. 设计一功率放大电路,当输入正弦信号频率范围为50Hz~1kHz时,要求流过10Ω负载电阻的电流峰峰值不小于1A,要求电流信号无失真。                  (25分)
  2. 用漆包线绕制线圈制作电流传感器以获取电流信号;设计电流信号检测分析电路,测量并显示电流信号的峰峰值及频率。  (15分)
  3. 被测正弦电流峰峰值范围为10mA~1A,电流测量精度优于5%,频率测量精度优于1%。  (25分)
  4. 任意波信号发生器输出非正弦信号时,基波频率范围为50Hz~200Hz,测量电流信号基波频率,频率测量精度优于1%;测量基本及各次谐波分量的幅度(振幅值),电流谐波测量频率不超过1kHz,测量精度优于5%。   (25分)
  5. 其他。                                                   (10分)
  6. 设计报告                                      (20分)

三、说明

  1. 为提高电流传感器的灵敏度,可用用漆包线在锰芯磁环上绕制线圈,制作电流传感器。
  2. 在锰芯磁环上绕N2匝导线,将流过被测电流的导线从磁环中穿过(N1=1),构成电流传感器。
参考答案

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


一、方案论证

该设计方案的目标是实现电流信号的检测与分析,关键在于高准确度和低失真地测量电流信号。我们需设计一个符合要求的功率放大电路以及非接触式电流检测装置。

二、系统设计

  1. 功率放大电路

    • 设计目标:放大正弦信号频率在50Hz至1kHz范围内,流过10Ω负载的电流峰峰值无失真。
    • 设计方案:选择合适的功率放大器OP放大,确保其线性度和带宽满足要求。
  2. 电流检测装置

    • 设计目标:非接触检测10mA至1A电流,测量精度优于5%。
    • 设计方案:采用霍尔效应传感器检测磁场强度,转换为电流信号,并通过滤波和放大处理后进行分析。

三、理论分析

  1. 功率放大电路

    • 增益选择:根据输入信号幅度和负载电阻选择合适的增益。
    • 带宽与稳定性:确保放大器的带宽能覆盖50Hz至1kHz,同时保证稳定性。
  2. 电流检测装置

    • 霍尔效应传感器的灵敏度选择:选择合适的霍尔传感器,使其在10mA至1A的范围内有较好的线性响应。
    • 滤波与放大:利用滤波电路和放大电路对传感器输出进行处理,提高信号质量和测量精度。

四、原理图设计要点

  1. 功率放大电路

    • 放大器模块:选择如LM3886等高性能音频放大器。
    • 增益设置:利用反馈网络设置适当增益。
    • 电源滤波:避免电源纹波对信号的干扰。
  2. 电流检测装置

    • 霍尔效应传感器:选择如ACS712等电流传感器。
    • 滤波电路:采用低通滤波器滤除高频噪声。
    • 信号采集电路:运用运算放大器进行信号放大和处理。

五、核心器件设计要点

  1. LM3886功率放大器

    • 带宽、增益稳定性优良,适合高保真音频放大。
    • 需注意提供稳定的电源和良好的散热条件。
  2. ACS712电流传感器

    • 带宽高达80kHz,输出为模拟电压信号。
    • 要求精度±1.5%,适合高精度电流测量。

总结

这个电流信号检测装置设计旨在满足高精度、低失真的电流检测和分析要求。通过合理选择功率放大电路和霍尔效应传感器,并加以适当的滤波和信号处理,能高效实现目标。设计中充分考虑了组件选择、电路稳定性和测量精度,是一个较为完善的解决方案。


功率放大器的设计

以下是一个简单的功率放大器电路原理图的示例。实际的功率放大器设计会根据具体需求和工作条件有所不同,但以下电路展示了基本的结构和原理:

一、基本功率放大器电路原理图

  1. OPA (运算放大器): 使用OPA541作为功率运放。
  2. 电阻器: 用于设定增益的反馈电阻。
  3. 输入与输出电容: 用于信号耦合和滤波。
          VCC+
            |
           +|------------+
           |             |
          (R3)          (R4)
           |             |
  Vin -----+----| |------|----------+
          (C1)         (R2)         |
           |             |          |
           |            +|          |
           +---|>|-----(+)- OPA541-(+)--- Vout
               D1       (          )))
           |            /          /
          (R1)         (GND)      (GND)
           |
          (GND)

说明:

  1. 电源VCC+: 为OPA541提供正电源电压。
  2. 输入信号Vin: 通过耦合电容C1输入到运放的正端。
  3. 反馈网络:
    • 电阻R3和R4设置运放的闭环增益。
    • 电阻R1用于输入端的偏置。
    • 二极管D1用作过压保护。
  4. 输出: 输出信号从OPA541的输出端Vout获得,并经过后续电容和电阻网络处理。

二、电路设计细节

1. 运算放大器(OPA541):

OPA541是一种高功率运算放大器,具有高输入阻抗和高电压增益特性,能够处理高功率输出。

2. 反馈网络:

  • 使用电阻R3和R4配置运放的增益:增益 = 1 + (R4/R3)
  • 反馈电路保证稳定性和线性度,提高放大器的性能。

3. 输入与输出耦合电容:

  • 输入电容C1用于信号隔离,防止输入信号中的直流分量对运放偏置电压的影响。
  • 输出端可以添加一个低通滤波器(电容和电阻网络),用于抑制高频噪声。

4. 电源和地:

  • 提供适当的电源电压,确保运放能正常工作。
  • 确保所有接地连接完好,避免地环路引起的噪声问题。

注意事项:

  1. 电路设计需要考虑功率放大器的工作电压、输入和输出电流、功率耗散等。
  2. 根据需求选择合适的电源电压和运放型号。
  3. 仔细计算各个元件参数,确保电路稳定工作并满足应用要求。

此电路示例是基础设计,实际应用中需要根据具体要求进行调整和优化。对于高功率输出需求,可以考虑增加散热设计和保护电路。

 


使用FFT给出谐波成分的C代码:

下面是一个使用FFT(快速傅里叶变换)分析信号谐波成分的C语言代码示例。这个代码基于GNU Scientific Library (GSL) 库进行FFT计算,你需要在使用前确保已安装GSL。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <gsl/gsl_fft_real.h>
#include <gsl/gsl_fft_halfcomplex.h>

// 定义信号长度
#define N 1024

// 主函数
int main(void) {
    double data[N]; // 输入数据数组
    double freq[N]; // 频率数组
    double sampling_rate = 1000.0; // 采样率(可以根据实际情况调整)

    // 生成示例输入信号(例如正弦波和谐波)
    for (int i = 0; i < N; ++i) {
        double t = i / sampling_rate;
        data[i] = sin(2 * M_PI * 50 * t) + 0.5 * sin(2 * M_PI * 150 * t); // 基波50Hz,3次谐波150Hz
    }

    // 进行FFT转换
    gsl_fft_real_workspace *work = gsl_fft_real_workspace_alloc(N);
    gsl_fft_real_wavetable *real = gsl_fft_real_wavetable_alloc(N);

    gsl_fft_real_transform(data, 1, N, real, work);

    gsl_fft_real_wavetable_free(real);
    gsl_fft_real_workspace_free(work);

    // 计算频谱
    freq[0] = data[0];
    for (int i = 1; i < (N / 2); ++i) {
        double real = data[2 * i];
        double imag = data[2 * i + 1];
        freq[i] = sqrt(real * real + imag * imag);
    }
    freq[N / 2] = data[1]; // Nyquist频率

    // 打印频谱
    for (int i = 0; i < (N / 2); ++i) {
        printf("Frequency = %f Hz, Amplitude = %f\n", i * sampling_rate / N, freq[i]);
    }

    return 0;
}

解释

  1. 生成示例信号:

    • 生成一个包含基波50Hz和谐波150Hz的示例信号。
  2. FFT变换:

    • 使用GSL函数进行实时FFT变换。
  3. 计算频谱:

    • 将FFT结果转换为频谱,计算每个频率点的幅值。
  4. 打印频谱:

    • 打印频谱,显示频率和对应的幅值。

注意事项

  1. 依赖库:

    • 在编译时需要链接GSL库。例如:gcc -o fft_example fft_example.c -lgsl -lgslcblas -lm
  2. 信号处理:

    • 实际使用中,输入信号应根据实际需求进行适当预处理(例如滤波、去噪等)。
  3. 输出结果:

    • 此代码将基波和谐波的频率和幅度打印到控制台,实际使用时可以根据需求将结果存储或进一步处理。

通过这个代码,你可以完成基本的信号谐波成分分析,进一步按照实际需求进行细化和优化。

 


任意波形发生器产生50Hz-1kHz的正弦信号的C代码

为了生成50Hz至1kHz范围内的正弦波信号,可以使用DAC(数模转换器)在STM32单片机上实现。以下是一个示例代码,仅供参考。本例假设读者具备一些基本的STM32开发知识,并配置了硬件,如DAC和定时器等。

一、初始化部分

#include "stm32f4xx_hal.h"
#include "math.h"

// DAC输出缓冲区大小
#define DAC_BUFFER_SIZE 100

DAC_HandleTypeDef hdac;
TIM_HandleTypeDef htim6;

uint16_t dac_buffer[DAC_BUFFER_SIZE];

// 初始化DAC
void DAC_Init(void) {
    __HAL_RCC_DAC_CLK_ENABLE();

    hdac.Instance = DAC;
    HAL_DAC_Init(&hdac);

    DAC_ChannelConfTypeDef sConfig;
    sConfig.DAC_Trigger = DAC_TRIGGER_T6_TRGO;
    sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
    HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_1);
}

// 初始化定时器
void TIM6_Init(uint32_t frequency) {
    __HAL_RCC_TIM6_CLK_ENABLE();

    htim6.Instance = TIM6;
    htim6.Init.Prescaler = HAL_RCC_GetPCLK1Freq() / (DAC_BUFFER_SIZE * frequency) - 1;
    htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim6.Init.Period = DAC_BUFFER_SIZE - 1;
    htim6.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    HAL_TIM_Base_Init(&htim6);

    TIM_MasterConfigTypeDef sMasterConfig;
    sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
    sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
    HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig);
}

// 填充DAC缓冲区,生成正弦波
void Generate_Sine_Wave(uint32_t frequency) {
    for (int i = 0; i < DAC_BUFFER_SIZE; i++) {
        dac_buffer[i] = (uint16_t)(((sin(2 * M_PI * i / DAC_BUFFER_SIZE) + 1) / 2) * 4095);  // 正弦波数据,12位DAC
    }
}

// 启动DAC
void Start_DAC(void) {
    HAL_DAC_Start_DMA(&hdac, DAC_CHANNEL_1, (uint32_t*)dac_buffer, DAC_BUFFER_SIZE, DAC_ALIGN_12B_R);
    HAL_TIM_Base_Start(&htim6);
}

二、主函数

int main(void) {
    HAL_Init();
    SystemClock_Config();  // 确保系统时钟配置正确

    DAC_Init();
    TIM6_Init(1000);  // 设置初始频率,例如1000Hz

    Generate_Sine_Wave(1000);  // 生成正弦波形
    Start_DAC();

    // 主循环
    while (1) {
        // 可根据需要调节频率
        uint32_t new_frequency = 500;  // 示例:将频率更改为500Hz
        TIM6_Init(new_frequency);
        Generate_Sine_Wave(new_frequency);
    }
}

注意事项

  1. 硬件连接: 确保DAC输出引脚正确连接到测量电路或负载。
  2. 库版本: 确保STM32 HAL库的版本和芯片型号正确。
  3. 定时与同步: 根据具体的STM32系列芯片,调整定时器和中断优先级设置。

通过以上代码,可以生成频率在50Hz至1kHz范围内的正弦波信号,并依据需要动态调整频率。

 


这个题目考察的知识点:

该题目主要考察以下几个知识点:

  • 要求设计并实现一个非接触式电流信号检测设备,强调电流测量的精度和信号无失真。
  • 涉及到通过功率放大电路实现信号的驱动和放大,需要了解功率放大器的设计及其在信号处理中的作用。
  • 考察漆包线缠绕磁环制作非接触式电流传感器的制作和原理。
  • 要求设计电流信号分析电路,这涉及信号的采集与处理,特别是信号的放大、滤波和频谱分析。
  • 考察通过数据显示模块展示电流信号参数,这涉及嵌入式系统的显示接口和软件编程。

通过这些考察,测试同学在电路设计、信号处理和嵌入式系统开发方面的综合能力。

硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号