精选单片机设计与制作30例(第2版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-10-05 15:26:45

点击下载

作者:《无线电》编辑部 编

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

精选单片机设计与制作30例(第2版)

精选单片机设计与制作30例(第2版)试读:

前言

电子制作项目向来都是电子爱好者、大中专学校电子专业师生的最爱。《无线电》杂志自1955年创刊以来,历经近60年、出版600余期,刊登了大量知识性、趣味性、可操作性俱佳的无线电制作文章,伴随着一代又一代无线电爱好者成长,拥有了一批又一批无线电和电子技术的粉丝。当代很多从事电子技术工作的专家、教授都出自当年的青少年无线电爱好者。有的无线电爱好者虽然没有从事电子技术专业工作,但他们能把自己的专长运用到工作中,使电子技术在其他领域得到了广泛的应用和发展。《无线电》杂志为自己在“科普、创新、实作、分享”当中不懈努力、得到众多粉丝认可而感到欣慰。

电子科学技术的发展是一个国家科学技术进步的重要标志之一。普及无线电和电子科学技术既是国家科学技术发展的需要,也是培养新世纪科技人才的需要,更是《无线电》杂志义不容辞的使命。为此,我们适时地把《无线电》杂志上介绍过的、优秀的制作类文章,认真精选汇编成书,以方便广大读者,延伸《无线电》杂志的科普服务功能。

2001年,我们汇编出版了第一本《无线电制作精汇》,精选汇集了《无线电》杂志发表的7大类382个制作项目。2005年汇编出版了《无线电制作精汇(2)》,精选汇集了第一本《无线电制作精汇》以后《无线电》杂志发表的8大类200个制作项目。这些书出版以来一直受到读者的欢迎并不断重印。

应广大读者要求,我们汇编了这套“《无线电》精汇”系列图书,内容取自《无线电制作精汇(2)》以后、特别是近年来《无线电》杂志发表的优秀制作类文章。既有传统的经典无线电与电子制作,又有体现时代特征的单片机应用开发制作,以及新世纪创意迸发的开源制作项目。这些项目既可以用于业余和课外电子制作活动,又能用于改进家用电器的功能,还可以用于开发电子产品。“《无线电》精汇”系列图书内容丰富、信息量大、涵盖技术领域宽广、资料齐全、实用性强,是广大电子技术人员、科研人员、无线电爱好者的重要参考手册,也是大中专学校学生开展电子科技实践活动的得力指导书籍。《无线电》编辑部

第一章 遥控与自动控制

1 红外感应自动移门的设计

文:周兴华

红外感应自动移门无需人工干预,全自动运行,运转时平稳、安静。其高可靠性使得它适用于许多场合,是方便和舒适的理想产品。

红外感应自动移门由以下7部分构成。(1)主控制器:它是自动感应门的指挥中心,通过内部编有指令程序的单片机,发出相应指令,指挥电机或电锁类系统工作。人们还可以调整自动感应门门扇的开启速度、开启幅度等参数。(2)感应探测器:可以采用红外、激光或超声波等探测器。目前主要采用红外探测器,负责采集外部信号,如同人们的眼睛。当有移动物体进入它的工作范围时,它就给主控制器一个启动信号。(3)动力电机:提供开门与关门的主动力,控制自动感应门门扇加速或减速运行。(4)门扇吊具走轮系统:用于吊挂活动门扇,同时,在动力牵引下带动门扇运行。(5)门扇行进轨道:就像火车的铁轨,约束门扇的吊具走轮系统,使门扇按特定方向行进。(6)同步皮带(或三角皮带):这是用于传输电机所产生的动力,牵引门扇吊具走轮系统。目前大部分产品使用同步皮带。(7)下部导向系统:这是门扇下部的导向与定位装置,防止门扇在运行时前后摆动。

1.1 工作过程

上电后,红外感应自动移门先进行初始化工作:以学习速度缓慢开门,撞墙后停下,并清除长度计数器。然后,以学习速度缓慢关门,门关拢后停下,将测得的正确行程(开门或关门长度)存入单片机的EEPROM,从而进入待机状态。

在待机状态下,如果红外感应探测器探测到有人进入,便输出一个启动信号给主控制器。主控器得到此信号后,控制电机运行,同时监控电机转数(开门长度),以便控制电机在什么时候加速、什么时候匀速、什么时候减速运行。电机得到一定运行电流后,正向运行,将动力传给同步带,再由同步带将动力传给吊具系统,使门扇开启,完成一次开门过程。

自动感应门扇开启后,由控制器作出判断,如较长时间没有探测到人员进出,则通知电机反向运动,关闭门扇。

一次开门与关门过程中,电机的转速变化分析如图1.1所示。

在待机状态时,操作员可以输入红外感应自动移门的相关工作参数,见表1.1。表1.1 红外感应自动移门的相关工作参数图1.1 一次开门或关门过程中,电机的转速变化

1.2 系统方案设计

红外感应自动移门的主控制器由单片机控制器、数码管显示器、直流电机推动-驱动电路、速度信号反馈电路、继电器控制电路、按键输入电路、用户状态设置电路、红外线感应探测器及电源等组成,如图1.2所示。图1.2 红外感应自动移门主控制器的构成图1.3 遮断式光电开关的电路图

为了控制开门长度,我们需要监控电机转数,因此需要取得电机的旋转脉冲。常用的元器件为光栅式编码器,为了降低成本,我们使用遮断式光电开关(见图1.3)和自制的光栅盘构成转速信号反馈组件,如图1.4所示,光栅盘上的透光孔依需要可打8~24个。

在不明显降低使用寿命的前提下,为了降低成本,可以选用优质的24V有刷电机。这样,电机的控制芯片就可使用目前很流行的LMD18200。LMD18200是美国国家半导体公司的单通道直流电机驱动芯片,在12~60V电压下,可输出高达3A的电流,可以驱动一个较大功率的直流电机或步进电机。它内部集成有续流二极管,并有一个电流检测反馈输出,过热时能自动关断。它具有一个方向引脚和一个PWM信号输入引脚,制动引脚输入支持再生制动。只要PWM信号的频率低于1kHz,芯片内部的电容就足以让电荷泵为H桥集成功放电路上的MOS场效应管提供较高的电压。当PWM信号频率高于1kHz时,引脚1和引脚2之间、引脚10和引脚11之间,需要各加一个0.01μF的电容。LMD18200的典型应用方式如图1.5所示。

1.3 电路设计

由于红外感应自动移门的主控制器电路比较复杂,我们采取了层次化设计,共分为cpu&relay、sen&in、power 三个子电路(层次),子电路之间的连接方法如图1.6所示。

1.3.1 cpu&relay 子电路

cpu&relay子电路如图1.7所示。单片机控制器IC101是整个系统的核心,负责整个红外感应自动移门的运行,这里使用功能强大、高性价比的ATmega16L,有效利用了它的片上资源。IC102为3位的数码管显示器,用来显示按键输入。SW101~SW103为按键输入电路。JP102为调试使用的JTAG仿真口。JP101为短路所用的双排针,用于选择是否启用JTAG仿真。继电器K101、K102用于通/断驱动电机的32V电压及锁停门扇。图1.4 转速信号反馈组件示意图图1.5 LMD18200的典型应用图1.6 子电路的连接

1.3.2 sen&in 子电路

sen&in子电路如图1.8所示。IC201为高速光电耦合器,它将直流电机旋转编码器输出的15V脉冲信号转换为5V脉冲,送入单片机处理。JP202、JP203连接到用户状态设置面板上。用户状态设置面板由两把钥匙控制,其中一把钥匙控制锁停门扇,另一把钥匙控制自动移门的8种工作状态。IC202~IC205为光电耦合器。门外侧的红外感应探测器1的输出信号加到JP203的1号脚,门内侧的红外感应探测器2的输出信号加到JP202的6号脚。红外感应探测器的作用是探测是否有人靠近自动移门,一旦有人靠近,会输出一个低电平。IC206为美国国家半导体公司生产的直流电机专用推动电路LMD18200,单片机发出的调宽脉冲信号经PWM端输入,OUT1、OUT2端即输出对应的直流电机调宽推动脉冲。SACE端为刹车信号控制端,加高电平后实现直流电机的紧急刹车。FA端为正反转控制端,高电平控制电机正转,低电平控制电机反转。LMD18200的输出端扩展了以VT205~VT208为分立元件构成的直流电机桥式驱动器,功率余量大,性能稳定。R236、VT208、VT209等构成电机堵转检测电路,当检测门扇全开或全关时(这时电机产生堵转),光电耦合器IC208导通,产生一个低电平给单片机。图1.7 cpu&relay 子电路图

1.3.3 power 子电路

power子电路如图1.9所示。T301为控制变压器,次级共有4个绕组,经整流、滤波后,得到15V DC OUTPUT、12V DC OUTPUT、5V DC OUTPUT、SAMP OUTPUT 四组直流电压,供应红外感应自动移门的主控制器电路工作。其中SAMP OUTPUT目前未使用,留待将来系统升级时使用。T302为主变压器,其次级24V AC经整流、滤波后,得到32V DC供应直流电机工作。

设计完成的红外感应自动移门控制器PCB如图1.10所示。图1.8 sen&in 子电路图图1.9 power 子电路图图1.10 红外感应自动移门控制器 PCB

1.4 程序设计

控制程序采用C语言设计,使用ICC7.14C编译器编译,比较简洁易懂。限于篇幅,这里就不做具体分析了,见《无线电》杂志网站www.radio.com.cn。

1.5 保养及维护

红外感应自动移门由于受安装质量及使用环境的影响,使用过程中难免会发生问题。如果长期缺乏保养,导致自动门存在的隐患及小故障得不到及时处理,将会由小故障变成大故障,最终可能导致自动门的瘫痪,因此用户平时需要定期进行以下项目的保养工作。(1)清洁机箱内部的油污、灰尘。(2)检查自动门各种部件的磨损情况,检查自动门的支位偏差及螺丝松紧情况。(3)检查皮带的松紧情况。(4)检查控制器对电机输出、开关门宽度、速度、制动等状态是否正常。(5)检查电压参数是否正常。(6)维修、更换损坏的部件。

2 通过手势控制的体感音响

文:汤志强

在一些科幻电影中,我们经常能看到人们用手指在空中划动几下就可以控制一台机器。现在我要介绍一款音响,它不是一台普通的音响,而是一款能感知手势的音响。没有开关,没有按键,甚至连一个音量控制旋钮都没有,完全通过探测你的手势来实现开/关机、音量的增/减等操作。

你一定想知道它是怎么工作的,原理其实很简单,就是使用传感器来测量手与机器的距离,根据不同的距离来控制音响,整个系统的构成如图2.1所示。当然这是一维探测,如果有两个传感器水平放置,通过计算两个传感器与手的距离差就可以进行二维控制。图2.1 体感音响的系统构成

2.1 材料准备

2.1.1 测距传感器

目前市面上比较流行的测距方法有3种:无线电测距(也就是常说的雷达)、激光测距和超声波测距。无线电测距在这里显然不行,我们的测距探头要求达到毫米级的精度,而且长时间的电磁辐射会对身体造成伤害。至于激光测距,探头通常造价不菲,另外过强的激光束可能伤害到眼睛。因此,最合适的要数超声波测距了。超声波只是发射出听不见的声音,精度可以保证,还存在盲区小的优点,不会发生手晃动一下,传感器就失去目标的现象。

为了简化硬件设计,最好购买现成的模块,实物如图2.2所示。图2.2 超声波测距模块

2.1.2 中央控制器

过去,51内核的单片机牢牢地占据着微控制器市场,直到现在也是初学者入门嵌入式系统的绝佳选择。然而任何事物都有一个生命周期,51内核的“先天不足”越来越明显。CISC的复杂架构使芯片门数增加,从而导致功耗高,时钟频率难以提高。RAM、ROM容量普遍偏小,使其很难运行嵌入式实时操作系统,导致研发周期加长。从目前的形势来看,以ARM公司Coretex-M3为内核的STM32系列微控制器最合适不过了。以STM32F103RBT6芯片为例,仅十余元的价格,就带来很多令人兴奋的配置:最高72MHz的时钟频率,带有2USB2.0、IC、USART、SPI、IIS、CAN等接口,拥有128KB的片内Flash、20KB的RAM,拥有49个I/O口(GPIO)、8个定时器,20mA的灌电流直接驱动LED……最主要的是,可以运行μC/OS-II等流行的嵌入式操作系统。其资料也相当齐全,在网上可以找到很多开发板,有的不但附赠很多源代码,甚至还提供视频教程、配套书籍等。因此,不管你是老手还是新手,都是很值得一学的。

为了节约电路板面积、提高性能,目前大部分芯片都采用了贴片封装。这或许会给手工焊接的质量提出更高的要求,不过购买最小系统模块也是不错的选择,虽然稍微贵点,但是硬件性能能得到保证,使我们不用总是做一些重复性的劳动,而是把精力集中在软件的编写上。已经包含最小系统的RBT6模块如图2.3所示。图2.3 包含最小系统的RBT6 模块

2.1.3 放大器与数字音量电位器

同样,为了简化硬件,放大器仍用现成的模块,如图2.4所示。现在的音频放大器模块种类很多,具体规格就要看你自己的喜好了。我选用的是一款功放芯片为TEA2025B的3W双声道模块,其增益可通过微调电阻调节,+5~+12V供电,用来做电脑的桌面音箱已经足够了。

至于音量调节电路,就需要自己动手制作了。我选用FM62429作为音量调节模块的核心,完成后的实物如图2.5所示。其制作过程我会在后面详细介绍。图2.4 基于 TEA2025B的放大器模块图2.5 自制的音量调节电路

2.1.4 其他

另外还需要LED若干、万用板2片、一些常用的接插件、线材以及焊接工具等,具体就不多说啦,相信DIY爱好者一定早有准备。

2.2 软件:前后台还是操作系统 ?

在我学习μC/OS-II嵌入式实时操作系统时,看到过一句话,大致是这样的:当你学会使用操作系统,就再也不想回到前后台的开发方式。这不禁让我想起当初学汇编和C语言时,一开始总是在想,学会了汇编是不是还有必要学C语言,但当我学会了C语言,就再也不想转回汇编语言开发程序。使用操作系统到底有多少优点,我不想多说,这需要自己去实践。我想说的是,有很多知识,我们并没有意识到是需要的,直到我们学会了并且应用了。

常用的嵌入式操作系统有很多,比如大名鼎鼎的VxWorks、当前手机使用最多的Android,以及通过美国航空管理局认证,已经应用在“好奇”号火星车的实时内核μC/OS-II等。在这里我使用μC/OS-II,主要考虑到它源代码开放、结构简单、在国内比较流行,而且有大量的学习资源及代码。图2.6 嵌入式软件系统的基本模型

嵌入式软件系统的基本模型如图2.6所示。当然,并不是所有软件系统都完全遵循这一模型。然而对于大多数嵌入式设备来说,采用这种层次结构来开发整个系统的软件,具有很强的可操作性和可维护性。

2.3 软件原理

2.3.1 μC/OS-II 基于任务(task)的软件设计方法

简单单片机系统如图2.7所示,这种软件设计方法将所有代码放在一起,代码层次概念不清晰,且功能简单,因此仅适用于小型系统。

μC/OS-II操作系统下基于任务的软件设计方法则不同。基于操作系统的软件开发抛开了对硬件资源的管理,而将硬件资源的管理交给操作系统,这使得代码的层次关系很清晰。同时,对某个任务的响应时间可以由操作系统控制,从而提高程序的执行效率。图2.7 简单单片机系统

2.3.2 控制方法

在讲代码之前,我们要先明白让程序干些什么。其实我们要实现的功能很简单——开机、音量增、音量减,但是要知道,探测器探测的距离不一定总是到手的距离,它本身并不具备人手识别的功能,只是探测离它最近的物体的距离。也许你在走路的时候会无意间触发其控制程序,出现不想要的结果。因此我们就要有一个“距离开关”,只有达到特定的距离才能被打开,从而使控制有效。

在本程序中,我采用下限距离法和LED渐亮指示法。先设定一个下限距离,比如5cm。当探测的距离大于或等于5cm时,不进行任何动作;当探测的距离小于5cm时,第一个LED由灭渐渐变亮,此过程大约持续2s,如果在这2s内,探测的距离一直小于5cm,那么就打开电源或音量控制开关(流程图见图2.8)。图2.8 流程图

之所以这样,是因为如果音响放在桌面上,它离桌面边缘通常会有一定的距离,身体自然会大于这个距离,这样便避免了测错目标。加上2s的渐亮延时是因为手可能会在不经意间进入其临界距离,由于声音传播的速度太快,如果不加延时,便会产生误动作。这就像我们设计键盘扫描程序一样。

图2.8所示的流程只是一个思路,实际的代码是分在不同的任务中,在后面我会详细讲解。另外,音量控制是这样的:有5个LED用来显示由近及远5个不同的距离。超声波测距模块的有效距离为30cm,这样我们可以把距离分成6份,每份5cm,每接近5cm,点亮一个灯。如果距离大于30cm,则认为音量设定完毕。

实际操作时是这样的:假如希望音量衰减为10dB,而当手移动至第二个灯亮时即为音量衰减到10dB,这时可以将手水平移动到探测距离之外的盲区,会关闭音量控制开关,而一直保留10dB音量,LED灯也会全部熄灭。

2.3.3 体感音响的软件部分

整个软件由10个文件夹、29个C源代码文件组成,如图2.9所示。不过不用害怕,有很多都是操作系统代码,没必要理解每一行程序,只需要知道重要函数的用法即可。真正需要自己写的代码,其实只有iCode文件夹中7个与硬件相关的C语言驱动程序以及APP文件夹中名为app. c的应用程序。其他的代码很少需要修改甚至不用修改。图2.9 整个软件由10个文件夹、29个C源代码文件组成

重要部分在app.c文件中,此文件有启动操作系统的main函数,各个任务的建立及运行函数,如图2.10所示。在我们自己编写的所有代码中,有5个文件是操作芯片的外部设备的:VoiceVolume.c控制数字音量电位器,Capture.c控制雷达模块,Led.c控制距离指示LED,pwm.c利用脉宽调制控制LED亮度、启动电源及音量控制开关。另外还有sys.c和timer.c,这两个文件主要是对芯片内部的配置,比如配置中断向量表、定时器等。在实际调用这些代码时,通常会建立与.c文件同名的.h文件。.h文件包含函数的声明、全局变量的声明。在调用的时候,也是用#include命令包含.h文件的。图2.10 app.c 文件部分代码解释

μC/OS-II是基于任务的,每个任务都有唯一的优先级。优先级不但代表了这个任务优先运行的程度,还是任务的标识。在μC/OS-II中,优先级的数值越小,其优先程度越大。

一个任务的形式通常如下:

static void任务名 (void *p_arg){

p_arg= p_arg;//避免警告

while(1){

用户代码…… }

OSTimeDlyHMSM(0,0,0,10);

}

每个任务都必须有一个死循环,在循环的末尾会有一个延时函数。当一个任务进入延时函数后,此任务便由运行态转为挂起,从而让优先级次低于它的任务执行。虽然从微观角度看,这些程序仍然是顺序执行的,但由于每一任务的用户代码执行得非常快,因此看起来像是同时运行。

p_arg为任务函数的参数,如果不使用,编译器会发出警告。因为我们用不到它,又为避免难看的(但不影响程序正常运行)警告所以会加上“p_arg= p_arg;”。

任务执行时,有时需要进行任务间通信。μC/OS-II支持信号量、邮箱和消息队列。在这里,我们要将AppRader任务计算的距离值传给LED指示任务AppLedIndicate、亮度调节任务AppPWM以及音量控制任务AppVoiceControl,使用邮箱来传递。我们用OSMboxPend函数阻塞式读取数据,也就是说,只要没有收到数据,此函数所在的任务就一直处于挂起状态。

2.3.4 重要代码详解

为了更好地说明程序的工作原理,请看如下代码。

首先是函数及变量的声明:

#define Task_ControlVoice_PRIO 8

#define VoiceTASK_STK_SIZE 512

OS_STK VoiceStk[VoiceTASK_STK_SIZE];

static void AppVoiceControl(void *p_arg);

#define Task_Rader_PRIO 5

#define RaderTASK_STK_SIZE 512

OS_STK RaderStk[RaderTASK_STK_SIZE];

static void AppRader(void *p_arg);

///////LED indicate

#define Task_LedIndicate_PRIO

#define LedIndicate_STK_SIZE 512

①OS_STK LedIndicateStk[LedIndicate_STK_SIZE];

static void AppLedIndicate(void *p_arg);

/////// PWM Control LED

#define Task_PWM_PRIO 7 //6

#define PWM_STK_SIZE 512

OS_STK PWM_IndicateStk[PWM_STK_SIZE];

static void AppPWM(void *p_arg);

/////////Power control

//#define Task_PowerControl_PRIO 9

//#define PowerControl_STK_SIZE 256

//OS_STK PowerControlStk[PWM_STK_SIZE];

//static void AppPowerControl(void *p_arg);

②OS_EVENT *pmailDistance;

③typedef enum {PowerOff=0,PowerOn=1,VoiceOff=0,VoiceOn=1}eStatues;

int gviPowerStatue=0;//gvi means:global volatile int

int gviVoiceStatue=0;

①为了进行任务调度,每个任务都需要一定的堆栈空间。我们用OS_STK,它实际上就是一个结构体。在这里我们将堆栈空间设为512字节。

②在使用邮箱之前,我们先要进行变量的声明。

③共用体eStatues用来指示电源和音量的开关,1表示开,0表示关。

然后进入main函数,初始化芯片、操作系统,启动内核等。

int main(void)

CPU_IntDis();//禁止CPU中断

OSInit();//UCOS初始化

①BSP_Init();//硬件平台初始化

②OSTaskCreate((void (*) (void *)) App_TaskStart, // 建立主任务

(void *) 0, (OS_STK *) &App_TaskStartStk[APP_TASK_START_STK_SIZE - 1],

(INT8U) APP_TASK_START_PRIO);

OSTimeSet(0);

OSStart(); //启动内核

return (0); }

①对芯片正常运行进行初始化,比如将内核时钟调节至72MHz,设置GPIO端口、中断优先级、波特率,以及开启1号串口。

②在这里我们建立了一个主任务 App_TaskStart。其实我们可以将所有的任务都放在 main函数中建立,但是为了看起来简洁,我们将其他任务放在App_TaskStart中建立。

此后是其他任务的建立:

static void App_TaskStart(void* p_arg)

{ (void) p_arg;

①OS_CPU_SysTickInit();//初始化ucos时钟节拍

#if (OS_TASK_STAT_EN > 0) //使能ucos的统计任务

OSStatInit(); //----统计任务初始化函数

#endif

App_TaskCreate();//建立其他的任务

②while (1) //1秒一次循环

{ OSTimeDlyHMSM(0, 0,1, 0); }

}

static void App_TaskCreate(void)

{ ///////////创建任务

OSTaskCreate(AppVoiceControl,NULL,//数字音量电位器调节音量任务

(OS_STK*)&VoiceStk[VoiceTASK_STK_SIZE-1],Task_ControlVoice_PRIO);

OSTaskCreate(AppRader,NULL, //超声波测距模块任务

(OS_STK*)&RaderStk[RaderTASK_STK_SIZE-1],Task_Rader_PRIO);

OSTaskCreate(AppLedIndicate,NULL,//LED指示灯任务

(OS_STK*)&LedIndicateStk[LedIndicate_STK_SIZE-1],Task_LedIndicate_PRIO);

OSTaskCreate(AppPWM,NULL, //PWM控制LED亮度任务

(OS_STK*)&PWM_IndicateStk[PWM_STK_SIZE-1],Task_PWM_PRIO);

pmailDistance=OSMboxCreate(NULL); //////////////// 创建邮箱

}

