您当前的位置:五五电子网电子知识单片机-工控设备综合-其它基于PIC16F877微控制器触摸式调光台灯智能化控制的实现 正文
基于PIC16F877微控制器触摸式调光台灯智能化控制的实现

基于PIC16F877微控制器触摸式调光台灯智能化控制的实现

点击数:7761 次   录入时间:03-04 12:00:35   整理:http://www.55dianzi.com   综合-其它

  本文系统讲述如何利用PIC16F877微控制器实现触摸式调光台灯的智能化控制,实现(1)触摸调光;(2)灯丝预热;(3)自动消除眩光、频闪;(4)定时闹钟;(5)特色铃音;(6)整点报时;(7)事件提醒;(8)日历功能;(9)中文液晶显示等功能,满足安全、高效、无眩光、无频闪、功能齐全等质量标准。

  硬件设计

  1.PIC16F877徵控制器

  PIC16F877微控制器为MicroChip公司FLASH型CPU,片内含8K的FLASH程序存储区,368字节RAM,256字节的EEPROM,35个独立I/0口,一个16位计数器/定时器,两个8位计数器/定时器,14个可独立使用也可嵌套使用的中断源,2个捕捉器、比较器、PWM模块,,白带8路10位A/D,内带看门狗WDT及电源监视,具有休眠、等待等多种节电方式,I/0口可以直接驱动LCD。

  2.硬件电路设计

触摸式调光台灯硬件框图

  触摸式调光台灯硬件框图如上图所示,硬件原理图如下图所示。

触摸式调光台灯硬件原理图

   上图中C1和T1组成EMI滤波器,一方面可以减少镇流器对电网的干扰,另一方面可以防止其它电器设备对镇流器的干扰;V1-V4组成桥式整流器;C3、C4、V5、V6和R21组成无源功率因数校正电路,使功率因数达到0.9以上,为保证功率灯管使用寿命,电路的功率峰值因数应小于1.7,本文采用PIC16F877单片机的捕捉功能对频率进行反馈回读,根据频率的变化采取相应的措施,改变IR2151的输入,从而控制IR2151的输出频率,达到控制输出功率的目的。该方法可以使光源更稳定,消除眩光、频闪,达到护眼灯的效果。

  触摸式调光灯工作时通过触摸金属片A(亮键)、B(暗键),将人体杂波信号通过耦合电容加到MCU的I/0口进行检测,同时,耦合电容还可以防止因个别器件损坏而造成麻电现象;MCU根据检测到的信号通过程序分析、运算,将PWM信号从17脚输出到IR2151,控制振荡频率;振荡器经高端(HO)和低端(LO)引脚输出,驱动两个场效应管IRF830交替导逼和截止,达到控制灯管的目的。

  灯丝的预热由热敏电阻控制,上电后,IR2151的6脚、电感L1、电容C1O、Cl3组成串联谐振电路,在Cl3上产生高压加到灯管两端,将灯点亮。其中,RT为正温度系数的热敏电阻,起到对灯丝预热的作用;电源接通后灯丝电流几乎全部加载到C1O和RT上,由于C1O电容较大,LC串联电路不发生谐振,随着温度升高,RT阻值迅速增大,RT支路相当于开路)使LC串联电路发生谐振,即达到对灯丝进行预热及软启动的作用,延长了灯管的使用寿命,整个过程MCU时刻进行监控及调整,实现真正的智能化控制。

  软件设计

  软件设计由MCU初始化、装置自检、定时采样、中断处理、液晶显示、按键处理六部分,软件流程如下图所示。

软件流程

  定时器中断子程序为软件设计的核心,包含湿度、湿度采样、调光,除眩等控制,本文对温度、湿度的精度要求不是非常的严格,采样周期设为1min,通过采样5个点求平均值,且精度满足采样要求。

  定时器初始化子程序如下;

  /***********定时器初始化*******/

  void tmint(void)

  {

  INTCON=0X00;

  /********关闭中断**********/

  GIE=1;

  /***********总中断使能INTCON.7**********/

  PEIE=1;

  /*********外围接口中断使能位,必须置1否则TMR1中

  断不好用***********/

  TMR1IE=1;

  /**********TMR1溢出中断使能位**********/

  T1 CON=0X24;

  /******************预分频器1:4暂时不打开TMR1***********/

  TMR1 L=0X77;

  TMR1 H=0XEC;

  /**************定时器赋初值20mS中断1次***************/

  TMR1ON=1;

  /***********启动TMR1开始计数。T1CON.0**************/

  }

  定时器中断子程序如下:

  /************定时器中断***********/

  void interrupt clkint(void)

  {

  int i,j,k:

  for(i=1:i<5:i++)

  {

  adwd_h[i]=adwd_h[i+1];

  adwd_I[i]=adwd_I[i+1];

  /**温度采样值移位,顶出第1位,新值存在5位***/

  }

  int m,n,t;

  for(m=1;m<5;m++)

  {

  adsd_h[m]=adsd_h(m+1];

  adsd_I[m]=adsd_I[m+1];

  /***温度采样值移位,顶出第1位,新值存在5位*****/

  }

  ADCONO=Ox41;

  /*****时钟源F/8,AO通道,允许A/D工作**********/

  ADCON 1=0x82;

  /********结果右对齐**********/

  delayms(1);

  /***************等待采样,采样电容充电时间提高精度**************/

  ADCONOㄧ=Ox04;

  /**********启动A/D转换GO.ADCON0.2***********/

  while(ADIF==1)

  /***********等转换结束位ADIF置1,PIR1.6**********/

  {

  adwd_h[5]=ADRESH;

  adwd_I[5]=ADRESL;

  /**********存温度采样结果**********/

  }

  ADCON0=0x51;

  /**********时钟源F/8,A1通道,允许A/D工作**********/

  ADCON1=0x82;

  /*****结果右对齐**********/

  delayms(1);

  /**************等待采样,采样电容充电时间——提高精度************/

  ADCON0ㄧ=0×04;

  /********启动A/D转换GO,ADCON0.2********/

  while(ADIF==1)

  /*******等待转换结束位ADIF置1,PIR1.6***********/

  {

  adsd_h[5]=ADRESH;

  adsd_1[5]=ADRESL;

  /**********存温度采样结果**********/

  }

  TMR1 IF=O;

  /*******清中断标志位********/

  TMR1 L=0X77;

  TMR1 H=0XEC;

  /********定时器重新赋初值20mS中断1次***********/

  }

  功能说明

  为使台灯亮度调节平稳过渡,本文设置8档调光:轻触金属片A亮键,灯由灭点亮,然后每触摸一下亮键,台灯亮度增加一档,至第8档时台灯达到最亮,此后再按亮键亮度也不会增加金属片B暗键功能和亮键相反,每按一次亮度减小~档,直至熄灭,同时通过液晶显示相应的状态。

  其它功能通过不同按键进入相应的功能菜单进行设置,同时通过纯中文液晶菜单显示。另外,还可设置整点语音报时、3个定日寸闹铃以及事件提醒功能,每个闹铃周期还可以分别设定,事件提醒功能包括会议、约会、参加婚礼、运动、业余学习、其它等几种事件,提醒包括提前1天、提前1小时、提前10分钟三种选择。

  由于MCU存储容量有限,闹铃铃音除了固定的铃音外,还有以下4个比较有特色的语音铃音供选择:(1)懒猪起床了,不然把你抬出去了;(2)宝贝起床,太阳都照到屁股了;(3)快点起床、快点起床,一会迟到了;(4)你的定时时间到,快去办事吧。




本文关键字:控制器  台灯  综合-其它单片机-工控设备 - 综合-其它