標(biāo)題: 單片機(jī)自動(dòng)感應(yīng)環(huán)境光的調(diào)光控制器程序+電路設(shè)計(jì) [打印本頁]
作者: 175445946 時(shí)間: 2019-6-12 14:59
標(biāo)題: 單片機(jī)自動(dòng)感應(yīng)環(huán)境光的調(diào)光控制器程序+電路設(shè)計(jì)
1)設(shè)計(jì)一個(gè)環(huán)境光亮度檢測(cè)電路,并根據(jù)環(huán)境亮度進(jìn)行臺(tái)燈光照強(qiáng)度的自動(dòng)調(diào)節(jié);
2)采用多只LED指示亮度等級(jí),環(huán)境亮度達(dá)到最高時(shí),自動(dòng)關(guān)閉;
3)拓展部分:具有LED數(shù)碼顯示亮度等級(jí)功能;
4)安裝、調(diào)試電路,記錄調(diào)零、測(cè)試的數(shù)據(jù),進(jìn)行測(cè)試、分析。
2.1 設(shè)計(jì)的總體方案
無論LED是經(jīng)由降壓、升壓、降壓/升壓或線性穩(wěn)壓器驅(qū)動(dòng),連接每一個(gè)驅(qū)動(dòng)電路最常見的線程就是須要控制光的輸出。。目前,針對(duì)亮度控制方面,主要的兩種解決方案為線性調(diào)節(jié)LED的電流(模擬調(diào)光)或在肉眼無法察覺的高頻下,讓驅(qū)動(dòng)電流從0到目標(biāo)電流值之間來回切換(數(shù)字調(diào)光)。利用脈沖寬度調(diào)變(PWM)來設(shè)定循環(huán)和工作周期可能是實(shí)現(xiàn)數(shù)字調(diào)光的最簡(jiǎn)單的方法。
PWM方法的基本思想是利用單片機(jī)具有的PWM端口,在不改變PWM方波周期的前提下,通過軟件的方法調(diào)整單片機(jī)的PWM控制寄存器來調(diào)整PWM的占空比,從而控制充電電流。本方法把設(shè)定的充電電流與實(shí)際讀取到的充電電流進(jìn)行比較,若實(shí)際電流偏小則向增加充電電流的方向調(diào)整PWM的占空比,LED燈光度變亮;若實(shí)際電流偏大則向減小充電電流的方向調(diào)整PWM的占空比,LED燈光度變暗。本文介紹了以STC12C5A60S2為控制核心,通過光敏電阻感應(yīng)光度,并利用PWM調(diào)光技術(shù)對(duì)LED進(jìn)行光度的自動(dòng)調(diào)節(jié)。
2.2 設(shè)計(jì)的總體構(gòu)思及框圖
基于STC單片機(jī)的PWM調(diào)光是以STC12C5A60S2作為主控芯片,設(shè)置了手動(dòng)控制和自動(dòng)控制。在手動(dòng)控制時(shí),分為三檔,輸出不同的PWM占空比對(duì)LED的電流進(jìn)行控制,從而實(shí)現(xiàn)了對(duì)光度的手動(dòng)調(diào)節(jié)。在自動(dòng)控制時(shí),通過STC12C5A60S2內(nèi)部模擬-數(shù)字不斷檢驗(yàn)光敏電阻的電壓來間接測(cè)量感應(yīng)光度,將電壓和預(yù)設(shè)的閾值進(jìn)行對(duì)比,調(diào)整PWM的占空比對(duì)LED的電流進(jìn)行控制,從而實(shí)現(xiàn)了對(duì)光度的自動(dòng)調(diào)節(jié)。如圖2-1所示為設(shè)計(jì)的總體框圖。

圖2-1 總體框圖
第3章 系統(tǒng)硬件電路設(shè)計(jì)
3.1 STC12C5A60S2單片機(jī)簡(jiǎn)介
STC12C5A60S2是STC生產(chǎn)的單時(shí)鐘/機(jī)器周期(1T)的單片機(jī),是高速、低功耗、超強(qiáng)抗干擾的新一代8051單片機(jī),指令代碼完全兼容傳統(tǒng)8051,但速度快8-12倍。內(nèi)部集成MAX810專用復(fù)位電路,2路PWM,8路高速10位A/D轉(zhuǎn)換,針對(duì)電機(jī)控制,強(qiáng)干擾場(chǎng)合。
利用STC12C5A60S2的IO口P1.1接收光敏電阻采集的當(dāng)前光照測(cè)檢測(cè)輸出數(shù)據(jù)。IO口P1.3產(chǎn)生產(chǎn)生相應(yīng)的PWM波,給高亮度LED,從而有不同的光照。IO口P0作為L(zhǎng)CD液晶顯示器的數(shù)據(jù)/指令輸入端口。
STC12C5A60S2單片機(jī)的時(shí)鐘電路采用的是內(nèi)部的時(shí)鐘電路,利用單片機(jī)內(nèi)部的振蕩電路,并在XLAT1和XLAT2兩引腳間外接石英晶體和電容構(gòu)成的并聯(lián)諧振電路,使內(nèi)部振蕩器產(chǎn)生自激振蕩。石英晶體Y1頻率是12.0M,C1和C2是30pf。STC12C5A60S2單片機(jī)最小系統(tǒng)線路圖如圖3-1所示。

圖3-1 STC12C5A60S2單片機(jī)最小系統(tǒng)線路圖
3.2 A/D轉(zhuǎn)換電路
A/D轉(zhuǎn)換是用來通過一定的電路將模擬量轉(zhuǎn)變?yōu)閿?shù)字量。模擬量可以是電壓、電流等電信號(hào),也可以是壓力、溫度、濕度、位移、聲音等非電信號(hào)。但在A/D轉(zhuǎn)換前,輸入到A/D轉(zhuǎn)換器的輸入信號(hào)必須經(jīng)各種傳感器把各種物理量轉(zhuǎn)換成電壓信號(hào)。
將模擬量或連續(xù)變化的量進(jìn)行量化(離散化),轉(zhuǎn)換為相應(yīng)的數(shù)字量的電路。 A/D變換包含三個(gè)部分:抽樣、量化和編碼。一般情況下,量化和編碼是同時(shí)完成的。 抽樣是將模擬信號(hào)在時(shí)間上離散化的過程; 量化是將模擬信號(hào)在幅度上離散化的過程; 編碼是指將每個(gè)量化后的樣值用一定的二進(jìn)制代碼來表示。
采集光照強(qiáng)度運(yùn)用光敏電阻和電位器來構(gòu)成信號(hào)采集電路。AD轉(zhuǎn)換電路有STC12內(nèi)部10位AD組成。STC125A60S2內(nèi)部AD基準(zhǔn)電壓5V,輸入電壓范圍為0~5V,輸出數(shù)字量最大值為1024。如圖3-2所示為信號(hào)采集電路。

圖3-2 信號(hào)采集電路
3.3 LED驅(qū)動(dòng)
脈寬調(diào)制(PWM)是利用微處理器的數(shù)字輸出來對(duì)模擬電路進(jìn)行控制的一種非常有效的技術(shù),廣泛應(yīng)用在從測(cè)量、通信到功率控制與變換及LED照明等許多領(lǐng)域中。通過以數(shù)字方式控制模擬電路,可以大幅度降低系統(tǒng)的成本和功耗。LED器件對(duì)驅(qū)動(dòng)電源的要求近乎于苛刻,LED不像普通的白熾燈泡,可以直接連接220V的交流市電。LED是2~3伏的低電壓驅(qū)動(dòng),必須要設(shè)計(jì)復(fù)雜的變換電路,不同用途的LED燈,要配備不同的電源適配器。
電流控制LED的亮度,通過控制電流調(diào)節(jié)LED燈的亮度。利用公式i*t/T可知,利用調(diào)整PWM不同的占空比t/T就可以控制電流的大小。電流由三極管9013提供驅(qū)動(dòng),PWM由P1.3輸出,低電平有效。如圖3-3所示為PWM電路。

圖3-3 PWM電路
3.4 LCD顯示電路
1602采用標(biāo)準(zhǔn)的16腳接口,本設(shè)計(jì)當(dāng)前光照采用的是LCD1602顯示檢測(cè)信息。所以單片機(jī)需要給LCD分配3位個(gè)控制信號(hào)IO口和8位數(shù)據(jù)傳輸IO口,LCD的EN控制端連接P2.2,RS控制端連接P2.0,RW控制端連接P2.1,8位據(jù)總線連接PO口。如圖3-4所示為L(zhǎng)CD電路。

圖3-4 LCD電路
3.5 按鍵切換手動(dòng)和自動(dòng)
K3按下為自動(dòng)控制,K4按下為手動(dòng)控制,來回按K3、K4切換。當(dāng)手動(dòng)按鍵按下時(shí),K1為L(zhǎng)ED亮度增加,當(dāng)增加到最大值自動(dòng)為最小,K2為L(zhǎng)ED亮度減小,當(dāng)減少到最小值時(shí)自動(dòng)為最大。
按鍵電路的工作原理:芯片的控制器通過讀取I/O口的信息(可采用逐位讀入,或者整個(gè)字節(jié)讀入的方法),來判斷哪一個(gè)按鍵被按下(或哪幾個(gè)按鍵被同時(shí)按下),按下按鍵時(shí)I/O位的信息為”高電位“。然后根據(jù)內(nèi)部設(shè)定的判斷,轉(zhuǎn)去執(zhí)行相應(yīng)的程序。如圖3-5所示為按鍵電路:

圖3-5 按鍵電路
3.6 光敏電阻
光敏電阻器是利用半導(dǎo)體的光電導(dǎo)效應(yīng)制成的一種電阻值隨入射光的強(qiáng)弱而改變的電阻器,又稱為光電導(dǎo)探測(cè)器;入射光強(qiáng),電阻減小,入射光弱,電阻增大。還有另一種入射光弱,電阻減小,入射光強(qiáng),電阻增大。
光敏電阻器一般用于光的測(cè)量、光的控制和光電轉(zhuǎn)換(將光的變化轉(zhuǎn)換為電的變化)。常用的光敏電阻器硫化鎘光敏電阻器,它是由半導(dǎo)體材料制成的。光敏電阻器對(duì)光的敏感性(即光譜特性)與人眼對(duì)可見光(0.4~0.76)μm的響應(yīng)很接近,只要人眼可感受的光,都會(huì)引起它的阻值變化。設(shè)計(jì)光控電路時(shí),都用白熾燈泡(小電珠)光線或自然光線作控制光源,使設(shè)計(jì)大為簡(jiǎn)化。光敏電路如圖3-6所示:

圖3-6 光敏電路
3.7 電源設(shè)計(jì)
電源電路是指提供給用電設(shè)備電力供應(yīng)的電源部分的電路設(shè)計(jì),使用的電路形式和特點(diǎn)。常見的電源電路有交流電源電路、直流電源電路等。
此次采用 78XX系列固定三端穩(wěn)壓器穩(wěn)壓,三端正穩(wěn)壓電路,能提供多種固定的輸出電壓,應(yīng)用范圍廣,內(nèi)含過流,過熱和過載保護(hù)電路。降壓穩(wěn)壓部分由三端穩(wěn)壓管7805、電解電容組成,將9V轉(zhuǎn)換成穩(wěn)定的5V。如圖3-7所示為電源電路。

圖3-7 電源電路
第4章 系統(tǒng)軟件設(shè)計(jì)
4.1 系統(tǒng)流程圖
此次系統(tǒng)軟件設(shè)計(jì)利用信號(hào)采集電路讀取當(dāng)前亮度,并通過程序及系統(tǒng)判斷其亮度是否大于設(shè)定亮度,是則減小PWM輸出,否則增大PWM輸出,通過程序所得PWM值調(diào)節(jié)LED亮度,從而控制系統(tǒng)達(dá)到調(diào)光功能。程序流程圖如圖4-1所示:

