標題: 利用PCA模塊PWM脈寬信號用于智能LED調制方法研究 [打印本頁]
作者: das 時間: 2015-4-5 00:50
標題: 利用PCA模塊PWM脈寬信號用于智能LED調制方法研究
LED路燈\吸頂燈具有明顯的環保節能優勢,而實時的控制LED亮度和功率消耗,在節能減排方面具有重要的意義;如LED路燈可以分時間段的(白天、黃昏、晚上、深夜)、或者按天氣實時明亮變化(如雷雨陰暗天氣、大太陽天氣等)自動調整LED輸出電流功率,保持需要的輸出照度,從而節省的電源的開支,減少了二氧化碳的排放。
LED驅動器一般具有PWM輸入控制模式,要達到上述的工作模式,需要我們配套一支智能PWM信號發生器,PWM發生器在完成各種智能控制的時間里不允許打斷PWM的連續輸出,否則會產生明顯的閃爍感;因此本人利用MCU的PCA模塊輸出PWM調制信號,可以保證PWM的連續輸出,同時可以利用中斷功能實現各種工作模式的控制,方便于接入網絡實現上位機的實時監測。
我們可以選擇具有實用于LED的有PCA模塊的MCU,本人用STC公司的MCU進行的分析試驗,STC公司的MCU是增強型單片機,在51工業級模式上又增加了PCA、DAC、SPI等等,使得我們的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=0X84為T0為信號源,這時將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();
}
}
}
//=====================紅外線中斷========================
| 歡迎光臨 (http://m.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |