制作简易红外通信装置通信工程课程设计报告

上传人:沈*** 文档编号:42358545 上传时间:2021-11-25 格式:DOC 页数:27 大小:311.50KB
返回 下载 相关 举报
制作简易红外通信装置通信工程课程设计报告_第1页
第1页 / 共27页
制作简易红外通信装置通信工程课程设计报告_第2页
第2页 / 共27页
制作简易红外通信装置通信工程课程设计报告_第3页
第3页 / 共27页
点击查看更多>>
资源描述
实训报告专业技能实训报告题 目 制作简易红外通信装置 学 院 信息科学与工程学院 专 业 通信工程 班 级 学 生 学 号 指导教师 二一四 年 一 月 六 日 目 录1 前言11.1 系统设计简要说明12 系统方案22.1方案比较与选择22.1.1 语音采集模块22.1.2 运算放大模块22.1.3 脉宽调制模块22.1.4 语音输出模块22.1.5 温度传感模块32.2 方案描述32.3 理论分析与计算32.3.1 通信原理分析32.3.2 提高转发器效率方法33 电路与程序设计43.1 总体电路图43.2 电路设计43.2.1 运算放大模块43.2.2 红外发送接收模块53.2.3 语音输出模块53.3 程序设计54 测试方案与测试结果74.1 测试方案74.2 测试数据74.3 测试结果记录75 实训结语8参 考 文 献9附录10部分源代码101 前言1.1 系统设计简要说明随着社会的发展、科技的进步以及人们生活水平的逐步提高,各种方便于生活的遥控系统开始进入了人们的生活。传统的遥控器采用专用的遥控编码及解码集成电路,这种方法虽然制作简单、容易,但由于功能键数及功能受到特定的限制,只实用于某一专用电器产品的应用,应用范围受到限制。而采用单片机进行遥控系统的应用设计,具有编程灵活多样、操作码个数可随便设定等优点。本系统设计红外光通信装置,主要由前置电路模块、脉宽调制模块、红外发送接收模块、中级转发模块和语音输出模块五部分组成。采用STM32作为主控制器进行A/D采集,脉宽调制,并控制数据传送,LM358主要作为前置电路放大器,18B20芯片感应环境温度, LM386模块进行功率放大。系统设计基本上实现了红外光通信,完成了语音信号传输的功能。STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。按性能分成两个不同的系列:STM32F103“增强型”系列和STM32F101“基本型”系列。增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是16位产品用户的最佳选择。两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品,相当于0.5mA/MHz。DS18B20,常用的温度传感器,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。2 系统方案2.1方案比较与选择2.1.1 语音采集模块方案一:采用驻极体麦克风,由于驻极体麦克风体积小、频率范围宽和价格优势的特点而广泛应用于各种声控电路中。并且输入和输出阻抗很高,所以要在这种话筒外壳内设置一个场效应管作为阻抗转换器,为此驻极体电容式话筒在工作时需要直流工作电压。方案二:采用硅微麦克风,硅微麦克风基于CMOSMEMS技术,体积更小。其一致性优于驻极体麦克风,所以MEMS麦克风特别适合高性价比的麦克风阵列应用。但硅微麦克风是一个新兴的朝阳产业,尚在发展,价格比较高。综合比较,选择方案一。2.1.2 运算放大模块方案一:LM358是内部有两个独立的、频率补偿的双运算放大器,能在很宽的电源电压范围内实现高增益,同时适用于单、双电源工作模式,在推荐的工作条件下,电源电流与电源电压无关。方案二:OP07芯片是一种双极性运算放大器,具有输入偏置电流低和开环增益高的特点,因为具有非常低的输入失调电压,不需要额外的调零措施,但OP07用单电源供电放大倍数太小,不方便使用。综合比较,基于单电源供电和经济考虑,选择方案一。 2.1.3 脉宽调制模块方案一:采用KA7500B芯片。KA7500内含两个PWM控制器,其输出端可以接成共发射极和射极跟随器两种形式,可以选择双端推挽输出或者单端推挽输出,但控制复杂,存在死角问题,且价格较高。方案二:采用STM32来编程实现脉宽调制,利用定时器将模拟信号抽样转化成数字信号。STM32有实时响应中断及中断优先级系统,具有低电压和低功耗两大优点,适合对红外收发的控制。综合比较,选择方案二。2.1.4 语音输出模块方案一:使用LM1875进行功率放大,LM1875使用2060V供电,驱动4欧或8欧的负载,具有低失真度和高品质性能,主要用于单声道40W高保真放大电路,内部具有欠压、过压、短路、热失控、瞬时音响峰值保护电路等诸多优点,因此在使用过程中不易损坏。但由于供电需求太高,电路设计达不到要求,不方便使用。方案二:使用LM386对音频信号进行功率放大,LM386是专为低损耗电源所设计的功率放大器集成电路,其增益最高可达200,且失真低,适合应用于本音频功放模块。综合比较,选择方案二。2.1.5 温度传感模块方案一:采用AD590模拟数字传感器,特别适合远程检测应用,其输出电流与绝对温度成比例,适用于150度以下温度的测量,由于模拟信号传入微处理器中还需进行模拟数字转换再处理,实现起来较为麻烦。方案二:采用18B20数字温度传感器来测量温度,18B20有独特的单线接口方式,与微处理器连接时仅需一条口线即可实现双向通讯,其测量范围55+125,符合本电路测温要求,并且单线接口方式能为微处理器节省接口。综合比较,选择方案二。2.2 方案描述通过驻极体麦克风将语音信号采集并转变成模拟信号输入到电路中,通过LM358运算放大器把信号放大到110倍之内,将信号进行偏置。同时利用18B20测试环境温度。利用STM32采集数据,并进行脉宽调制后通过红外发送管来传输信号,接收管收到信号后,进行放大、滤波、隔直处理,最后通过功放电路,实现语音输出。2.3 理论分析与计算2.3.1 通信原理分析在发送电路中将语音信号通过脉宽调制模块调制成PWM波并发送,PWM波是占空比可调的脉冲波形,即将正弦波用一系列幅值相等而宽度不相等的脉冲来代替。脉冲宽度调制内有比较器和周期锯齿波发生器,语音信号如果大于锯齿波信号,比较器输出恒定正电压值,否则输出0V。2.3.2 提高转发器效率方法用多个二极发光管一起发送,增强了发送功率,可以利用发送功率来维持中继转发器工作,提高转发器效率。因为话音信号大部分是小信号,将电路设计成没有话音信号时呈低电平,即消耗功率为零,也提高了转发器的效率。3 电路与程序设计3.1 总体电路图图3.1 总体电路图3.2 电路设计3.2.1 运算放大模块 拾音器将话音信号采集并输入到电路中,由于拾音器的电压信号较为微弱,需要将信号进行放大,经过LM358运算放大器的放大后,接入STM32,用一个LM358芯片作为跟随器减小后级的输出阻抗。图3.2 前置模块电路图3.2.2 红外发送接收模块 图3.3 红外发送接收模块3.2.3 语音输出模块 当红外接收模块将接收到的信号进行处理后,在后级再加入一路增益为200的功率放大模块来增强语音信号,根据LM386的200增益对应的标准电路(如下图)我们最终实现了合适语音输出。图3.4 语音输出模块电路图 3.3 程序设计 程序源代码见附录 图3.5 程序流程图4 测试方案与测试结果4.1 测试方案在接收装置没有静噪功能的情况下,将语音信号改为800Hz单音信号,在8电阻负载上,测量接收装置的输出电压有效值;减少发射端输入信号的幅值至0V,测量此时接收装置输出端噪声电压。4.2 测试数据在800Hz单音信号、8电阻负载的条件下,测量的接收装置输出电压为0.64V。将输入信号幅值减少至0V,测量的接收装置输出端噪声电压为0.07V。4.3 测试结果记录在800Hz单音信号、8电阻负载的条件下,测量的接收装置输出电压为0.79V,符合输出电压有效值不小于0.4V的要求;将输入信号幅值减少至0V,测量的接收装置输出端噪声电压为0.08V,符合读书不大于0.1V的要求。因此接收的语音信号无明显失真。5 实训结语经过这段时间不间断的努力,我终于完成了红外光通信设置的各项要求,利用红外发光管和红外光接收模式作为收发器件,进行定向的传输,接收到的声音没有明显的失真。通过这次实训,不仅丰富了我的理论知识,而且使我的动手实践能力得到了提高,更激发了我的创新精神。在这今后的人生道路上无疑是一笔宝贵的财富,受益匪浅。为今后的发展打下了良好的基础。 由于自身水平有限,设计中一定存在很多不足之处,敬请各位老师批评指正。最后感谢邦杰公司和学校老师给我锻炼的机会,这次难忘的经历必将使我受益终生。参 考 文 献1 丁元杰. 单片微机原理及应用M. 北京:机械工业出版社, 2006:15-88.2 蒋智勇, 戴立权. 单片微型计算机应用技术M. 沈阳:辽宁科学技术出版社, 1992:36-78. 3 张迎新等. 单片微型计算机原理、应用及接口技术M. 北京: 国防工业出版社, 2004:26-86. 4 先锋工作室. 单片机程序设计实例M. 北京:清华大学出版社,2003:32-82. 5 周航慈. 单片机应用程序设计技术M. 北京:北京航空航天大学出版社, 1992: 45-89. 6 陈爱文. 基于89C51单片机控制的红外通信设计J. 机电工程技术, 2007, 36(12):84-85. 7 张利娜, 洪显昌. 红外通信的设计与实现J. 现代电子技术,2008,4(23):87-89. 8 王建校. 51系列单片机及C51程序设计M. 北京:科学出版社, 2002:67-83. 9 张爱全. 红外线遥控的基本原理和应用范围M. 山西电子技术. 2003 6(12).40-4110苏凯, 刘国庆, 陈国平. MCS-51系列单片机原理与设计M. 冶金工业出版社. 2003.232611 于明鑫,冯文涛. MCS-51系列单片机存储容量扩展的软硬件设计J. 辽宁师专学报, 2004.10,24:233512 Craig Tombling, M TillinInnovations in LCD technologyJSynthetic Metals,2001, 6:209-214. 13 Chorng-Kuang Wang. A Dual-Loop Automatic Gain Control for Infrared Communication SystemJ. Graduate Institute of Electronics Engineering, 2010,7:126-128. 14 Newman W M, Sbroull R F. Principles of Interactive Computer GraphicsM. New York: McGraw Hill, 1979.10:10-25附录部分源代码Main.c#include "stm32f10x.h"#include "usart1.h"#include "adc.h"#include "Time_test.h"u32 flag;u32 f=0;volatile u32 time=0;volatile u32 time1=0;/* ADC1转换的电压值通过MDA方式传到SRAM */extern _IO uint16_t ADC_ConvertedValue;/* 局部变量,用于保存转换计算后的电压值*/ float ADC_ConvertedValueLocal; /* 软件延时*/void Delay(_IO uint32_t nCount) for(; nCount != 0; nCount-); int main(void) SystemInit();/* USART1 config */USART1_Config();/* enable adc1 and config adc1 to dma mode */ADC1_Init();/* TIM2 定时配置 */ TIM2_NVIC_Configuration(); TIM2_Configuration(); TIM3_NVIC_Configuration(); /* TIM2 开始计时 */START_TIME;STOP_TIME3; while (1) Time_test.c#include "Time_test.h"void TIM2_NVIC_Configuration(void) NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority =4; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); void TIM3_NVIC_Configuration(void) NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);/*TIM_Period-1000 TIM_Prescaler-71 ->中断周期为125us*/void TIM2_Configuration(void) TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE); TIM_DeInit(TIM2); TIM_TimeBaseStructure.TIM_Period=125; /* 自动重装载寄存器周期的值(计数值),中断间隔125us */ /* 累计 TIM_Period个频率后产生一个更新或者中断 */ TIM_TimeBaseStructure.TIM_Prescaler= (56 - 1);/*时钟预分频数 72M/72 */ TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; /* 采样分频 */ TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /* 向上计数模式 */ TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); TIM_ClearFlag(TIM2, TIM_FLAG_Update); /* 清除溢出中断标志 */ TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); TIM_Cmd(TIM2, DISABLE);/* 开启时钟 */ void TIM3_Configuration(u32 top) TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE); TIM_DeInit(TIM3); TIM_TimeBaseStructure.TIM_Period=top; /* 自动重装载寄存器周期的值(计数值),中断间隔125us */ /* 累计 TIM_Period个频率后产生一个更新或者中断 */ TIM_TimeBaseStructure.TIM_Prescaler=26; /* 时钟预分频数 56M/56 */ TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; /* 采样分频 */ TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /* 向上计数模式 */ TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); TIM_ClearFlag(TIM3, TIM_FLAG_Update); /* 清除溢出中断标志 */ TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); TIM_Cmd(TIM3, DISABLE);/* 开启时钟 */ usart1.c#include "usart1.h"#include "misc.h"void USART1_Config(void)GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;/* config USART1 clock */RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);/* USART1 GPIO config */* Configure USART1 Tx (PA.09) as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure USART1 Rx (PA.10) as input floating */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);/* USART1 mode config */USART_InitStructure.USART_BaudRate = 115200;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No ;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(USART1, &USART_InitStructure);USART_Cmd(USART1, ENABLE);void NVIC_Configuration(void)NVIC_InitTypeDef NVIC_InitStructure; /* Configure the NVIC Preemption Priority Bits */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);/* Enable the USARTy Interrupt */NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);/* 重定向c库函数printf到USART1 */int fputc(int ch, FILE *f)/* 将Printf内容发往串口 */USART_SendData(USART1, (unsigned char) ch);while (!(USART1->SR & USART_FLAG_TXE);return (ch);Adc.cvoid ADC1_Init(void)ADC1_GPIO_Config();ADC1_Mode_Config();SysTick.c#include "SysTick.h"static _IO u32 TimingDelay;/* 启动系统滴答定时器 SysTick */void SysTick_Init(void)/* SystemFrequency / 1000 = 56000 1ms中断一次,表示5600个时钟周期中断一次 ,其中时钟周期为1/56000 000hz * SystemFrequency / 100000 10us中断一次 * SystemFrequency / 1000000 1us中断一次 */if (SysTick_Config(SystemCoreClock/ 5000000) /* Capture error */ while (1); void Delay_us(_IO u32 nTime) TimingDelay = nTime; while(TimingDelay != 0);void TimingDelay_Decrement(void) if (TimingDelay != 0x00) TimingDelay-; - - 24 - -
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!