一 课程设计任务
1.1 设计内容及功能要求1.用步进电机控制窗帘(L298N);
- 用光敏传感器实现自动控制;
- 实现窗帘全开,全关,部分开;
- 用三个独立按键设置打开,关闭,停止方式。
本组设计的自动光控窗帘可以通过周围环境的光照变化来控制电压变化,从而控制直流电机的正转和反转。当周围光照降低到某一数值时,电机开始正转,数秒后停止。此时电机处于停止状态。当周围光照上升到某一数值时,电机开始反转,数秒后停止。这一个来回的过程就达到了自动光控窗帘的效果了。
1.2 元器件清单元器件 数量
光敏电阻 1
普通电阻 1
PCF8591 1
MCS-8051 1
L298N 1
二极管 9
直流电机 1
运算放大器 1
其他元件 若干
二 整体设计方案
2.1 设计思路本课题的设计思路是由光敏电阻与一个电阻串联构成分压电路,当光照强度改变时,光敏电阻电阻值改变,电压也会改变,由此构成了变化的输入电压信号。信号经PCF8591进行A/D转换,将信号送入单片机MCS-8051中,用来控制2个输出端的电平高低,这2个输出端与芯片L298N的输入相连,用于控制电机的正反转,这就实现了自动光控窗帘的效果了
2.2 整体框图2.3 各模块简介- 光照采集模块:由光敏电阻阻值的改变来实现输入电压的变化。
光敏电阻器又称光导管。
结构:通常由光敏层、玻璃基片和电极等组成的。
特性:无光照射时呈高阻状态;有光照射时其阻值迅速减小。
- A/D转换模块:将光敏电阻与普通电阻分压进来的电压转换成单片机需要的信号。本设计中采用PCF8591,是单片、单电源低功耗8位CMOS数据采集器,具有四个模拟输入、一个输出和一个串行I^2C总线接口。3个地址引脚A0、A1、和A2用于编程硬件地址,允许将最多8个器件连接至I^2C总接线而不需要额外硬件。器件地址、控制和数据通道通过两线双向I^2C总线传输。

a、内部结构编辑:
如图所示:
- AIN0~AIN3:模拟信号输入量。
- A0~A2:引脚地址端。
- VDD、VSS:电源端。(2.5~6V)
- SDA、SCL:I2C总线的数据线、时钟线。
- OSC:外部时钟输入端,内部时钟输出端。
- EXT:内部、外部时钟选择线,使用内部时钟时EXT接地。
- AGND:模拟信号地。
- AOUT:D/A转换输出端。
- VREF:基准电源端。
b、工作过程编辑首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平 时,输出三态门打开,转换结果的数字量输出到数据总线上。转换数据的传送A/D转换后得到的数据应及时传送给单片机进行处理。数据传送的关键问题是如何确认A/D转换的完成,因为只有确认完成后,才能进行传送。为此可采用下述三种方式。
(1)定时传送方式
对于一种A/D转换器来说,转换时间作为一项技术指标是已知的和固定的。。可据此设计一个延时子程序,A/D转换启动后即调用此子程序,延迟时间一到,转换肯定已经完成了,接着就可进行数据传送。
(2)查询方式
A/D转换芯片有表明转换完成的状态信号,因此可以用查询方式,测试EOC的状态,即可确认转换是否完成,并接着进行数据传送。
(3)中断方式
把表明转换完成的状态信号(EOC)作为中断请求信号,以中断方式进行数据传送。
不管使用上述哪种方式,只要一旦确定转换完成,即可通过指令进行数据传送。首先送出口地址并以信号有效时,OE信号即有效,把转换数据送上数据总线,供单片机接受。
单片微型计算机简称为单片机,是一种超大规模集成电路芯片,是集成CPU、RAM、ROM、I/O接口和中断系统于同一硅片上的器件。
MCS-51是标准的40引脚双列直插式集成电路芯片:
单片机口线分布:
P0:作为输入口,接收PCF8591送出的信号
P1:控制ADC0809的ALE、OE、START、OEC端口
P2:作为输出口,发送控制信号给L298N,从而控制直流电机正反转
其余Vcc、Gnd、Rst、XTAL等端口与经典电路接法相同。
l P0.0~P0.7 P0口8位双向口线(在引脚的39~32号端子)。
l P1.0~P1.7 P1口8位双向口线(在引脚的1~8号端子)。
l P2.0~P2.7 P2口8位双向口线(在引脚的21~28号端子)。
l P3.0~P3.7 P3口8位双向口线(在引脚的10~17号端子
- 电机正反转控制模块:由输入信号控制直流电机的正转和反转。
恒压恒流桥式2A驱动芯片L298N 是15 脚 Multiwatt 封装的 L298N,内部包含4信道逻辑驱动电路,是一种二相和四相步进电机的专用驱动器,可同时驱动2个二相或1个四相步进电机. 内含二个H-Bridge 的高电压、大电流双全桥式驱动器,接收标准TTL逻辑准位信号,可驱动46V、2A以下的步进电机,可以直接透过电源来调节输出电压;此芯片可直接由单片机的IO端口来提供模拟时序信号,L298N 之接脚如图所示:
L298N可接受的标准TTL逻辑电平信号Vss,Vss可接4.5~7V电压。4脚VS可接电源电压。VS电压范围VIH为+2.5~46V。输出电流可达2.5A,可驱动电感性负载。1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。L298N可驱动两个电动机,out1,out2和out3,out4之间可分别接电动机。5,7,10,12脚接输入控制电平,控制电机的正反转。
三 硬件电路设计3.1 光照采集模块硬件电路a、电路图:
b、设计原理:由光敏电阻和一个普通电阻串联构成分压电路,当周围环境的光照强度改变时光敏电阻阻值改变,从而改变了输入电压
3.2 A/D转换模块硬件电路
a、电路图:
b、设计原理:将采集的电压信号送入芯片PCF8591中,由芯片内部对数据进行锁存、译码、转换、比较等步骤,从而得到单片机MCS-8051所需要的信号。
3.3 电机正反转控制模块硬件电路a、电路图:
b、设计原理:
单片机2个输出端口连接L298N的2个输入控制端,IN1和IN2。单片机收到ADC0809的输入信号后判断此时的电压值,如果小于某一数值,输出端P2.1和P2.2此时为1和0,信号送到正反转控制芯片L298N后控制端IN1和IN2控制电机正转,数秒后停止;如果大于某一数值,输出端变为0和1,经L298N控制电机反转。
四 控制软件设计4.1 光照采集模块软件设计a、功能:用光敏电阻和一个普通电阻构成分压电路,当光照强度改变时光敏电阻阻值改变,电压改变,从而改变输入电压的大小。
b、流程图

4.2 A/D转换模块软件设计a、功能:电压输入信号送入芯片PCF8591后进行转换,将采集信号转换成单片机89C51所需要的信号。
b、流程图:
4.3 电机正反转控制模块软件设计a、功能:由单片机2个输出端口控制L298N的2个输入控制端,IN1和IN2。当IN1=1且IN2=0时控制电机正转;当IN1=0且IN2=1时控制电机反转。
b、流程图:
五 PCB图和3D效果图
总结
为期一个月的单片机课程设计结束了,在这一个月的时间里,我们为课程设计规划好了思路和流程,研究这些东西是如何结合在一起实现一个功能的,然后画好了一张完整的电路图。在做好了资料的准备后,我们就开始了忙碌的设计过程。
整个的课程设计过程是充满艰辛的,有很多能困扰我们的问题,更有些是绞尽脑汁也没有克服的,但乐趣和意义就在这之中。我发现遇到了问题要不断地想问题是从何而来的,要想的广泛,而且要多关心别人做的同类型的东西,因为可能只需要点拨一下,只要一个灵感就能联想到很多东西,问题的答案也许就在其中。
我们不仅学习到了很多单片机的知识,并且了解了AD,异步电机等程序的录入和运行,而且还暴露出来很多学习上的问题,这些问题的发现将为我们以后的学习和工作找明道路,查漏补缺为进一步学习作好准备!本次实验我们组做的课题是《智能窗帘控制系统设计》,这是一个实用性质非常强的题目。首先,它非常联系我们日常生活,每个人家里都有窗帘,有的人喜欢屋里偏暗,如果他装上了光控窗帘,则能通过光照强度来实现窗帘的自动收放功能 其次,光控窗帘是涉及到单片机、电路、信号、数学数字运算等多学科的一门综合性应用非常强的课题,这个课题的成功实践必将在一定程度上极大地激发我们在这些相关学科的学习兴趣,也会促使我们去向多学科综合应用的方面发展,这也是当今科学科技领域一个显著的特点。从这一点上来说这个课题的选取对所有参加这个课题研究的同学们来说都是一个非常好的锻炼。 其次也培养了我们每个人在对待科学问题上孜孜不倦、严谨求实的科学作风,这对我们每个人来说都是相当有益的!当然,通过做这个课题,也暴露出来了很多问题值得我们去探讨解决和克服:第一,时间利用问题。由于课题难度较大,再一个有关时间的问题就是时间利用率太低。第二,课题研究不够深刻。课题研究总是浮于表面文章,对程序对最后结果研究不够造成虽然某一块地方做的比较好但是在大脑中没有一个总体的印象,无法理论联系实际,研究成果的应用严重背离实际现实,影响使用。
我且先总结到这里。这些问题的发现,有助于提高我们在以后的工作和学习中对此类问题的认识,确保不在同一问题上再次犯错。 最后,衷心感谢黄老师给我们提供了这次难得的实训机会,给了我们这么深刻的人生体会,这对我们来说是受益终身的!
单片机源程序如下:
- #include<reg51.h>
- #define uchar unsigned char
- unsigned char flag ;
- unsigned int count;
- sbit start=P1^5;
- sbit oe=P1^6;
- sbit eoc=P1^7;
- sbit in1=P1^1;
- sbit in2=P2^2;
- int rx;
- int i;
- float v;
- uchar d;
- int abc();
- void display();
- main()
- {
- in1=0;
- in2=0;0;
- start =0;
- oe =0;
- IE=0; //关闭所有中断
- while(1)
- {
- d=adc(); //调用A/D转换函数
- display(); //控制输出信号
- }
- }
- int adc()
- {
- start =1;
- for(i=0;i<200;i++)
- start=0;
- while(eoc==0) //等待转换结束
- oe=1; //转换结束,设置读允许
- d=P0; //读采集信号值
- oe=0; //关闭读允许
- return d; //返回电压值
- }
- void display()
- {
- if(d<105) //输入电阻小于2V
- {
- in1=1;
- in2=0; //直流电机正转
- if(d<240) //输入电压大于4.6V
- {in1=0;in2=1;} //直流电机反转
- }
- else
- {in1=0;
- in2=0;} //正常状态直流电机停止
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
单片机智能窗帘.rar
(1.78 MB, 下载次数: 184)