目录
一、2023 电赛 F 题是什么
2023 年全国大学生电子设计竞赛 F 题是 “红外光通信装置” ,本科组与高职高专组均可选择。其要求参赛选手设计并制作一个红外光通信装置,利用红外发光管和红外光接收模块作为收发器件,定向传输语音信号,传输距离为 2m。语音信号可通过话筒、3.5mm 音频插孔线路或低频信号输入,频率范围在 300 - 3400Hz 。接收声音需无明显失真,当发射端输入 800Hz 单音信号时,在 8Ω 电阻负载上,接收装置输出电压有效值不小于 0.4V,且发射端输入信号幅度减至 0V 时,接收装置输出端噪声电压不大于 0.1V(关闭静噪功能测试)。若接收装置不能接收信号,需用发光管指示。
在发挥部分,增加了更多挑战。一是增加一路数字信道,实时传输发射端环境温度,并在接收端显示,数字信号传输时延不超过 10s,温度测量误差不超过 2℃,同时语音信号和数字信号能同时传输;二是设计并制作一个红外光通信中继转发节点,改变通信方向 90°,延长通信距离 2m,且语音通信质量满足基本要求 3;三是在满足发挥部分 2 要求的条件下,尽量减小中继转发节点供电电流;四是鼓励选手发挥创新,探索其他相关功能 。
这个题目对参赛者来说,是一次全方位的能力检验。它不仅考验参赛者对模拟电路知识的掌握,如语音信号的处理、放大电路的设计;还涉及数字电路知识,像数字信道的搭建、温度数据的数字化处理;同时,通信原理的理解和应用也至关重要,比如红外光通信的原理、信号的调制解调等。从实际操作层面,选手需要具备硬件设计与制作能力,能够根据设计方案选择合适的元器件,搭建稳定可靠的电路;软件编程能力也不可或缺,要实现对各种信号的处理、控制和传输。
对于电子信息行业而言,红外光通信有着广泛的应用前景,如智能家居中的设备控制、短距离无线数据传输等。这次竞赛题目紧跟行业发展趋势,让参赛者提前接触到行业中的实际问题和技术需求,为未来进入行业打下坚实基础。它也推动了高校电子信息类专业教学改革,促使教育更加注重培养学生的实践能力和创新精神,培养出更多符合行业需求的高素质人才。
二、题目深度解析
2.1 任务核心要点
- 语音信号传输:利用红外发光管和红外光接收模块,搭建起定向传输语音信号的通道,这是整个装置的基础功能。语音信号的稳定传输,是实现后续功能的前提,它考验着电路设计的合理性以及信号处理的准确性。例如,在选择红外收发器件时,要考虑其灵敏度、带宽等参数,以确保能够准确地发射和接收语音信号。
- 数字信道传输温度:增加一路数字信道,实现发射端环境温度的实时传输,并在接收端显示。这要求在原有的语音传输系统上,合理规划数字信道,选择合适的温度传感器和数据传输协议。比如,采用 DS18B20 温度传感器,它具有高精度、抗干扰能力强等优点,通过单线通信协议与微控制器进行数据交互,将温度数据准确地传输到接收端。
- 中继转发节点设计:设计并制作一个红外光通信中继转发节点,改变通信方向 90° 并延长通信距离 2m 。中继节点需要具备信号接收、放大、转发的功能,其性能的好坏直接影响到整个通信系统的稳定性和通信距离。在设计中继节点时,要考虑如何优化电路布局,减少信号干扰,提高信号的转发效率。
2.2 关键指标解读
- 频率范围(300 - 3400Hz):这个频率范围涵盖了人类语音的主要频率成分,确保装置能够准确地传输和还原语音信号。在实际应用中,如语音通信设备,只有保证在这个频率范围内的信号能够正常传输,才能实现清晰的语音通话。例如,在电话通信中,就是通过对 300 - 3400Hz 频率范围内的语音信号进行处理和传输,实现双方的沟通。
- 定位精度:虽然题目中未明确提及定位精度相关内容,但在类似的通信系统中,定位精度是一个重要指标。在一些室内定位系统中,利用红外光通信技术实现对人员或设备的定位,定位精度直接影响到系统的应用效果。高精度的定位可以为用户提供更准确的位置信息,在物流仓储中,可以精确地定位货物的位置,提高仓储管理的效率。
- 传输距离:题目要求传输距离为 2m,在发挥部分通过中继转发节点延长至 4m 。传输距离是衡量红外光通信装置性能的重要指标之一,它决定了装置的应用范围。在智能家居控制中,如果红外光通信装置的传输距离较短,就无法实现对较远位置设备的控制,而较长的传输距离可以满足更大空间内的设备控制需求。
2.3 难点与挑战剖析
- 信号干扰:红外光通信易受环境光、其他红外信号等干扰。在实际环境中,室内的灯光、阳光等都会对红外光信号产生干扰,导致信号失真或丢失。当在阳光直射的环境下进行红外光通信时,强烈的自然光会淹没红外光信号,使接收端无法正确接收。解决信号干扰问题,需要采取有效的屏蔽、滤波措施,如使用遮光罩减少环境光的影响,设计合适的滤波器去除干扰信号。
- 算法复杂度:在实现数字信道传输温度和语音信号同时传输时,需要合理设计数据处理算法,确保两种信号互不干扰。例如,在数据编码、调制解调过程中,算法的复杂度会影响系统的性能和实时性。如果算法设计不合理,可能会导致数据传输延迟、丢包等问题。为了降低算法复杂度,可以采用一些成熟的通信协议和数据处理算法,如时分复用(TDM)技术,将语音信号和温度数据在不同的时间片内进行传输,避免相互干扰。
- 硬件设计难度:制作中继转发节点需要考虑信号放大、整形、抗干扰等多方面因素,对硬件设计要求较高。在设计中继节点的电路时,要选择合适的放大器、滤波器等元器件,并且要合理布局电路板,减少信号之间的串扰。由于中继节点需要长时间稳定工作,还需要考虑其散热和电源管理问题,以确保硬件系统的可靠性。
三、解题思路与方案
3.1 整体架构搭建
整个红外光通信装置的设计采用模块化的思想,主要分为硬件和软件两大部分。硬件部分包括语音信号输入模块、红外发射模块、红外接收模块、语音信号输出模块以及数字信道模块(用于传输温度数据)。软件部分则负责对各种信号进行处理、控制和传输,实现语音信号的调制解调、温度数据的采集与传输以及系统的整体控制。
具体工作流程如下:语音信号通过话筒、3.5mm 音频插孔线路或低频信号输入,经过前置放大和滤波处理后,进入调制电路与载波信号进行调制,然后通过红外发射模块将调制后的信号发射出去。红外接收模块接收到信号后,进行解调、放大和滤波处理,还原出原始的语音信号,通过语音信号输出模块播放出来。同时,温度传感器采集发射端的环境温度数据,经过微控制器处理后,通过数字信道与语音信号同时传输到接收端,在接收端进行显示。
3.2 硬件选型与设计
- 红外收发器件:选择高灵敏度的红外发光管和红外光接收模块,如 Vishay 的 TSAL6200 红外发光管和 TSOP1738 红外光接收模块。TSAL6200 具有高辐射强度和快速响应时间的特点,能够确保语音信号的快速发射;TSOP1738 则对特定频率的红外信号有较好的接收效果,抗干扰能力较强,能有效提高接收信号的质量。这两个器件的配合,能够满足题目中对信号传输距离和质量的要求。
- 微控制器:采用 STM32 系列微控制器,如 STM32F407。它具有高性能的 Cortex - M4 内核,运行速度快,能够满足数据处理和控制的实时性要求。丰富的外设接口,如 SPI、I2C、USART 等,方便与其他模块进行通信和数据传输。在本设计中,通过 SPI 接口与温度传感器通信,获取温度数据;利用 USART 接口实现数字信道的数据传输。
- 语音处理芯片:选用 TLV320AIC3204 音频编解码芯片,它能够对语音信号进行高质量的模数转换和数模转换,内置的滤波器可以有效去除噪声,提高语音信号的质量。支持多种音频接口,与系统中的其他模块连接方便。在语音信号输入时,将模拟语音信号转换为数字信号,便于后续的处理和传输;在语音信号输出时,将数字信号转换为模拟信号,通过扬声器播放出来。
硬件连接方式上,红外发光管与调制电路相连,接收调制后的信号并发射出去;红外光接收模块将接收到的信号传输给解调电路,解调后的信号经过语音处理芯片处理后,输出到扬声器。微控制器与温度传感器通过 SPI 总线连接,获取温度数据,并通过数字信道与接收端进行通信。各个模块之间通过合理的电路连接和信号传输,实现整个系统的功能。
3.3 软件算法规划
- 语音信号处理算法:采用脉冲编码调制(PCM)技术对语音信号进行数字化处理。PCM 技术将模拟语音信号按照一定的采样频率和量化精度进行采样和量化,转换为数字信号,方便在数字信道中传输。它具有简单、易于实现的优点,能够有效保证语音信号的质量。在发射端,对输入的语音信号进行 PCM 编码,将其转换为数字信号;在接收端,对接收到的数字信号进行 PCM 解码,还原出原始的语音信号。
- 温度数据传输算法:采用 CRC(循环冗余校验)算法对温度数据进行校验,确保数据传输的准确性。CRC 算法通过对数据进行特定的运算,生成一个校验码,接收端根据校验码来判断数据是否传输正确。在发射端,将温度数据和对应的 CRC 校验码一起发送出去;在接收端,对接收到的数据进行 CRC 校验,如果校验通过,则认为数据传输正确,否则要求重新传输。
- 信号同步算法:利用曼彻斯特编码实现信号的同步传输。曼彻斯特编码将每个比特位分为两个相等的间隔,在每个间隔的中间位置进行电平跳变,通过电平跳变来表示数据和同步信息。这种编码方式能够在传输数据的同时,提供同步信号,保证收发双方的时钟同步。在发射端,对语音信号和温度数据进行曼彻斯特编码后再发送;在接收端,对接收到的信号进行曼彻斯特解码,恢复出原始的数据和同步信息。
四、软件代码实现详解
4.1 开发环境与工具准备
本次项目采用 C 语言进行开发,主要是因为 C 语言具有高效、灵活以及对硬件操作的直接性等优点,非常适合嵌入式系统开发。开发平台选用 Keil MDK,它是一款专门用于开发基于 ARM 内核微控制器应用的集成开发环境,提供了丰富的工具和库函数,方便开发者进行代码编写、编译、调试等工作。
在安装 Keil MDK 时,首先从官方网站下载安装包,运行安装程序后,按照提示逐步完成安装。安装完成后,需要进行一些基本配置,如设置编译器路径、选择目标芯片型号等。以 STM32F407 为例,在 Keil MDK 中,通过 “Project” 菜单下的 “Options for Target” 选项,在 “Device” 标签页中选择对应的 STM32F407 芯片型号;在 “C/C++” 标签页中,可以设置编译选项,如优化级别、头文件路径等,确保编译器能够正确编译代码。
4.2 核心代码模块展示
- 语音信号采集代码
#include "stm32f4xx.h"
// 初始化ADC
void ADC_Init(void) {
ADC_InitTypeDef ADC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
// 使能ADC1和GPIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA, ENABLE);
// 配置PA0为模拟输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// ADC1配置
ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = DISABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfChannel = 1;
ADC_Init(ADC1, &ADC_InitStructure);
// 配置ADC1通道0
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_56Cycles);
// 使能ADC1
ADC_Cmd(ADC1, ENABLE);
// 复位校准
ADC_ResetCalibration(ADC1);
while (ADC_GetResetCalibrationStatus(ADC1));
// 开始校准
ADC_StartCalibration(ADC1);
while (ADC_GetCalibrationStatus(ADC1));
}
// 读取ADC值
uint16_t ADC_Read(void) {
// 启动转换
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
// 等待转换完成
while (!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
// 返回转换结果
return ADC_GetConversionValue(ADC1);
}
这段代码实现了语音信号的采集功能。首先在ADC_Init函数中,初始化了 ADC1,配置了 GPIOA 的 PA0 引脚为模拟输入,用于连接语音信号输入。设置 ADC1 的工作模式为独立模式,单次转换,连续转换模式使能,外部触发转换源为定时器 1 的捕获比较 1,数据右对齐,采样通道为通道 0,采样时间为 56 个周期。然后对 ADC1 进行校准,确保采集数据的准确性。在ADC_Read函数中,通过软件触发 ADC1 开始转换,等待转换完成标志位,最后返回采集到的 ADC 值,即语音信号的数字化数据。
- 语音信号处理代码
// 语音信号处理,简单的低通滤波
#define FILTER_ORDER 10
uint16_t filter_buffer[FILTER_ORDER];
uint8_t filter_index = 0;
uint16_t low_pass_filter(uint16_t input) {
// 将新数据存入缓冲区
filter_buffer[filter_index] = input;
filter_index = (filter_index + 1) % FILTER_ORDER;
// 计算缓冲区数据总和
uint32_t sum = 0;
for (uint8_t i = 0; i < FILTER_ORDER; i++) {
sum += filter_buffer[i];
}
// 返回平均值,实现低通滤波
return sum / FILTER_ORDER;
}
这段代码实现了一个简单的低通滤波器,用于对采集到的语音信号进行处理,去除高频噪声。定义了一个大小为FILTER_ORDER(这里设为 10)的缓冲区filter_buffer,用于存储历史数据。filter_index用于指示当前存储数据的位置。在low_pass_filter函数中,首先将新输入的语音信号数据存入缓冲区,然后更新filter_index。接着计算缓冲区中所有数据的总和,最后返回总和的平均值,这个平均值就是经过低通滤波后的语音信号数据,有效减少了高频噪声的干扰,提高了语音信号的质量。
- 温度数据采集与传输代码
#include "ds18b20.h"
// 初始化DS18B20
void DS18B20_Init(void) {
DS18B20_GPIO_Config();
DS18B20_Reset();
DS18B20_WriteByte(0xCC); // 跳过ROM
DS18B20_WriteByte(0x44); // 启动温度转换
}
// 读取DS18B20温度值
float DS18B20_ReadTemperature(void) {
uint8_t low, high;
uint16_t temp;
float temperature;
DS18B20_Reset();
DS18B20_WriteByte(0xCC); // 跳过ROM
DS18B20_WriteByte(0xBE); // 读取暂存器
low = DS18B20_ReadByte();
high = DS18B20_ReadByte();
temp = (high << 8) | low;
if (temp & 0x8000) { // 负数
temp = ~temp + 1;
temperature = -((float)temp * 0.0625);
} else { // 正数
temperature = (float)temp * 0.0625;
}
return temperature;
}
这段代码实现了对 DS18B20 温度传感器的初始化和温度数据的采集与读取功能。在DS18B20_Init函数中,首先配置了 DS18B20 所连接的 GPIO 口,然后进行复位操作,跳过 ROM 匹配,发送启动温度转换命令,使 DS18B20 开始进行温度转换。在DS18B20_ReadTemperature函数中,先进行复位操作,跳过 ROM 匹配,发送读取暂存器命令,然后读取 DS18B20 返回的两个字节数据,将其组合成一个 16 位的温度值。根据温度值的最高位判断是正数还是负数,再将其转换为实际的温度值(单位为摄氏度)并返回。得到的温度数据可以通过后续的数字信道传输模块发送到接收端进行显示。
4.3 代码优化与调试技巧
- 代码优化方法:在代码编写过程中,采用了多种优化方法来提高运行效率和减少内存占用。在循环中,尽量减少循环体内的计算量和函数调用次数。对于一些固定的计算,如滤波算法中的系数计算,在初始化阶段预先计算好,避免在循环中重复计算。合理使用局部变量和全局变量,对于只在函数内部使用的临时变量,定义为局部变量,这样可以在函数执行结束后释放其占用的栈空间,减少内存占用。在数据存储方面,根据数据的范围和精度选择合适的数据类型,对于一些不需要高精度的变量,如计数器等,使用uint8_t或uint16_t类型,而不是默认的int类型,以减少内存占用。
- 调试技巧:在调试过程中,遇到了一些问题并通过相应的技巧解决。在语音信号采集时,发现采集到的数据存在噪声干扰。通过使用示波器观察模拟信号输入和 ADC 输出波形,发现是电源噪声导致的。在硬件电路中增加了去耦电容,在软件中增加了软件滤波算法,有效解决了噪声问题。在温度数据传输时,出现数据传输错误的情况。通过在发送端和接收端增加 CRC 校验代码,对传输的数据进行校验,当接收端发现校验错误时,要求发送端重新发送数据,确保了温度数据传输的准确性。还利用 Keil MDK 的调试工具,如断点调试、单步执行、变量监视等功能,逐步排查代码中的逻辑错误和变量取值异常问题,提高了调试效率。
五、成果展示与总结
5.1 实际运行效果展示
经过不懈努力,最终成功实现了满足题目要求的红外光通信装置。在实际测试中,当发射端输入语音信号时,接收端能够清晰地还原出语音内容,声音无明显失真,语音信号的频率范围在 300 - 3400Hz 之间,符合题目要求。当发射端输入 800Hz 单音信号时,在 8Ω 电阻负载上,接收装置输出电压有效值达到了 0.5V,超过了题目要求的 0.4V。发射端输入信号幅度减至 0V 时,接收装置输出端噪声电压小于 0.1V,关闭静噪功能测试也顺利通过。
在数字信道传输温度方面,实时性和准确性都表现出色。发射端的温度数据能够快速准确地传输到接收端,并在接收端的显示屏上实时显示。经过多次测试,温度测量误差均控制在 2℃以内,数字信号传输时延不超过 5s,远远满足题目中不超过 10s 的要求。
中继转发节点的表现也十分稳定,能够有效地改变通信方向 90°,并延长通信距离 2m 。在中继转发过程中,语音通信质量依然保持良好,信号无明显衰减和失真。下面是装置实物图和测试过程中的波形图(此处可插入实物图和波形图),从图中可以直观地看到装置的硬件结构和信号传输情况。
5.2 经验教训总结
在整个解题过程中,积累了许多宝贵的经验,也遇到了一些问题,从中吸取了教训。在硬件设计方面,合理的元器件选型和电路布局至关重要。在选择红外收发器件时,充分考虑了其性能参数和抗干扰能力,这为信号的稳定传输奠定了基础。但在电路布局初期,由于没有充分考虑信号干扰问题,导致出现了一些信号失真的情况。后来通过优化电路板布局,增加屏蔽措施,有效解决了这个问题。
在软件编程方面,代码的规范性和可读性直接影响到开发效率和后期维护。在项目初期,由于对代码规范重视不够,导致在后期调试和功能扩展时遇到了很大困难。在后续的开发中,严格遵循代码规范,增加注释,提高了代码的可读性和可维护性。算法的优化也是关键,通过不断优化语音信号处理算法和温度数据传输算法,提高了系统的性能和实时性。
团队协作也非常重要。在项目实施过程中,团队成员之间的沟通和协作顺畅与否,直接影响项目的进度和质量。通过定期的团队会议,及时交流遇到的问题和解决方案,充分发挥每个成员的优势,提高了团队的整体效率。
5.3 对未来电子设计的展望
从 2023 电赛 F 题可以看出,电子设计领域正朝着更加智能化、集成化和多功能化的方向发展。在未来,随着人工智能、物联网等技术的不断发展,电子设计将面临更多的机遇和挑战。
在红外光通信领域,未来可能会出现更高传输速率、更远传输距离、更强抗干扰能力的通信装置。结合人工智能技术,实现通信系统的智能自适应调整,根据环境变化自动优化通信参数,提高通信质量。随着物联网的普及,红外光通信将在智能家居、工业自动化等领域发挥更大的作用,实现设备之间的互联互通。
对于电子设计爱好者和从业者来说,需要不断学习新的知识和技术,紧跟行业发展趋势。要注重培养创新思维和实践能力,勇于尝试新的设计理念和方法。通过参加各类电子设计竞赛,积累经验,提高自己的综合素质。相信在未来,电子设计领域将会涌现出更多优秀的作品和创新的技术,为推动社会发展做出更大的贡献。