一、任务
设计制作一个用于 8 路模拟信号采集与单向传输系统。系统方框图参见图 1。
二、要求
1.基本要求
(1)被测电压为 8 路 0~5V 分别可调的直流电压。系统具有在发送端设定 8 路顺序循环采集与指定某一路采集的功能。
(2)采用 8 位 A/D 变换器。
(3)采用 3dB 带宽为 30kHz~50kHz 的带通滤波器(带外衰减优于 35dB/十倍频程)作为模拟信道。
(4)调制器输出的信号峰-峰值 vsp-p为 0~1V 可变,码元速率 16k 波特(码元/秒);制作一个时钟频率可变的测试码发生器(如 0101…码等),用于测试传输速率。
(5)在接收端具有显示功能,要求显示被测路数和被测电压值。
2.发挥部分
(1)设计制作一个用伪随机码形成的噪声模拟发生器,伪随机码时钟频率为 96kHz,周期为 127 位码元,生成多项式采用 。其输出峰-峰值 0~1V 连续可调。
(2)设计一个加法电路,将调制器输出 与噪声电压 相加送入模拟信道。在解调器输入端测量信号与噪声峰-峰值之比( ),当其比值分别为 1、3、5 时,进行误码测试。测试方法:在 8 路顺序循环采集模式下,监视某一路的显示,检查接收数据的误码情况,监视时间为 1 分钟。
(3)在( )=3 时,尽量提高传输速率,用上述第(2)项的测试方法,检查接收数据的误码情况。
(4)其它(如自制用来定量测量系统误码的简易误码率测试仪,其方框图见图 2)。
GPT-4o给出的设计方案:
设计并实现一个用于8路模拟信号采集与发送的传输系统。系统包括信号采集模块、信号调理模块、AD转换模块、信号调制与发送模块、信号接收解调模块和结果显示模块。
输入电压范围:
取样频率与位数:
信号调制与发送:
信噪比:
输入调理电路:
A/D转换电路:
调制与发送电路:
接收与解调电路:
A/D转换器(如ADC0804):
调制芯片(如XR-2206):
接收和解调芯片(如XR-2211):
假设使用STM32系列MCU进行AD采集与频率控制,下面是部分实现的C代码:
#include "stm32f4xx_hal.h"
ADC_HandleTypeDef hadc1;
UART_HandleTypeDef huart1;
void SystemClock_Config(void);
void MX_ADC1_Init(void);
void MX_USART1_UART_Init(void);
void ReadADC(uint32_t channel_value[]);
int main(void) {
HAL_Init();
SystemClock_Config();
MX_ADC1_Init();
MX_USART1_UART_Init();
uint32_t adc_values[8]; // 储存8路模拟信号的AD结果
while (1) {
ReadADC(adc_values); // 读取AD采样值
// 可以将采样值通过串口或其他方式发送
// HAL_UART_Transmit(&huart1, (uint8_t*)adc_values, sizeof(adc_values), HAL_MAX_DELAY);
HAL_Delay(100); // 延时100ms,控制采样率
}
}
void SystemClock_Config(void) {
// 时钟配置代码
}
void MX_ADC1_Init(void) {
ADC_ChannelConfTypeDef sConfig = {0};
hadc1.Instance = ADC1;
hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
hadc1.Init.ContinuousConvMode = DISABLE;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.NbrOfConversion = 8;
HAL_ADC_Init(&hadc1);
// 配置ADC各通道
for (int i = 0; i < 8; i++) {
sConfig.Channel = i;
sConfig.Rank = 1;
sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;
HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}
}
void MX_USART1_UART_Init(void) {
// 串口初始化代码
}
void ReadADC(uint32_t channel_value[]) {
for (int i = 0; i < 8; i++) {
HAL_ADC_SelectChannel(&hadc1, i); // 选择通道
HAL_ADC_Start(&hadc1); // 开始转换
if (HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY) == HAL_OK) {
channel_value[i] = HAL_ADC_GetValue(&hadc1); // 获取结果
}
HAL_ADC_Stop(&hadc1); // 停止转换
}
}
总结
该设计方案通过智能的硬件配置和科学的方法论证,能够高效地进行8路模拟信号的采集与发送,满足系统的功能和性能需求。
这个题目考察的知识点: