历史上的今天
返回首页

历史上的今天

今天是:2024年10月19日(星期六)

正在发生

2019年10月19日 | 基于51单片机的智能晾衣架设计

2019-10-19 来源:51hei

在Proteus中通过模拟温湿度,外接温湿度值,将模拟到的数据进行采集与A/D转换,显示到LCD液晶并控制后级电路进行反馈,完成晾衣架的功能。


仿真原理图如下

 

智能晾衣架

第三章:硬件单元电路

经过上述分析明确了本次设计的主要目标,为了实现晾衣自身能够完成对外界数据的采集与分析,集成控制环节我们采用了ATMEL公司生产的AT89C52单片机,与市面上的其他嵌入式控制单元相比较在体积与功耗方面都相当出色。此次设计主要突破在于设计合理的控制电路单元,同时结合采用的主控编写高质量的源码并使系统在实际与应用中能够发挥出色的稳定性和参考价值。本次将围绕主控单元设计合理的电路,结合SHT11温湿度采集单元、感光原件单元、LCD显示单元、模式控制单元使晾衣架能够得到外界的实时数据并作出相应的调整。在设定合适的温湿度及感光度的条件下能够自动控制电机驱动滑杆实现自动量晒与回收衣物,结合光线角度进行上下左右调整。主要框架如下图所示:



3.1主控单元设计

              为了使智能晾衣架在使用时满足嵌入式系统功耗、抗干扰、适用空间等要求,设计之初除了上述因素也考虑到成本因素。通过比较我们选择了51系列中的AT89C52芯片作为主控制单元。无论是功耗还是处理速度上都有着不错的表现,与CONTEX-M3系列单片机相比较处理上稍微慢点,但本次设计对分时处理的要求不是特别高,同时52系列具有简单高效的指令集和,大大减少设计难度,结合SHT11与ADC0804精准的完成数采集与电机控制。


我们常见的主控封装形式有40脚的DIP直插的也有PQFP类型的贴片封装,在proteus中仿真的时候选择DIP类型,方便自主设计与搭建外围电路单元。从产品角度和制版工艺上面来讲贴片能够节省空间。这次采用的主控制芯片是8位CMOS工艺的单片机,内部有八位CPU和FlASH,在工控领域有着广泛的用途,脱机运行性能稳定,相比较51有着更大的存储和定时器资源,其主要内部参数与引脚分布见下图:

指令集和

兼容MCS-51产品

FLASH

8个字节重复擦写

擦写周期

1000次重复擦写

静态操作

0HZ –- 24MHZ

编程I/O

32个可编程I/O

功耗模式

低功耗和掉电模式

中断源个数

8个中断控制单元

定时器个数

3个16位定时/计数器


表:3.1.1主要参数

图:3.1.2双列直插型                                             图:3.1.3 PLCC贴片型

              由上图可以直接看到引脚标识与编号,左下角的GND与右上角的VCC需要外接合适的工作电压,一般采用5V工作电压。两侧的P0-P3 I/O口是可编程输入输出管脚,一组有四个,一共32个,可以看到I/O资源挺丰富且适合驱动多种外设。最小控制单元自工作的时候需要外部晶振提供合适的工作频率同时为了防止程序跑飞或者陷入死循环还要提供合理的复位单元。通俗点好比人要正常工作的需要心脏提供合适的脉搏跳动,这里我们选的是11.529MHZ的外部无源晶振,在外围接上两个22PF的非极性滤波电容连接到18、19管脚,为最小系统提供合适的工作频率。复位环节通过分压电阻与按键开关为9管脚提供复位信号,10uf的极性电容较减少按动过程中的抖动信号,发送有效地高电平信号可以让单片机重新加载程序,从头开始跑。此次仿真过程中由于I/O分配的原因采用了两片主控,另外需要注意的是P3口除了通用的管脚功能外,还有拓展的第二功能,配置其引脚功能能够实现定时/计数功能以及外部中断资源,在实际设计过程中有着非常多的用途。下面是最小控制单元的原理图以及P3管脚工能分布图:,

图:3.1.3最小系统                                图:3.1.4 P3口复用

3.2LCD液晶显示            


主控单元在上电之后会对液晶屏幕进行初始化,直观的显示出各项参数,结合独立按键显示控制模式,给用户提供良好的人机交互。常见的显示屏幕有很多尺寸,市面上的电容、电阻屏也数不胜数,这里我们选用户LCD1602作为液晶显示,同样的考虑到功耗与显示区间等因素。1602有着八个数据端口,体积很小亮度饱和能够直观简单的显示ASCII码与字符,与单片机的接口连接简单,控制屏幕上的液晶分子显示出字符,不同的电压控制不同区域


上下两行能够分别显示16个字符,不具备汉字现实的能力,这点上不如12864,但完成设计的时候能够带来更稳定的显示,较强的抗干扰能力。实际硬件分为有无背光源,带背光的厚度稍微大点,会有更好的显示效果且调节背光源之间的滑变能够显示效果。常用的有16个管脚,分为电源区、指令控制区、数据区、背光区。实际外观尺寸见下图:


图:3.2.1 LDC液晶尺寸图

可以看到上图中有两行显示区域,左上角有1-16个外围引脚可以用,用来驱动屏幕显示想要的数据与字符,先简单说下管脚分布和功能:1管脚与2管脚用来接工作电源;3管脚通过VCC与分压电阻控制屏幕的对比度且会随着电压的变化而增加减少,对比度过高会出现阴影不清晰等现象,因此需要条调节合适的对比度以满足正常显示,可以外接10K电阻进行调整;4管脚RS控制端用来告诉模块当前是发送/读写数据还是指令,在实际现实过程中参与控制时序,高的电平信号控制数据控制寄存器、低电平信号控制指令寄存器;5管脚为W/R读写控制端,与4管脚结合起来可以实现数据/命令&读/写功能;6管脚作为EN使能控制端用来控制液晶的工作状态;7管脚到14管脚为数据线,用来读写数据;15与16管脚控制背光,根据实际情况考虑是否需要接入电路中。


对控制端口有一定的了解后,还需要掌握读写时序图从而根据时序去设计软件驱动,这里以写数据时序图为例子说下原理过程:

图3.2.2 写数据时序


上图中RS决定当前是要启用命令寄存器还是数据寄存器,写数据的过程中RS要保持高电平信号,写命令的过程要保持低电平信号。当往液晶上写字符的时候,首先要将RS拉低,R/W保持低电频信号,随后有个上升沿将RS拉成高电位,也就是上图RS对应的第二条信号线。图中tsp_x、tR、tHD_x等间距在设计过程中都可以采用延时实现时序同步。我们可以看到valid data是有效地数据段,只有当RS = 1、R/W = 0、DB0-DB7发送数据、EN使能等状态都满足的时候才能实现数据从I/O写入到液晶。这种时序图在液晶操作与与不同工控领域的传感器数据采集中经常会用到,因此软件设计过程中要严格遵守时序从而获得准确有效地数据值。关于读写命令及读写数据的操作时序就不一一说明了,在下表中根据逻辑时序已经归出控制区域I/O的工作状态,方便开发使用。

读状态

输入

RS=L,R/W=H,E=H

输出

D0—D7=状态字

写指令

输入

RS=L,R/W=L,D0—D7=指令码,E=高脉冲

输出

读数据

输入

RS=H,R/W=H,E=H

输出

D0—D7=数据

写数据

输入

RS=H,R/W=L,D0—D7=数据,E=高脉冲

输出

表:3.2.3 控制时序

上面也有提到16个显示区域,它们也是有对应的基带地址,要在固定的地址上显示字符就需要发送对应的地址指令,第一行地址起始地址为0x00,第二行起始地址为0x40,后续的地址参考图3.2.3。设计时如果没有用到屏幕滚动的话可以不考虑虚拟地址。也就是说从0x10以后到0x27以及0x50到0x67需要开启其滚动显示才能显示出该地址空间上的数据。

关于常见的操作指令可以参考手册中的指令集部分,

图3.2.3地址映射

3.3SHT11温湿度


对于外界环境的一些非线性参数,需要使用传感器将时变环境参数转换成时变模拟信号,经过预处理后由单片机把模拟信号转化成能够识别的数字信号。对于外界环境的温湿度参数获常用到的测量原件有DHT_x系列与SHT_x系列等测量原件。DHT11在控制领域有着广泛的应用,此外对于高精度的测量仪器仪表设备中SHT11也有着广泛的应用。这两款芯片本质上的区别在于内部采样部分,DHT11的核心部件采用的是湿敏电阻原件,准确度与稳定性相对来讲比较差;SHT11内部采用的湿敏电容元器件,抗扰能力强,准确度高,当然成本上会比DHT11高点,这里设计的时候我们选用SHT11电容性原件进行采样与分析处理。另外一点SHT11的接口上与DHT11也有些许差异,同门内部通信需要遵守各自的协议。详细的管脚图及与控制元件的接线见图3.3.1。

                                         

图:3.3.1 SHT11使用原理图

上述原件预留了四个I/O接口,实际上该芯片有8个管脚且NC全部都接空,除了电源接口提供0-5V的工作电压之外还有串行数据通信接口SCK与DATA。我们采样的数据就需要通过IIC协议传送到8位单片机上,为了避免传送过程中带来的干扰需要在VDD与GND之间加上去耦滤波电容。

在采集数据周期内同样要遵守采样时序电路,前面已经以1602写数据为例说明。此外需要知道在启动传感器后如何发送指令集选择自己要得到数据,启动传输时序缓释通过SCK、DATA数据端口控制。SCK由高电频到低电频再到高电平的反转过程中农DATA同时出现高变低再变高的过程,下图为启动时序图:

图:3.3.2SHT11启动时序

常用的获取参数的指令有:温度测量0x03、湿度测量0x50、读状态寄存器0x07、写状态寄存器0x06、软复位0x1E等。当我们要完成温湿度是测量的时候,需要发布测试命令0x05标识RH当前湿度值,0x03表示当前温度值。当指令发送完成以后会有20ms~320ms的等待时间,分别对应不同位数的的采样单元,常见的有8位12位和14位,位数越大精度越高同时处理时间也要变长,等待数据测量完成以后会有“数据妥备”信号,紧接着进行2个字节的测量数据和一个字节的CRC校验确定数据没有发生错误以后才能够将这组数据打包发送;在收到CRC的校验完成以后,表明通讯完成,如果不进行CRC-8校验的能在测量到LSB之后保持高电位的ACK能够终止通讯且SHT1x会自动进入到睡眠模式。详细的查看完整的测量时序见图3.3.3。


图:3.3.3 SHT11采样时序


3.4感光采样单元


晾衣架的设计要符合日常使用习惯,实现室外环境,温湿度的监控与感光值得检测,这部分的用到LDR光敏电阻,常见的楼房中楼道的声控光控灯中就有光敏电阻,常见的光敏电阻会随着光照的增强电阻值会变小。为了直观的看到光敏值变化我们可以通过ADC0804模数转换芯片将动态变化的电位差转换成直观的数字信号,需要了解到的是0804的采样电压是0-5V,8位的分辨率映射到256,根据0-5V的采样电势差映射到0-256区间,换算成百分比显示出来。关于ADC0804的管脚说明这里不再赘述,详细参考使用手册。图3.4.1是光敏电阻与三极管构成的光感度检测电路,图3.4.2是ADC0804引脚说明。

图:3.4.1 感光度测试电路

图:3.4.2 ADC0804引脚分布


3.5独立按键单元

设置了独立按键用于控制显示模式和增益控制方式,系统按键事件的触发条件可以是外部触发,也可以软件去抖动检测IO高低电平变化。这里为了节省资源开销,采用按键去抖动,监测电平反转情况确定按键是否被按下。按键部分的原理图如下:

图一  按键电路                        图二  按键抖动