圖4-1 程序流程圖
4.2 系統(tǒng)程序
- #include" STC12c5a.h" //stc頭文件
- #include"intrins.h" //包含_nop_空操作的定義
- typedef unsigned char uchar;
- typedef unsigned int uint;
- sbit RW=P2^1;//寫入時(shí)一直為低電平,讀出時(shí)為高。
- sbit RS=P2^0; //指令數(shù)據(jù)選擇端
- sbit LCDEN=P2^2;//使能端
- sbit key1=P3^0;
- sbit key2=P3^1;
- sbit key3=P3^2;
- sbit key4=P3^3;
- uchar j=0;
- void AD_init();//AD初始化
- //函數(shù)聲明
- void delay(uint a);
- uint AD_work(uchar channel);
- uint AD_get(uchar channel);
- uchar disbuf[]=" illumin: . ";
- uchar PWM[]={0xec,0xe7,0xe0,0xda,0xd3,0xcd,0xc0,0xa6,0x9a,0x80,0x33,0x00} ; // 92.5%-0%
- void pwm_set(unsigned char a);
- void pwm_init()
- {
- CCON=0; //PCA初始化
- CH=0; //PCA 高8位
- CL=0; //PCA 低8位
- CMOD=0x00; //f=sysclk/256/12
- CCAPM0=0x42; //p1.3
- PCA_PWM0=0x00;
- CR=1; //啟動(dòng)PCA計(jì)數(shù)器
- }
- void pwm_set(unsigned char a) //占空比設(shè)置
- {
- CCAP0H=CCAP0L=a;
- }
- void write_com(uchar com )
- {
- RS=0;
- RW=0;
- LCDEN=0;
- P0=com ;
- delay(5);
- LCDEN=1;
- delay(5);
- LCDEN=0;
- }
- void write_dat(uchar date)
- {
- RW=0;
- RS=1;
- LCDEN=0;
- P0=date;
- delay(5);
- LCDEN=1;
- delay(5);
- LCDEN=0;
- }
- //液晶初始化
- void LCDinit()
- {
- write_com(0x0c);
- write_com(0x06);
- write_com(0x01);
- write_com(0x38);
- }
- void display(unsigned int z)
- {
- uchar i;
- disbuf[9]=z%1000/100+0x30;
- disbuf[11]=z%100/10+0x30;
- disbuf[12]=z%10+0x30;
- for(i=0;i<13;i++)
- write_dat(disbuf[i]);
- }
- void main()
- {
- AD_get(1);
- AD_init(); //A/D轉(zhuǎn)換初始化
- LCDinit(); //液晶初始化
- pwm_init();//照度檢測(cè)
- pwm_set(0xda);
- delay(200);
- while(1)
- {
- write_com(0x80);
- display(AD_work(1));
- if(key3==0)
- {
- delay(5);
- if(key3==0) //自動(dòng)模式
- {
- while(key4==1)
- {
- write_com(0x80);
- display(AD_work(1));
- if(AD_work(1)>=900)
- pwm_set(0xEC);
- if((850<=AD_work(1))&&(AD_work(1)<900))
- pwm_set(0xE7);
- if((750<=AD_work(1))&&(AD_work(1)<850))
- pwm_set(0xe0);
- if((700<=AD_work(1))&&(AD_work(1)<750))
- pwm_set(0xda);
- if((600<=AD_work(1))&&(AD_work(1)<700))
- pwm_set(0xd3);
- if((500<=AD_work(1))&&(AD_work(1)<600))
- pwm_set(0xCD);
- if((400<=AD_work(1))&&(AD_work(1)<500))
- pwm_set(0xC0);
- if((300<=AD_work(1))&&(AD_work(1)<400))
- pwm_set(0xA6);
- if((200<=AD_work(1))&&(AD_work(1)<300))
- pwm_set(0x9A);
- if((150<=AD_work(1))&&(AD_work(1)<200))
- pwm_set(0x80);
- if((100<=AD_work(1))&&(AD_work(1)<150))
- pwm_set(0x33);
- if(AD_work(1)<100 )
- pwm_set(0x00);
- }
- }
- }
- if(key4==0) // 手動(dòng)模式
- {
- delay(5);
- if(key4==0)
- {
- while(key3==1)
- {
- write_com(0x80);
- display(AD_work(1));
- if(key1==0)
- {
- delay(5);
- if(key1==0)
- {
- if(j==11)
- j=0;
- pwm_set((PWM[j++]));
- }
- }
- if(key2==0)
- {
- delay(5);
- if(key2==0)
- {
- if(j==0)
- j=11;
- pwm_set((PWM[j--]));
- }
- }
- }
- }
- }
- }
- }
- uint AD_get(uchar channel)
- {
- ADC_CONTR=0x88|channel; //開啟AD轉(zhuǎn)換1000 1000 即POWER SPEED1 SPEED0 ADC_FLAG ADC_START CHS2 CHS1 CHS0
- _nop_(); _nop_(); _nop_(); _nop_();//要經(jīng)過4個(gè)CPU時(shí)鐘的延時(shí),其值才能夠保證被設(shè)置進(jìn)ADC_CONTR 寄存器
- while(!(ADC_CONTR&0x10)); //等待轉(zhuǎn)換完成
- ADC_CONTR&=0xe7; //關(guān)閉AD轉(zhuǎn)換,ADC_FLAG位由軟件清0
- return(ADC_RES*4+ADC_RESL); //返回AD轉(zhuǎn)換完成的10位數(shù)據(jù)(16進(jìn)制)
- }
- /*unsigned char GETADCResult()//AD轉(zhuǎn)換
- {
- unsigned char AD;
- ADC_CONTR=ADC_POWER|ADC_SPEEDHH|ADC_START;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- while(!(ADC_CONTR&ADC_FLAG));
- ADC_CONTR&=~ADC_FLAG;//關(guān)閉AD
- Vo=ADC_RES*5*10/256 ;
- return Vo;
- }
- uint AD_work(uchar channel)
- {
- float AD_val; //定義處理后的數(shù)值A(chǔ)D_val為浮點(diǎn)數(shù)
- uchar i;
- uint AD_V;
- for(i=0;i<100;i++)
- AD_val+=AD_get(channel); //轉(zhuǎn)換100次求平均值(提高精度)
- AD_val/=100;
- AD_V=(uint)AD_val;
- return AD_V;
- }
- void delay(uint a) //延時(shí)約1ms
- {
- uint i;
- while (--a!=0)
- for(i=600;i>0;i--); //1T單片機(jī)i=600,若是12T單片機(jī)i=125
- }
- void AD_init()
- {
- P1ASF=0x02; //P1.1 作為模擬功能AD使用
- ADC_RES=0; //清零轉(zhuǎn)換結(jié)果寄存器高8位
- ADC_RESL=0; //清零轉(zhuǎn)換結(jié)果寄存器低2位
- ADC_CONTR=0x80;//開啟AD電源
- delay(2); //等待1ms,讓AD電源穩(wěn)定
- ES=1;
- EA=1;
- }
復(fù)制代碼
第5章 系統(tǒng)仿真及調(diào)試
5.1 軟件調(diào)試軟件程序設(shè)計(jì)對(duì)單片機(jī)的I/O接口的控制,智能光控臺(tái)燈主要通過光控電路對(duì)光的感應(yīng)以達(dá)到輸出端口的控制,在黑暗時(shí)光控部分輸出高電平,通過單片機(jī)內(nèi)部程序的控制以光控輸出高電平為準(zhǔn),給輸出端口定義低電平,臺(tái)燈是以低電平有效,當(dāng)單片機(jī)輸出端達(dá)到低電平時(shí)臺(tái)燈亮。
5.2 系統(tǒng)仿真系統(tǒng)的硬件及軟件都已經(jīng)調(diào)試完成,然后利用protues進(jìn)行系統(tǒng)仿真。在仿真中,利用光敏電阻模擬天黑天亮,用滑動(dòng)變阻器來調(diào)整光亮的強(qiáng)度。
仿真圖如圖5-1所示。

圖5-1 光照強(qiáng)度強(qiáng)仿真圖
然后,調(diào)整光敏電阻阻值,使之達(dá)到天黑的效果。此時(shí),單片機(jī)控制臺(tái)燈亮,仿真效果圖如圖5-2所示。
圖5-2 光照強(qiáng)度弱仿真圖

完整的Word格式文檔51黑下載地址:
自動(dòng)感應(yīng)環(huán)境光的調(diào)光控制器.docx
(202.95 KB, 下載次數(shù): 75)
2019-6-12 14:57 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者: 247015164 時(shí)間: 2019-9-16 20:15
謝謝樓主的分享
作者: 125844584 時(shí)間: 2020-3-30 15:24
求樓主程序頭文件
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
一区二区在线不卡
|
完全免费在线视频
|
亚洲精品成人免费
|
成人免费在线视频
|
日本在线视频不卡
|
亚洲视频中文
|
婷婷成人在线
|
日本一区二区在线视频
|
a级黄色网
|
欧美精品一区二区三区蜜桃视频
|
欧美一级二级视频
|
毛片视频网站
|
亚洲一区二区三区四区五区中文
|
一区二区精品在线
|
最新国产精品
|
亚洲精品视频一区二区三区
|
亚洲视频二区
|
欧美日韩亚
|
羞羞视频免费在线观看
|
中文字幕视频在线
|
超碰电影
|
日韩视频在线一区
|
波多野吉衣久久
|
国产中文一区二区三区
|
国产人成精品一区二区三
|
国产精品久久久久久久久图文区
|
97精品国产97久久久久久免费
|
欧美精品一区二区三区在线
|
精品久久久久久久久久久久久久久久久
|
久久一区二区视频
|
一级a性色生活片久久毛片
午夜精品在线观看
|
不卡在线一区
|
最新中文字幕
|
激情欧美日韩一区二区
|
免费观看黄色一级片
|
欧美久久天堂
|
国产精品久久
|
夜夜av|
色屁屁在线观看
|
中文字幕亚洲区
|
男女羞羞视频在线看
|