图5 单片机最小系统
3.6 继电器驱动电路
本开关电路使用的是由继电器为负载的继电器驱动电路。
运算放大器的同相输入端CON13与单片机相连,单片机I/O口输出电流经过电压跟随器进行放大以提高电路的带负载能力,使电流能够驱动电路中的三极管,由于电流比较大所以可能会烧坏三极管,因此需要加上一个能够限流的电阻R12来保护三极管,三极管在本电路中的功能是作为开关来驱动继电器进行工作的。
当开关的负载为感性负载,例如是电动机或者继电器等感性负载时,在晶体管进入截止状态时截断会在负载上产生电流,由楞次定律可以分析出此时会产生感应电动势。这时电路中产生的电压会非常大。为了防止这种电压击穿晶体管的三极管VCBO,VCEO的两端。因此需要在继电器上并联上一个二极管来防止三极管被感应电压击穿,在继电器上并联上一个二极管能够将集电极的电位钳制在(VCC+0.5)V左右。继电器驱动电路如图所示:
图6继电器驱动电路
4.系统软件设计
本设计采用了C语言进行编程,C语言是目前编程领域中最有影响力的一种程序设计语言,它具汇编语言等许多高级语言功能特点。C语言的运算速度快、编译效率高、有良好的可移植性的特点很快得到了普遍的认可,它适合于各种操作系统和不同机型,而且可以实现对硬件系统的直接控制[9]。C语言是一种有顶向下结构化程序设计的结构化程序设计语言。此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。因此使用C语言进行程序的设计已经为软件开发的一个主流。
4.1程序流程图
整个系统的功能是由硬件电路配合软件来实现的,因此软件部分的设计非常重要。
光线较亮时,采用光敏电阻把外界光亮程度转换成相应的电压值,然后通过电压比较后给单片机输入数字信号。在光线较暗时,负载电路进行声音检测。用声音传感器将声音信号转换成电信号,从而推动触发工作。当声强达到一定程度时使得灯泡自动点亮,经过内部设定的时间后,灯泡自动熄灭。
在延时部分采用单片机内部定时器从而实现不同时间的定时,并根据场所及使用人群的不同通过设置单片机引脚的状态来设置不同的延时时间值,单片机通过继电器控制照明设备的打开或者关闭。
本系统工作过程是开始时光控模块对光信号进行检测,如果未达到设定的光线强度重新进行检测,如果达到光线强度,声控模块对声音信号进行检测,如果没有声音信号输入,继续进行声音信号检测,如果有声音信号输入,控制电路对灯光电路进行控制,灯光亮一定时间后,结束整个过程。对以上过程分析后,其流程图如图7所示:
图7 程序流程图
4.2主程序设计
根据设计任务的要求,采用C语言编制程序的过程称为程序设计。C语言程序设计的步骤:明确设计的任务要求,提出注意的问题,确定解决问题的办法;根据设计的思路,编制程序流程图;编制源程序:进一步合理分配存器单元和了解I/O口地址,按功能设计程序,明确各程序之间的相互关系,用注释行说明程序,便于阅读和修改调试程序;在计算机上用仿真软件调试;程序优化,根据各程序关系进一步优化源程序。
5.系统仿真与调试
光控部分:经过两级放大的声音信号,开始是直接经过零比较器转变为方波,但由于两级放大存在很大的噪声,导致输出端是一条直线,没有方波出现。后来在经过零比较器的输出端加了一个电容,通过电容把噪声所产生的直流电压去掉,但不能被单片机所识别,因此有加上了电压跟随器,最终满足要求。但比较麻烦,最后将过零比较器与电压跟随直接改为迟滞比较器。 51单片机的声光控智能开关设计+源代码+仿真图(4):http://www.youerw.com/zidonghua/lunwen_1592.html