硬件部分的结构通过外接3.3正电压,流经10K上拉电阻后接开关接回GND。电路很简单,上拉电阻正常情况下往IO口输入的电平为高电平,默认拉高电位。按键按下的时候会有按键抖动随后电位编程低电平,按键松开的过程亦如此,随后回复高电平。机械按键的接触点抖动会对IO口监测电频带来干扰,通过软件延时去抖动可以合理的判断案件的工作状态。实际抖动过程状态见下上面图二。按键再按下的时候会有连续按下模式和单次按下模式,这里通过软件按位取反设置连续模式还是单次模式,具体实现方法见附件代码。


设计中要求具备初始值设定,对于温湿度的上下限有合适的设置范围,检测当前的温湿度实时变化与EEPROM中预存值进行比较,从而驱动电机进行角度与高低调整。按键一方面参与了模式控制另一方面人机交互提供了良好的体验,结合EEPROM将数据保存下来,避免了掉电之后的数据丢失。由于单片机I/O带负载能有限,所以要驱动电机转动还用到了继电器控制电路。下图是电机驱动控制电路:

图:3.5.1 电机驱动单元

第四章:系统软件流程4.1设计流程

软件结构这块主要采用STM32的内部资源,因其内置的ADC/DAC的功能很方便,不用再去单独设计模数和数模转换电路。DAC主要功能是驱动增益控制部分,结合按键模式可以设置出自动增益控制或者手动增益控制。同时将控制的结果反馈输出到液晶屏幕上,可以很直观的看到信号的各种数据,ADC的反馈可以实现系统的闭环增益控制,对输出的信号有直观的了解与认识。按键与液晶结合可以在显示模式上有多种选择,此外系统内部的一些定时器,中断的等内部资源也发挥了很大的作用。在任务调度上起到了隔离保护的作用,整体采用低功耗、高效处理的工作模式,使系统更加稳定且自带反馈功能。下面是软件流程结构:


4.2系统原理


经过上述硬件单元以及软件流程设计,整个流程中用到了单片机,SHT11温湿度采集及ADC0804模数转光感值,通过读写24C02记录与装载值,实时数据与设定值进行匹配,整个系统具有实时反馈,在proteus7中进行了仿真部分仿真原理图如下:


图中通过两片52单片机的原因是由于1602、单机控制、SHT11、独立按键等外设占用了太多I/O,由于需要给ADC0804提供正常的工作时序,所以这里直接选择了两片52单片机,实际上可以通过74HC573等锁存芯片进行I/O分配与拓展,相比较而言效果会好点,这里采用两片也能够很好地满足设计要求。


第五章:数据测量分析5.1实验测试数据


本次测试过程用到了SHT11与LDR光敏电阻,由于仿真的缘故需要在仿真过程中设置外界环境因素,人为的模拟温湿度与光感度。温湿度根据SHT11自身的%RH进行温湿度切换,增加按键模拟当前数值。光敏电阻为了直观的看到数据变化通过电压变观察电阻两端的电位差变化,比较SHT11本身设定值与电压表示数值,与LCD1602显示数据对比,观测数据偏差分析出现误差原因。详细测试数据见表5.1.1

测试条件:提前设定温湿度上下限并保存(温度:30℃              湿度:30%)

测量项目

温度Temp

湿度Humi

光敏值%

1电机组状态

2组电机状态

设定值

31.0℃

29.0%

16

实际值

30.7℃

28.8%

16

回收衣物

向左调整

误差

0.3℃

0.2%

0.00

测量项目

温度Temp

湿度Humi

光敏值%

电机状态

电机状态

设定值

31.0℃

31.0%

22

实际值

30.7℃

30.8%

22

回收衣物

向右调整

误差

0.3℃

0.2%

0.00

测量项目

温度Temp

湿度Humi

光敏值%

1电机组状态

2组电机状态

设定值

30.0℃

29.0%

55

实际值

28.8℃

28.8%

55

晾晒衣物

向左调整

误差

0.2℃

0.2%

0.00

测量项目

温度Temp

湿度Humi

光敏值%

电机状态

电机状态

设定值

31.0℃

29.0%

60

实际值

29.8℃

28.8%

60

回收衣物

向左调整

误差

0.2℃

0.2%

0.00

5.2结果误差分析、


通过上表测量数据发现模拟过程中的温湿度实测值与模拟设定值有0.2-0.3的实际误差,经分查阅手册发现SHT11在测量过程中会有±3%的测量误差,出现上诉情况属于正常现象,当然为更加直观看到数据,可以在软件里面增加误差值,在显示到液晶之前对数据提前进行预处理,减去相对误差值从而让结果显示出来更加精确。解决方案办法在软件中进行了处理,见下图:

单片机源码:

#include

#include

#include    

#include

#include <1602.h>

#include

#include <24c02.h> 

    

#define uchar unsigned char

#define uint  unsigned  int

#define W_cmd 0xa0   //24c02写指令

#define R_cmd 0xa1

uint  temp,humi; 

value humi_val,temp_val;             //定义两个共同体,一个用于湿度,一个用于温度

uchar error;                        //用于检验是否出现错误

uchar checksum;                              //CRC


uchar TEMP_data[7];                 //用于记录实测的温度

uchar HUMI_data[6];                 //用于记录实测的湿度

uchar LIGH_data[4];                                //用于记录实测光感度


uchar show_temp[5];                   //显示设定的温度

uchar show_humi[4];                   //显示设定的湿度


uchar data temp_humi_cache[4];         //温湿度设置缓存

uchar temp_set;                 //保存温度变量

uchar humi_set;                         //保存湿度变量

uchar presskeynum;                            //按键次数变量

uchar nn;                                    //用于蜂鸣器

uchar code word1[]={"  a product of  "};

uchar code word2[]={"UNITED ELECTRONS"};

uchar code word3[]={" Welcome........"};

sbit k1=P2^0; //选择按键

sbit k2=P2^1; //增加按键

sbit k3=P2^2; //减小按键

sbit k4=P2^3;// 确认按键

sbit led1=P1^4;        //温度过低指示灯

sbit led2=P1^5;        //温度过高

sbit led3=P1^6;        //湿度低于下限值,报警,加湿。

sbit led4=P1^7;        //湿度过高,报警,不调湿

sbit motor1=P3^4;

sbit motor2=P3^5;

sbit motor3=P3^6;

sbit motor4=P3^7;

sbit P2_6=P2^6;


//********延时函数*********

void delay(uint z)  //z为毫秒数


{

     int a,b;

     for(a=z;a>0;a--)

     for(b=120;b>0;b--);

}

void key()

