任务名称
2018年_G题:简易数字信号时序分析装置(高职高专)
任务要求
难度

一、任务

设计一个数字信号时序分析装置,可在示波器(X-Y模式)上同时显示8路数字信号时序,装置的系统组成如图1所示。

二、要求

  1. 设计制作8位数字信号发生电路,可产生8位并行移位循环输出的TTL电平信号,TTL电平的外输入移位时钟clock信号频率为100kHz,D0 ~ D7循环输出的时序波形如图2。               (20分)
  2. 设计制作数字信号时序分析装置,通过键盘预置8位单级触发字TW,满足触发条件(即D0 ~ D7刚好为预置的TW)时,可在示波器上不重叠地自左至右同时显示8路数字信号1个移位循环周期的时序波形。 (30分)
  3. 8路数字信号时序波形的触发时间位置可调,可分别选择“触发开始跟踪”、“中心触发”和“触发终止跟踪”三种方式(即触发字的时间位置可分别选在示波器屏幕的左侧、中间和右侧)。               (15分)
  4. 在示波器屏幕上添加可手动位移的时间标志线(屏幕上的竖亮线),并用8个LED显示时间标志线对应时刻的8路数字信号的状态字SW(状态1时LED点亮、状态0时LED熄灭)。               (15分)                                    
  5. 在触发字时刻,分析装置对8路数字信号的逻辑状态开始采集与存储,并可在示波器上回放2个移位循环周期的8路数字信号时序波形。    (10分)
  6. 其他               (10分)
  7. 设计报告                (20分)

三、说明

  1. 8路数字信号发生电路输出与时序分析装置输入端D0 ~ D7之间采用跳线连接,供设计作品测试时可能颠倒输入接线顺序使用。数字信号时序分析装置如需clock信号,或需产生与clock信号同步的时钟信号,均可直接引用外部输入的clock信号。
  2. 可预置的触发字TW是8位二进制码组(称为字),码组D0 ~ D7称为状态字SW(本题仅有8种不同的SW),SW等于TW时触发X通道扫描。
  3. 可对clock信号8分频得到同步扫描周期信号,将其变换为周期性斜升波作为示波器X通道输入的扫描信号。
  4. 完成第(2)步要求时,既可采用8通道A/D采集输入数字信号,也可采用简单方案,即“八进制计数器、D/A、8选1模拟开关、加法器”组合的简单实现方案,其中八进制计数器对clock信号计数形成3位地址码,同时作为用于轮流选通D0 ~ D7的8选1模拟开关的选通信号及D/A地址线,使D/A输出8级周期性阶梯波,这8个台阶电压分别与模拟开关选通输出的某一路数字信号叠加,确保8路数字信号波形显示不重叠。加法器可以是有源的,也可以是无源的,其输出接示波器Y通道。
  5. 现场测试正式开始后,参赛者不能再对示波器进行任何调整操作。
参考答案

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


一、系统概述

设计一个数字信号时序分析装置,可以在示波器(X-Y模式)上同时显示8路数字信号时序。装置由8位数字信号发生电路和数字信号时序分析装置组成,并满足各种触发模式和显示模式要求。

二、主要模块设计

  1. 8位数字信号发生电路

    • 使用TTL电平的移位寄存器(如74HC595)实现8位并行移位输出。
    • 输入外部移位时钟信号频率为100kHz,生成符合要求的时序波形。
  2. 数字信号时序分析装置

    • 接收8路数字信号并进行时序分析。
    • 提供三种触发模式:触发开始跟踪、中心触发、触发终止跟踪。
    • 在示波器屏幕上添加可手动移动的时间标志线和8个LED状态指示灯。
    • 信号分析后显示8位移位循环时序波形。

三、具体实现步骤

  1. 8位数字信号发生电路设计

    • 使用74HC595移位寄存器,将串行输入转换为并行输出,每位信号持续10μs,移位循环周期为80μs。
    • 设计时钟电路产生100kHz的TTL时钟信号,驱动移位寄存器。
  2. 数字信号时序分析装置设计

    • 设计累加器或锁存器,捕获每个周期的8位信号并存储。
    • 设计逻辑电路检测触发条件变化,支持三种触发模式。
      • 触发开始跟踪:从指定时刻开始捕获信号。
      • 中心触发:在信号中间位置触发。
      • 触发终止跟踪:在信号结束位置触发。
    • 信号分析后,在示波器上显示时序波形。
  3. 显示模块设计

    • 设计X-Y轴控制,将信号发送到示波器显示。
    • 添加可移动的时间标志线,手动调整并在屏幕上显示。
    • 设计LED指示模块,8个LED对应数字信号状态(SW模式下1时亮,0时灭)。
  4. 系统控制和算法设计

    • 设计控制算法,管理触发模式切换和信号捕获。
    • 根据设定的触发条件,将信号转换为符合要求的时序波形。
    • 对比移位寄存器产生的波形和捕获的信号,做出相应显示。

