STM32红外遥控实验(发射器和接收器)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xujiahui320582/article/details/78822050
这个实验是学院的开放实验,2个小时写完了代码,使用STM32控制器,特此记录一下,比较水,有需要的朋友可以参考一下,想要代码请加入群。欢迎加入QQ群:681976114,点击这里加群

文章来源地址:https://xujh.top/

最终的作品:

摘 要

随着社会的发展、 科技的进步以及人们生活水平的逐步提高, 各种方便于生活的遥控系统开始进入了人们的生活。 传统的遥控器采用专用的遥控编码及解码集成电路, 这种方法虽然制作简单、 容易,但由于功能键数及功能受到特定的限制,只实用于某一专用电器产品的应用, 应用范围受到限制。 而采用单片机进行遥控系统的应用设计,具有编程灵活多样、操作码个数可随便设定等优点。

本设计主要应用了STM32F103单片机作为核心,综合应用了单片机中断系统、定时器、计数器等知识,应用红外光的优点。遥控操作的不同,遥控发射器通过对红外光发射频率的控制来区别不同的操作。 遥控接收器通过对红外光接收频率的识别,判断出控制操作,来完成整个红外遥控发射、接收过程。

第一章 系统设计要求与方案论述

1.1  设计要求

1、 利用单片机实现红外编解码程序设计。

2、 驱动红外发射实现红发发射和接收。

3、 采用主从应当的方式进行数据校验。通过显示屏显示发射的数值和接收的数值。

1.2  方案论述

目前市场上一般采用的遥控编码及解码集成电路。此方案具有制作简单、容易等特点,但由于功能键数及功能受到特定的限制,只适合用某一专用电器产品的应用 ,应用范围受到限制。而采用单片机进行遥控系统的应用设计,具有编程灵活多样、 操作码个数可随意设定等优点。本单片机遥控应用系统采用红外线发射频率的不同,来识别不同的遥控功能。当我们按下某一个按键的时候,由单片机识别出该按键后,由 CPU 向接有红外发射管的端口发射一定频率的脉冲,该脉冲与 38KHz 左右的载波脉冲进行调制,然后将已调制的脉冲进行缓冲放大,激励红外发光二极管将电能转化为光能,使得红外发光二极管发射出一定频率的红外线,当接收控制系统接收到该红外光后,由单片机内定时 /计数器得到该红外光的频率,然后将该频率送往 CPU,由 CPU 对该信号进行反编码,识别出控制信号,从而对控制电路实施控制功能。完成整个遥控功能

第二章 系统总体设计

2.1 单片机红外遥控发射器设计原理

单片机红外遥控发射器主要有单片机、 行列式键盘、红外管发射电路以及单片机的一些电源、 复位、震荡子电路组成。当遥控器的某一按键被按下以后,产生外部中断,查询键盘按下的是哪一个按键,当确认按键后,控制软件启动定时器作为发射时间控制器, TIME0 作为红外线发射频率控制器, TIME0 定时溢出时中断程序使红外管接口电平反转一次, 写入定时器的初值不同, 在输出端口就得到不同的发射频率。 发射器的原理图如下所示:

2.2 单片机红外遥控接收器设计原理

单片机红外遥控接收器主要有单片机、红外遥控接收电路、状态指示电路、

控制电路以及单片机的一些外围电路组成。利用单片机中的 T0 作为红外脉冲计数器, T1 作为计数时间控制器。当电路中红外接收管接收到第一个红外脉冲时,外部中断 1 被触发,启动计数器 T0和定时器 T1。定时溢出,中断程序关闭计数器 T0,读入计数值并进行判断,确定操作对象(遥控按键)对其进行反转操作,控制电路对所控制的负载进行开或关。还可对接收电路实行上锁功能,对制电路上锁后,遥控器不能对控制电路实施遥控功能。其设计原理方框图如下 :

第三章 系统详细设计

3.1  矩阵键盘模块

通过扫描4×4键盘,将对应的数值在数码管上显示出来。GPIOF9,GPIOF6-4F分别连接列读,GPIOF3-GPIOF0分别连接行扫,GPIOA7-0分别接MSP430开发板上的P1.0-7,GPIOB0接P6.1,GPIOB1接P6.2。硬件中P3.0至P3.3。