{

     uchar m;

     if (k1==0) //调整按键检测

     {

         delay(5);

         if (k1==0)

         {

             presskeynum++;

             if(presskeynum==3)

             presskeynum=0;

             while(k1==0);         //若一直按下,循环

推荐阅读

史海拾趣

Advanced Interconnections Corp公司的发展小趣事

随着市场竞争的加剧,AIC公司意识到品质是赢得客户信赖的关键。于是,公司加大了对生产过程的管控力度,从原材料采购到生产流程,再到产品检验,都实行了严格的质量控制。同时,AIC公司还建立了完善的售后服务体系,及时响应客户需求,解决产品使用过程中出现的问题。这些举措使AIC公司的产品赢得了客户的广泛好评,进一步巩固了市场地位。

Fairchild Imaging公司的发展小趣事

随着技术的不断进步和市场需求的不断变化,Fairchild Imaging开始拓展其产品线。除了继续推出具有竞争力的图像传感器外,公司还涉足了高端的科研级相机市场。这些科研级相机不仅具有出色的成像性能,还具备高度的可靠性和稳定性,满足了科研领域的特殊需求。此外,Fairchild Imaging还推出了一系列CCD及CMOS芯片,这些芯片在图像传输、处理和控制等方面表现出色,被广泛应用于各种电子设备和系统中。

Fenwal Controls公司的发展小趣事

随着业务的不断发展,Fenwal Controls公司开始寻求全球扩张。公司通过建立广泛的分销网络,将产品推广至全球各地。同时,为了更好地满足当地市场需求,Fenwal Controls还积极实施本地化战略,与各地合作伙伴紧密合作,共同开发符合当地市场需求的定制化产品。这些举措不仅提升了公司的品牌影响力,也进一步巩固了公司在全球市场的地位。

达晶微(CREATEK)公司的发展小趣事

达晶微(CREATEK)公司成立于XXXX年,由一群具有丰富半导体行业经验的专家创立。公司初期主要专注于IGBT、MOSFET、FRD、TVS、SBD等功率半导体芯片与器件的研发。凭借其对技术的深刻理解和市场需求的敏锐洞察,达晶微迅速在市场中崭露头角。

Eurotech公司的发展小趣事

Eurofarad公司深知品质是企业生存和发展的根本。因此,公司一直注重品质管理,建立了严格的质量控制体系。同时,公司还不断提升服务水平,为客户提供全方位的售前咨询和售后服务。这些措施不仅提高了客户的满意度和忠诚度,还为公司的口碑和品牌形象增添了光彩。

C&K Components公司的发展小趣事

进入新时代,C&K继续坚持创新驱动的发展战略,不断加大在研发和创新方面的投入。公司紧跟行业趋势,积极探索新技术、新工艺和新应用,推出了一系列具有创新性和领先性的开关产品。同时,C&K也注重与客户的沟通和合作,深入了解客户需求,提供个性化的解决方案和优质的服务。这些举措使C&K在激烈的市场竞争中始终保持领先地位,并赢得了更多客户的认可和支持。

这些故事展示了C&K Components公司在电子行业中的发展历程和取得的成就。从初创时期的坚持与探索,到60年代的转型与突破,再到90年代的行业领先地位确立,以及千禧年代的并购与融合和新时代的创新与发展,C&K始终保持着对技术的热爱和对市场的敏锐洞察,不断推动公司向前发展。

问答坊 | AI 解惑

请教高手二极管的性能区别问题

2种二极管除了封装不同外,使用中有什么区别吗…

查看全部问答>

基于LPC1114的LED控制系统

思路:   1. 通过上位机软件编辑处理效果数据,并存入SD卡中;   2. 通过SSP0读取SD卡中的数据信息到RAM中;   3. 更加效果数据的结构,进行数据转换,转换成LED灯具可以设别的灰度数据;   4. 通过SSP1发送灰度数据到LE ...…

查看全部问答>

嵌入式系统SQLite开发

嵌入式系统应用SQLite开发需要注意那些问题? 另:    招聘,我公司(www.congxing.com.cn)招聘熟悉SQLite嵌入式开发的软件工程师。…

查看全部问答>

程序员的年龄限制

参加开发将近三个月了,却越来越困惑,首先是担心自己做程序员发展,其次感觉自己做的东西真是没什么深度,自己压根没用到任何什么算法什么东西的,大牛们给我指个路,程序这个路值的走下去么?…

查看全部问答>

求助—关于将st语言转化为plcopen的xml

大家好,现在开始做一个项目,涉及到将structure text语言转化为plcopen定义的xml文件,由于之前没有这方面经验,所以不知道有没有什么工具进行此方面工作,借此宝地特向各位高手求教,谢谢了。…

查看全部问答>

设计一个产品,最花精力是哪一部分?

最好说说是哪类产品. 主要是设计阶段,比如,方案,硬件,软件,调试,测试等等,可以补充, 调研,售后,维护这些可能伸缩性太大,不好比较. …

查看全部问答>

关于输入捕获模式下数脉冲的个数,请大家帮忙啊

                                 输入捕获模式下数脉冲的个数时,频率大于20khz的就出错了,试图改变捕获的预分频值,结果是一样的,不知道怎么解决 ...…

查看全部问答>

web版本Quartus ii 如何新建时序仿真文件(vector waveform file )

在ALTERA官网下载的web版本Quartus ii 如何新建时序仿真文件(vector waveform file )?是不是不能生成啊?  求解答…

查看全部问答>

通过TSP利用3700系列系统开关/万用表和2600系列SourceMeter®

在2005年,随着2600系列第一款一体化源表的引进,吉时利推出了安装有板上测试脚本处理器(Test Script Processors,TSP™)的测试测量仪器。TSP执行基于文本的程序,非常类似于SCPI,具有增强的测试序列/流程控制、决策判断以及利用用户自定义 ...…

查看全部问答>