4.23.1概述
人的眼睛能看到的可見(jiàn)光按波長(zhǎng)從長(zhǎng)到短排列,依次為紅、橙、黃、綠、青、藍(lán)、紫。其中紅光的波長(zhǎng)范圍為0.62~0.76μm;紫光的波長(zhǎng)范圍為0.38~0.46μm。比紫光光波長(zhǎng)更短的光叫紫外線,比紅光波長(zhǎng)更長(zhǎng)的光叫紅外線最廣義地來(lái)說(shuō),傳感器是一種能把物理量或化學(xué)量轉(zhuǎn)變成便于利用的電信號(hào)的器件,紅外傳感器就是其中的一種。隨著現(xiàn)代科學(xué)技術(shù)的發(fā)展,紅外線傳感器的應(yīng)用已經(jīng)非常廣泛。
4.23.1.1紅外接收頭工作原理
紅外接收頭一般是接收、放大、解調(diào)一體頭,一般紅外信號(hào)經(jīng)接收頭解調(diào)后,數(shù)據(jù)“0”和“1”的區(qū)別通常體現(xiàn)在高低電平的時(shí)間長(zhǎng)短或信號(hào)周期上,單片機(jī)解碼時(shí),通常將接收頭輸出腳連接到單片機(jī)的外部中斷,結(jié)合定時(shí)器判斷外部中斷間隔的時(shí)間從而獲取數(shù)據(jù)。重點(diǎn)是找到數(shù)據(jù)“0”與“1”間的波形差別。
3條腿的紅外接收頭一般是接收、放大、解調(diào)一體化,接收頭輸出的是解調(diào)后的數(shù)據(jù)信號(hào),單片機(jī)里面需要相應(yīng)的讀取程序。具體詳細(xì)的使用參數(shù)和時(shí)序請(qǐng)參考官方技術(shù)手冊(cè)。
4.23.1.2在STM32實(shí)驗(yàn)系統(tǒng)中紅外系統(tǒng)的組成在我們是試驗(yàn)中使用的是紅外線遙控器。因?yàn)榧t外線遙控器已經(jīng)被廣泛的使用在各類型的家電產(chǎn)品上,它的出現(xiàn)給使用電器提供了很多的便利。紅外線系統(tǒng)一般由紅外發(fā)射裝置和紅外接收設(shè)備兩大部分組成。紅外發(fā)射裝置又可由鍵盤電路、紅外編碼芯片、電源和紅外發(fā)射電路組成。紅外接收設(shè)備可由紅外接收電路、紅外解碼芯片、電源和應(yīng)用電路組成。通常為了使信號(hào)更好的被發(fā)射端發(fā)送出去,經(jīng)常會(huì)將二進(jìn)制數(shù)據(jù)信號(hào)調(diào)制成脈沖信號(hào),通過(guò)紅外發(fā)射管發(fā)射。常用的有通過(guò)脈沖寬度來(lái)實(shí)現(xiàn)信號(hào)調(diào)制的脈寬調(diào)制(PWM)和通過(guò)脈沖串之間的時(shí)間間隔來(lái)實(shí)現(xiàn)信號(hào)調(diào)制(PPM)兩種方法。
1、常用的紅外發(fā)光二極管其外形和發(fā)光二極管LED相似,發(fā)出紅外光。管壓降約1.4v,工作電流一般小于20mA。為了適應(yīng)不同的工作電壓,回路中常常串有限流電阻。
一些彩電紅外遙控器,其紅外發(fā)光管的工作脈沖占空比約為1/3-1/4;一些電器產(chǎn)品紅外遙控器,其占空比是1/10。減小脈沖占空比還可使小功率紅外發(fā)光二極管的發(fā)射距離大大增加。常見(jiàn)的紅外發(fā)光二極管,其功率分為小功率(1mW-10mW)、率(20mW-50mW)和大功率(50mW-100mW以上)三大類。紅外發(fā)光二極管由紅外輻射效率高的材料(常用砷化鎵GaAs)制成PN結(jié),外加正向偏壓向PN結(jié)注入電流激發(fā)紅外光。光譜功率分布為中心波長(zhǎng)830~950nm,半峰帶寬約40nm左右。
2、紅外接收頭的種類很多,如右圖所示。引腳定義也不相同,一般都有三個(gè)引腳,包括供電腳,接地和信號(hào)輸出腳。根據(jù)發(fā)射端調(diào)制載波的不同應(yīng)選用相應(yīng)解調(diào)頻率的接收頭。具體的選型要參考廠家選型手冊(cè)。
紅外接收頭內(nèi)部放大器的增益很大,很容易引起干擾,因此在接收頭的供電腳上須加上濾波電容,一般在22uf以上。有的廠家建議在供電腳和電源之間接入330歐電阻,進(jìn)一步降低電源干擾。
4.23.1.3紅外發(fā)光二極管簡(jiǎn)易測(cè)試
高亮度LED、紅外LED、光電三極管外形是一樣的,非常容易搞混,因此需要通過(guò)簡(jiǎn)易測(cè)試將它們區(qū)分出來(lái)。用指針式萬(wàn)用表(1k擋)黑表筆接陽(yáng)極、紅表筆接陰極(應(yīng)采用帶夾子的表筆)測(cè)得正向電阻在20~40kΩ;黑表筆接陰極、紅表筆接陽(yáng)極測(cè)得反向電阻大于500kΩ以上者是紅外發(fā)光二極管。透明樹(shù)脂封裝的可用目測(cè)法:有圓形淺盤的極是負(fù)極。若正向電阻在200kΩ以上(或指針微動(dòng)),反向電阻接近∞者是普通發(fā)光二極管。若黑表筆接短腳,紅表筆接長(zhǎng)腳,遮住光線時(shí)電阻大于200kΩ,有光照射時(shí)阻值隨光線強(qiáng)弱而變化(光線強(qiáng)時(shí),電阻小),這是光電三極管。4.23.1.4紅外遙控常用的載波頻率
紅外遙控常用的載波頻率為38kHz,這是由發(fā)射端所使用的455kHz陶振來(lái)決定的。在發(fā)射端要對(duì)晶振進(jìn)行整數(shù)分頻,分頻系數(shù)一般取12,所以455kHz÷12≈37.9kHz≈38kHz。也有一些遙控系統(tǒng)采用36kHz、40kHz、56kHz等,一般由發(fā)射端晶振的振蕩頻率來(lái)決定。紅外遙控的特點(diǎn)是不影響周邊環(huán)境、不干擾其它電器設(shè)備。由于其無(wú)法穿透墻壁,故不同房間的家用電器可使用通用的遙控器而不會(huì)產(chǎn)生相互干擾;電路調(diào)試簡(jiǎn)單,只要按給定電路連接無(wú)誤,一般不需任何調(diào)試即可投入工作;編解碼容易,可進(jìn)行多路遙控。4.23.2數(shù)據(jù)格式熟悉數(shù)據(jù)格式是編程的基礎(chǔ)。下面我們著重說(shuō)明紅外發(fā)射和接收的數(shù)據(jù)格式。在同一個(gè)遙控電路中通常要使用實(shí)現(xiàn)不同的遙控功能或區(qū)分不同的機(jī)器類型,這樣就要求信號(hào)按一定的編碼傳送,編碼則會(huì)由編碼芯片或電路完成。對(duì)應(yīng)于編碼芯片通常會(huì)有相配對(duì)的解碼芯片或包含解碼模塊的應(yīng)用芯片。在實(shí)際的產(chǎn)品設(shè)計(jì)或業(yè)余電子制作中,編碼芯片并一定能完成我們要求的功能,這時(shí)我們就需要了解所使用的編碼芯片到底是如何編碼的。只有知道編碼方式,我們才可以使用單片機(jī)或數(shù)字電路去定制解碼方案。l載波波形使用455KHz晶體,經(jīng)內(nèi)部分頻電路,信號(hào)被調(diào)制在37.91KHz,占空比為3分之1。調(diào)制頻率(晶振使用455KHz時(shí))fCAR=1/Tc=fOSC/12≈38KHz(fOSC是晶振頻率)占空比=T1/Tc=1/3數(shù)據(jù)格式包括了引導(dǎo)碼、用戶碼、數(shù)據(jù)碼和數(shù)據(jù)碼反碼,編碼總占32位。數(shù)據(jù)反碼是數(shù)據(jù)碼反相后的編碼,編碼時(shí)可用于對(duì)數(shù)據(jù)的糾錯(cuò)。注意:第二段的用戶碼也可以在遙控應(yīng)用電路中被設(shè)置成第一段用戶碼的反碼。
利用實(shí)驗(yàn)板上集成的VS838紅外接收電路,通過(guò)程序設(shè)計(jì)把接收到的紅外線鍵盤編碼打印輸出到計(jì)算機(jī)顯示。硬件設(shè)計(jì)見(jiàn)圖4.23.1紅外線發(fā)送原理圖;圖4.23.2紅外線接收原理圖。
紅外線發(fā)送控制是CPU的第59管腳直接控制,控制三極管Q6的通斷頻率來(lái)使紅外發(fā)光二極管(IrDA)發(fā)光。
紅外線接收控制與CPU的第2管腳相連接,接收到的紅外編碼直接發(fā)送到CPU,CPU通過(guò)程序解碼。
4.23.5軟件設(shè)計(jì)1、main.c文件
/**************************************************************************************************
#include "timer.h"
#include "IR1.h"
void RCC_Configuration(void);
void GPIO_Normal_Config(void);
extern u8 gdata;//LED的狀態(tài)0/1//只能聲明,不能定義
int main(void) {
SystemInit();//初始化系統(tǒng),使得系統(tǒng)頻率為72M
systick_init();//配置Systick,使得1ms產(chǎn)生中斷
RCC_Configuration();//GPIO使能
GPIO_Normal_Config();//GPIO初始化
IR_Init();//紅外初始化
while(1) {
switch(gdata) {
case 1:
delay_ms(10);
GPIO_SetBits(GPIOA,GPIO_Pin_8);//輸出高電平紅外信號(hào)指
break;
case 0:
delay_ms(10);
GPIO_ResetBits(GPIOA,GPIO_Pin_8);//輸出低電平
break;
}
}
}
void RCC_Configuration(void) {
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA,ENABLE);
}