找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4255|回复: 0
打印 上一主题 下一主题
收起左侧

利用PCA模块PWM脉宽信号用于智能LED调制方法研究

[复制链接]
跳转到指定楼层
楼主
ID:76127 发表于 2015-4-5 00:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LED路灯\吸顶灯具有明显的环保节能优势,而实时的控制LED亮度和功率消耗,在节能减排方面具有重要的意义;如LED路灯可以分时间段的(白天、黄昏、晚上、深夜)、或者按天气实时明亮变化(如雷雨阴暗天气、大太阳天气等)自动调整LED输出电流功率,保持需要的输出照度,从而节省的电源的开支,减少了二氧化碳的排放。
LED驱动器一般具有PWM输入控制模式,要达到上述的工作模式,需要我们配套一支智能PWM信号发生器,PWM发生器在完成各种智能控制的时间里不允许打断PWM的连续输出,否则会产生明显的闪烁感;因此本人利用MCUPCA模块输出PWM调制信号,可以保证PWM的连续输出,同时可以利用中断功能实现各种工作模式的控制,方便于接入网络实现上位机的实时监测。
我们可以选择具有实用于LED的有PCA模块的MCU,本人用STC公司的MCU进行的分析试验,STC公司的MCU是增强型单片机,在51工业级模式上又增加了PCADACSPI等等,使得我们的MCU系统硬件可以大大的简化,性能却非常的优秀,非常适用于高电磁干扰、环境恶劣的地方。
在生成PWM信号时我们要先了解驱动的PWM控制参数,如频率、输入阻抗、功耗等;然后确定PWM硬件电路,最后编写PWM程序。
以下是编写的程序:
//--------------芯片STC12C5A60S2--晶振11.0592M----
//------------------LED日光灯PWM红外遥控接收程序-------
#include <stc12c5a.h>
#define uint unsigned int
#define uchar unsigned char
sbit LED_LE=P3^4;
sbit IR_RE=P3^2;
sbit p01=P0^1;  //----开关检测输入
sbit p02=P0^2;  //----开关检测输入
uchar pulse=0x10;//定义PWM步进变量
static uchar date[4]={0,0,0,0};
static uchar qinlong;
static uchar ZKB1,ZKB2;
//-------------------------
void delay882()
{
uchar i,j;
i=35;
do{j=68;
   do{j--;}
   while(j);
   i--;
  }while(i);
}
//-------------------------
void delay1000()
{
uchar i,j;
i=39;
do{j=70;
   do{j--;}
   while(j);
   i--;
  }while(i);
}
//-------------------------
void delay2400()
{
uchar i,j;
i=93;
do{j=70;
   do{j--;}
   while(j);
   i--;
  }while(i);
}
////////////////////////////////////////
void delay5ms(void)//5ms去抖动延时
{
       unsigned int tempcyc=1000;
       while(tempcyc--);
}
//--------------------------------------
void delayya()
{
       uint i;
       for(i=0;i<30000;i++);
}
//======================================
void sezi()
{
       LED_LE=0;
       EA=1;
       EX0=1;   //允许外部0中断
       IT0=1;   //外部0中断使用下降沿触发
//----------
//     TMOD=0x01;//------定时器0中断设置//需要用定时中断才用,一般不需用
//     TH0=0xff; //因为会有中断干扰的现象,影响PWM输出的连续性.
//     TL0=0xf0;
//     ET0=1;
//     TR0=1;
//----------
       CMOD=0x80;//------PCA模块PWM设置
       CCON=0x00;//CMOD=0X84T0为信号源,这时将T0设置段落打开//0X80时则用12分频时钟信号
       CL=0x00;  //CMOD=0X86使用外部脉冲信号,P1.2脚加入信号
       CH=0x00;
       CCAPM0=0x42;
       PCA_PWM0=0x00;
       CR=1;
}
//***********************************************/
//===================0.5-9.5ms的延时调光信号=============
void main()
{
       uchar j=5;
       sezi();
       while(1)
       {            
               if(qinlong==0x00)
                     {
                            CCAP0H=(256-250);
                            qinlong=0xff;
                     }
          else if(qinlong==0x01)
                     {
                            CCAP0H=(256-240);
                            qinlong=0xff;
                     }
               else       if(qinlong==0x02)
                     {
                            CCAP0H=(256-220);
                            qinlong=0xff;
                     }
               else       if(qinlong==0x03)
                     {
                            CCAP0H=(256-200);
                            qinlong=0xff;
                     }
               else       if(qinlong==0x04)
                     {
                            CCAP0H=(256-180);
                            qinlong=0xff;
                     }
               else       if(qinlong==0x05)
                     {
                            CCAP0H=(256-160);
                            qinlong=0xff;
                     }
               else       if(qinlong==0x06)
                     {
                            CCAP0H=(256-150);
                            qinlong=0xff;
                     }
               else       if(qinlong==0x07)
                     {
                            CCAP0H=(256-100);
                            qinlong=0xff;
                     }
               else       if(qinlong==0x08)
                     {
                            CCAP0H=(256-50);
                            qinlong=0xff;
                     }
               else       if(qinlong==0x09)
                     {
                            CCAP0H=(256-10);
                            qinlong=0xff;
                     }
//------------------------------------------以下开关检测输入
               else if(!p01)
               delay5ms();
               if(!p01)
                {
                            CCAP0H=CCAP0H+j;
                            delayya();
                            if(CCAP0H>=250)CCAP0H=250;      
                     }
               //-----------------
              else if(!p02)
               delay5ms();
               if(!p02)
                {
                            if(CCAP0H<=10)CCAP0H=10;
                            CCAP0H=CCAP0H-j;
                            delayya();
                     }
       }
}
//=====================红外线中断========================
以下红外中断程序略



















分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表