四、设计图纸与报告

  1. 设计图纸

    • 完成电气原理图,绘制电路连接图,确保每个模块的连接正确。
    • 完成PCB设计图,包括元器件选择和布局。
  2. 设计报告

    • 编写详细设计报告,包括系统概述、元件选择、详细电路设计、时序分析流程、测试结果及优化方案。
    • 报告中图示详细描述电路连接和功能实现。

 


在这个题目中如何设计控制算法?

为了管理触发模式的切换和信号捕获,整个流程可以概述如下:

  1. 定义触发模式:用枚举类型定义三种触发模式:触发开始跟踪、中间触发、触发停止跟踪。
  2. 配置定时器:需要用到一个定时器来捕获时钟周期内的信号。
  3. 捕获信号:配置GPIO引脚读取8位信号,并存储在数组中。
  4. 管理触发模式切换:利用开关控制,切换不同的触发模式。
  5. 生成波形:每个触发模式下,生成对应的波形数据,供显示模块调用。
#include <stdint.h>
#include <stdio.h>
#include <stdbool.h>

#define NUM_CHANNELS 8

// 定义触发模式枚举类型
typedef enum {
    TRIGGER_START_TRACK,
    TRIGGER_CENTER_TRACK,
    TRIGGER_END_TRACK
} TriggerMode;

// 实验用信号数组和触发标志
uint8_t signalBuffer[NUM_CHANNELS];
TriggerMode currentTriggerMode = TRIGGER_START_TRACK;
bool isTriggered = false;

// 仿真专用变量
bool signalLine[NUM_CHANNELS];
void renderWaveform(uint8_t signal[]);  // 声明波形生成函数,占位函数

// 伪代码:初始化GPIO并配置时钟
void initHardware() {
    // 初始化 GPIO 引脚和时钟信号
}

// 捕获信号函数
void captureSignal() {
    for (int i = 0; i < NUM_CHANNELS; i++) {
        // 读取GPIO引脚的信号, 此处用signalLine[i]模拟输入
        signalBuffer[i] = signalLine[i] ? 1 : 0;
    }
}

// 触发模式切换函数
void switchTriggerMode(TriggerMode mode) {
    currentTriggerMode = mode;
    isTriggered = false;  // 任何时间切换模式,清除触发状态
}

// 信号处理函数 - 生成波形
void processSignal() {
    switch (currentTriggerMode) {
        case TRIGGER_START_TRACK:
            if (!isTriggered) {
                captureSignal();
                isTriggered = true;
                renderWaveform(signalBuffer);
            }
            break;

        case TRIGGER_CENTER_TRACK:
            if (!isTriggered) {
                // 此处简单演示:忽略一些时钟周期,然后捕获信号
                for (int i = 0; i < 10; i++) {
                    // 伪代码:模拟忽略10次时钟周期
                }
                captureSignal();
                isTriggered = true;
                renderWaveform(signalBuffer);
            }
            break;

        case TRIGGER_END_TRACK:
            if (!isTriggered) {
                captureSignal();
                isTriggered = true;
                renderWaveform(signalBuffer);
            }
            break;

        default:
            break;
    }
}

// 占位函数:实际应用中,该函数负责实时更新示波器上的显示波形
void renderWaveform(uint8_t signal[]) {
    for (int i = 0; i < NUM_CHANNELS; i++) {
        printf("D%d: %d\n", i, signal[i]);
    }
}

// 主函数 - 程序入口
int main() {
    initHardware();
    while (1) {
        // 不断切换触发模式(手动控制条件触发)
        processSignal();
    }
    return 0;
}

说明

  • initHardware 函数模拟硬件初始化,包括GPIO和时钟的配置。
  • captureSignal 函数每个时钟周期内捕获8位信号,并存储在信号缓冲区。
  • switchTriggerMode 函数通过开关设置当前的触发模式。
  • processSignal 函数根据触发模式捕获信号并生成对应的波形。
  • renderWaveform 函数用于波形显示,在实际应用中,该函数实现完整的波形显示逻辑。

这个题目考察的主要知识点:

  1. 数字信号处理:理解和实现对TTL数字信号的采集与分析,包括信号的捕获、存储和显示等过程。
  2. MCU编程:利用MSP430F5529进行信号处理,包括GPIO配置、定时器应用、中断处理和数据采集等。
  3. 模拟电路设计:设计电压、电流采样电路,实现高精度信号采集。
  4. 触发条件设计:实现单稳态触发,能根据设定条件触发信号采集。
  5. 信号显示:通过LED或LCD显示模块,实时显示采集到的信号,确保信号的时序和状态清晰可见。
  6. 硬件调试:调试硬件电路,确保信号准确捕获和显示,处理噪声和信号干扰等问题。

 

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