本程序将键盘扫描模块和显示的模块都做了相应的封装,使得程序的各个模块相互独立。

键盘扫描模块采用定时器中断的方式,不需要在主函数中进行延时处理,这样使得单片机运行的效率得到提升。

3.2  发射管驱动模块

原理图如下:

NEC 码的位定义:一个脉冲对应 560us 的连续载波,一个逻辑 1 传输需要 2.25ms(560us脉冲+1680us 低电平),一个逻辑 0 的传输需要 1.125ms(560us 脉冲+560us 低电平)。

通过程序编码,将按下的按键的键值通过调制发送出去。

3.3  接收管驱动模块

NEC 码的位定义:一个脉冲对应 560us 的连续载波,一个逻辑 1 传输需要 2.25ms(560us脉冲+1680us 低电平),一个逻辑 0 的传输需要 1.125ms(560us 脉冲+560us 低电平)。而遥控接收头在收到脉冲的时候为低电平,在没有脉冲的时候为高电平,接收头端收到的信号为:逻辑 1 应该是 560us 低+1680us 高,逻辑 0 应该是 560us 低+560us 高。NEC 遥控指令的数据格式为:同步头、地址码、地址反码、控制码、控制反码。同步码由一个 9ms 的低电平和一个 4.5ms 的高电平组成,地址码、地址反码、控制码、控制反码均是8 位数据格式。按照低位在前,高位在后的顺序发送。采用反码是为了增加传输的可靠性(用于校验)。

当按下按键“1”按下时,从红外接收头端收到的波形如图所示

其地址码为 0,控制码为 168。可以看到在 100ms 之后,我们还收到了几个脉冲,这是 NEC 码规定的连发码(由 9ms 低电平+2.5m 高电平+0.56ms 低电平+97.94ms 高电平组成),如果在一帧数据发送完毕之后,按键仍然没有放开,则发射重复码,即连发码,可以通过统计连发码的次数来标记按键按下的长短/次数。利用输入捕获来测量高电平的脉宽,来解码红外遥控信号。

与MCU 的连接原理图如所示:

3.4  显示模块

显示模块采用的是OLED显示屏,OLED, 即有机发光二极管 (Organic Light-Emitting Diode),又称为有机电激光显示 (OrganicElectroluminesence Display, OELD) 。OLED 由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。

原理图如下:

4 线串口模式使用的信号线有如下几条:

CS:OLED 片选信号。

RST(RES):硬复位 OLED。

DC:命令/数据标志(0,读写命令;1,读写数据) 。

SCLK:串行时钟线。在 4 线串行模式下,D0 信号线作为串行时钟线 SCLK。

SDIN:串行数据线。在 4 线串行模式下,D1 信号线作为串行数据线 SDIN。

模块的 D2 需要悬空,其他引脚可以接到 GND。在 4 线串行模式下,只能往模块写数据而不能读数据。

在 4 线 SPI 模式下,每个数据长度均为 8 位,在 SCLK 的上升沿,数据从 SDIN 移入到SSD1306,并且是高位在前的。DC 线还是用作命令/数据的标志线。在 4 线 SPI 模式下,写操作的时序如图所示:

SSD1306 的典型初始化框图如图:

 

第四章 系统测试结果与分析

4.1 仿真波形

生成占空比为33%的脉冲

红外接收头接收到的信号

红外发射器发出的波形

4.2  结果分析

经过示波器的观察,可以发现整套系统完全满足了设计要求。

第五章 设计总结

5.1  设计存在问题及改进建议

程序方面:程序的矩阵模块采用了中断采样的方法,效果比较好,但是写的有点冗杂。

焊接:焊接工艺需要完善。

改进建议:精简程序,完善焊接。

5.2  收获与体会

这次课外实验对于我来说非常重要,充分的练习了单片机c语言的编程规则,也对一些基本的数理逻辑问题和事理逻辑问题有了更深入的体会。我以为之前做了很多的练习,现在做起来应该很容易,在整个过程中并没有遇到许多问题,整个过程我特别喜欢,因为我自己通过各种方法的尝试解决了很多问题。

猜你喜欢

转载自blog.csdn.net/xujiahui320582/article/details/78822050