①如果操作系统要正常进行任务调度等工作,就必须提供一个稳定的时钟滴答。以前我们经常用芯片的Timer,现在我们有了更方便的定时器——SysTick Timer。此 Timer 直接建在Coretex-M3内部,与内核共用一条时钟信号,是专门为加入操作系统而生的。

②实际上App_TaskStart任务只需运行一次,不能不断地创建任务,因此才加入一条循环程序,并且每秒运行一次。

至于任务间如何通信、各任务如何工作,由于代码量比较大,就不列出来了,其工作流程参照图2.8可以理解。

2.4 硬件原理与制作过程

2.4.1 音量控制模块

我们以FM62429作为音量控制模块的核心器件,其原理图如图2.11所示。

要控制 FM62429,我们需要两根线:数据线(DATA)和时钟线(CLOCK)。其时序如图2.12所示。数据位有10位,如图2.13所示,其中D0和D1位为声道选择位。当D1为0时,双通道同时修改。当D1为1时,若D0为0,只修改通道1;若D0为1,只修改通道2。D2~D10为音量控制位,因为音量衰减与数据值递增无关,因此只能查阅其数据手册来获得数据与音量的关系。图2.11 FM62429 原理图图2.12 FM62429的时序

最后介绍一下制作时需要注意的地方。从原理图可见,并没有几个元器件,因此制作难度并不大,但是要特别注意干扰。因为在音量控制级上只要有很小的干扰,经过放大器的放大后,就会发出很大的噪声。首先要过滤来自电源的干扰,在这里我用了大容量电解电容和小瓷片电容并联的方式。另外还要注意线路的布局,如图2.14所示。除了要看起来美观、有序外,还要注意模拟信号线要尽量短。最后,由于我们采用模块化的设计,模块之间的模拟信号连线最好不要用普通的杜邦线,而是使用3芯屏蔽导线。图2.13 FM62429的数据位图2.14 线路的布局

2.4.2 超声波传感器

我使用的是深圳捷深公司设计的HR40超声波模块(见图2.2)。它共有4根引脚:VCC为5V电源,GND为地线,TRIG为触发控制信号输入,ECHO为回响信号输出。

其基本工作原理如下:用TRIG触发测距,保持最少10μs的高电平信号。模块自动发送8个40kHz的方波,检测是否有信号返回。若有信号返回,则通过I/O口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。距离=(高电平时间×声速)/2。

由于我们测的距离比较近,在实际编程中,以毫米为单位。又因为芯片定时计数器的捕获时钟设为1ms,这样,只要将测到的时间值乘以0.17即可。

2.4.3 其他

功率放大模块可以自制,也可以购买现成的,不过最好买单电源供电的,这样电平匹配会简单点。最小系统板选用雁凌YL-8。各个模块的硬件连接方法如图2.15所示。图2.15 各个模块的硬件连接方法

2.4.4 组装

外壳可以购买现成的机壳,我用的是一尺寸为20cm(长)×15.5cm(宽)×6.5cm(高)的白色塑料外壳,如图2.16所示。当然,如果用金属外壳,屏蔽效果会更好。如果你没有买到合适的外壳,也可以用大一点的塑料餐盒或者纸质包装盒。

我们先要用一个大一点的万用板来连接各个模块,完成后就可以安装在机壳内了。因为外壳底部有很多螺丝孔,因此很容易固定在外壳上。在外壳背面,再用电钻钻一个孔,用来连接电源线及数据线。

最麻烦的要数固定测距模块和LED了。准备一套AB胶用来固定。因为这种外壳的前后面板可以从槽内抽出,钻孔又方便了一些。抽出前面板后,测量好超声波发射和接收元件间的距离,然后打孔。我在这里遇到一个小麻烦——最大的钻头直径为10mm,而元件的直径为20mm,因此只能用刀片来扩孔。当两个超声波探头恰好能通过孔露在外面时,就大功告成啦,如图2.17所示。然后钻LED的孔,一共有5个,因为有合适的钻头,所以这一步是很轻松的,只是要注意顺序不要接错(LED从右往左依次为LED1到LED5),其中LED1兼作电源开关和音量开关的开启指示灯。这一切工作完成后,我们就可以舒服地坐在椅子上“远程”控制我们的音响啦!图2.16 准备一个外壳来容纳部件图2.17 在前面板上固定好测距模块和LED

2.5 二维手势控制体感音响大升级

前面向大家介绍了一维方式的体感音响,它的升级版不但可以感应到手距离传感器的远近,还能探测出水平偏移(即手在音箱的左侧、右侧还是中间位置)。现在让我介绍一下它吧!

在介绍它的原理之前,我先讲一下如何使用它。

开启/关闭电源:电路板左右各有一个超声波传感器(见图2.18),准确地说,是两个接收模块。让你的手心对着电路板,然后

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载