久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4091|回復(fù): 0
收起左側(cè)

uPD6121G;紅外線發(fā)射/編碼與接收/解碼

[復(fù)制鏈接]
ID:411040 發(fā)表于 2018-10-17 12:44 | 顯示全部樓層 |閱讀模式
                             值得擁有的資料
是來自平時學(xué)習(xí)積累總結(jié)的
有問題的地方肯定有的
還請大家批評指正!
紅外線信號的傳輸基于MCU的調(diào)制與解調(diào)的研究

摘要:本研究方案由發(fā)射和接收兩大部分組成
都是基于MCU實現(xiàn)軟件對紅外線信號調(diào)制與解調(diào)
為紅外線非定向應(yīng)用奠定研究基礎(chǔ)
關(guān) 鍵 詞:uPD6121G;紅外線發(fā)射/編碼與接收/解碼;
Research MCU-based infrared signal transmission
           modulation and demodulation
LUOKai,HOUJian
Abstract:The program consists of transmitting and receiving two major components, are software-based MCU to achieve infrared signal modulation and demodulation.
Keywords:uPD6121G;Infrared remote launch/encoding/decoding and receiving
1 引 言
  紅外線是近距離、高速無線通信的一種手段
一直以來
紅外遙控、遙測技術(shù)在玩具、家電制造及工業(yè)測控等領(lǐng)域得到了廣泛的應(yīng)用、室內(nèi)通信的手段
紅外線具有無線電無法比擬的優(yōu)勢
以前的紅外線遙控系統(tǒng)以定向發(fā)射、接收為主流應(yīng)用
因此一般為單用戶系統(tǒng)
隨著非方向性發(fā)射、接收
構(gòu)成系統(tǒng)成為了可能
之前紅外線信號都是采用固定的編碼芯片和解碼芯片實現(xiàn)對紅外線的編碼的調(diào)制與解調(diào)
這樣的信號無法隨用戶的需求或構(gòu)成真正意義上的系統(tǒng)的要求變化
因此本研究方案即是:通過基于MCU及外圍器件為基礎(chǔ)
實現(xiàn)用軟件的方式對紅外線進行調(diào)制與解調(diào)的
這樣可以更好的控制紅外線信號
使設(shè)計者設(shè)計出更多與紅外線有關(guān)的無線段距離通信電路
2 系統(tǒng)研究方案
2.1系統(tǒng)總體方案
  紅外系統(tǒng)由發(fā)射和接收兩大部分組成
應(yīng)用編/解碼專用集成電路芯片來進行控制操作
如圖1所示
發(fā)射部分包括鍵盤矩陣、編碼調(diào)制、紅外發(fā)送器;接收部分包括光、電轉(zhuǎn)換放大器、解調(diào)、解碼電路
  
  
  
  
  
  
  
     圖1 紅外線遙控系統(tǒng)結(jié)構(gòu)圖
2.2紅外線調(diào)制與解調(diào)的介紹
紅外線調(diào)制與解調(diào)原理
    發(fā)射器專用芯片很多
根據(jù)編碼格式可以分成兩大類
這里我們以運用比較廣泛
解碼比較容易的一類來加以說明
現(xiàn)以日本NEC的uPD6121G組成發(fā)射電路為例說明編碼與解碼原理
當發(fā)射器按鍵按下后
即有遙控碼發(fā)出
所按的鍵不同遙控編碼不同
對應(yīng)的解碼也就不同
這種遙控碼具有以下特征:
  采用脈寬調(diào)制的串行碼
以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進制的"0";以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進制的"1"
其波形如圖2所示
      
圖2 遙控碼的"0"和"1" (注:所有波形為接收端的與發(fā)射相反)
  上述"0"和"1"組成的32位二進制碼經(jīng)38kHz的載頻進行二次調(diào)制以提高發(fā)射效率
達到降低電源功耗的目的
然后再通過紅外發(fā)射二極管產(chǎn)生紅外線向空間發(fā)射
如圖3所示
      
     圖3 遙控信號編碼波形圖
  UPD6121G產(chǎn)生的遙控編碼是連續(xù)的32位二進制碼組
其中前16位為用戶識別碼
能區(qū)別不同的電器設(shè)備
防止不同機種遙控碼互相干擾
該芯片的用戶識別碼固定為十六進制01H;后16位為8位操作碼(功能碼)及其反碼
UPD6121G最多額128種不同組合的編碼
  遙控器在按鍵按下后
周期性地發(fā)出同一種32位二進制碼
周期約為108ms
一組碼本身的持續(xù)時間隨它包含的二進制"0"和"1"的個數(shù)不同而不同
大約在45~63ms之間
圖4為發(fā)射波形圖

      
     圖4 遙控連發(fā)信號波形
  當一個鍵按下超過36ms
振蕩器使芯片激活
將發(fā)射一組108ms的編碼脈沖,這108ms發(fā)射代碼由一個起始碼(9ms),一個結(jié)果碼(4.5ms),低8位地址碼(9ms~18ms),高8位地址碼(9ms~18ms),8位數(shù)據(jù)碼(9ms~18ms)和這8位數(shù)據(jù)的反碼(9ms~18ms)組成
如果鍵按下超過108ms仍未松開
接下來發(fā)射的代碼(連發(fā)代碼)將僅由起始碼(9ms)和結(jié)束碼(2.5ms)組成
      
        圖5 引導(dǎo)碼                           圖6連發(fā)碼
  代碼格式(以接收代碼為準
接收代碼與發(fā)射代碼反向)
①位定義
②單發(fā)代碼格式
③連發(fā)代碼格式 注:代碼寬度算法:
16位地址碼的最短寬度:1.12×16=18ms
  16位地址碼的最長寬度:2.24ms×16=36ms
易知8位數(shù)據(jù)代碼及其8位反代碼的寬度和不變:
  (1.12ms+2.24ms)×8=27ms
∴32位代碼的寬度為(18ms+27ms)~(36ms+27ms) 1. 解碼的關(guān)鍵是如何識別"0"和"1"
從位的定義我們可以發(fā)現(xiàn)"0"、"1"均以0.56ms的低電平開始
不同的是高電平的寬度不同
"0"為0.56ms,"1"為1.68ms,所以必須根據(jù)高電平的寬度區(qū)別"0"和"1"
如果從0.56ms低電平過后
開始延時
0.56ms以后
若讀到的電平為低
說明該位為"0"
反之則為"1"
為了可靠起見
延時必須比0.56ms長些
但又不能超過1.12ms,否則如果該位為"0"
讀到的已是下一位的高電平
因此取(1.12ms+0.56ms)/2=0.84ms最為可靠
一般取0.84ms左右均可
    根據(jù)碼的格式
應(yīng)該等待9ms的起始碼和4.5ms的結(jié)果碼完成后才能讀碼
2.2.1紅外線調(diào)制的硬件實現(xiàn)
    發(fā)射部分包括單片機最小系統(tǒng)、鍵盤矩陣、555紅外發(fā)射電路
他們一起構(gòu)成了紅外線獨立發(fā)射電路
如圖7所示
"0"和"1"組成的32位二進制碼經(jīng)555芯片電路產(chǎn)生的38kHz的載頻進行二次調(diào)制以提高發(fā)射效率
達到降低電源功耗的目的
然后再通過紅外發(fā)射二極管產(chǎn)生紅外線向接收端發(fā)射信號



圖7 紅外線獨立發(fā)射電路
2.2.2紅外線調(diào)制的軟件實現(xiàn)
  通過定時器的方式對紅外數(shù)據(jù)進行軟件編碼
再調(diào)制到載波發(fā)送出去
  
//本程序?qū)?yīng)11.0592M晶振//
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit IR=P1^6;          //定義發(fā)射端口
sbit speak=P1^1;
bit flag,f2,f4,f8,f16,f32;
uchar irtime=0,key;         //定義計時變量、鍵盤取值變量
void delay(uint ms) // 毫秒級延時(AT89C52 @ 11.0592MHz)
{
uint ti;
while(ms--)
{
for(ti=0;ti<112;ti++){}//112
}
}
/*******************定時器0方式2初始化函數(shù)***************/
void initT0()
{
  TMOD=0x02;        //方式2
  TF0=0;         //清溢出標志
  ET0=1;         //使能定時器0中斷
  TH0=0;         //賦初值
  TL0=0;
  EA=1;          //開總中斷
//  TR0=1;         //啟動定時
}            

/********************定時器0中斷服務(wù)函數(shù)****************/
void Timer0() interrupt 1  using 1
{
  irtime++;         //中斷計數(shù)
  switch(irtime)
   {
    case 2:f2=1;break;      //高0.56ms標志位
case 4:f4=1;break;      //低0.56ms標志位
case 8:f8=1;break;      //地1.68ms標志位
case 16:f16=1;break;     //高4.5ms標志位
case 32:f32=1;break;     //低4.5ms標志位
}
}      

/*********************鍵盤掃描函數(shù)*********************/
//uchar void keyscan(void)   //鍵盤掃描函數(shù)
使用行列反轉(zhuǎn)掃描法
void keyscan()
{
     
/*
uchar cord_h,cord_l;                    //行列值中間變量
P3=0x0f;                                  //行線輸出全為0
cord_h=P3&0x0f;                           //讀入列線值
if(cord_h!=0x0f)                          //先檢測有無按鍵按下
{
  delay(400);                              //去抖
  if(cord_h!=0x0f)
  {
    cord_h=P3&0x0f;                        //讀入列線值
    P3=cord_h|0xf0;                        //輸出當前列線值
    cord_l=P3&0xf0;                        //讀入行線值
    return(cord_h+cord_l);                 //鍵盤最后組合碼值
   }
  }return(0xff);                           //返回該值     */
key=0xeb;
flag=1;            //得到按鍵值就置標志位
   }
/*********************引導(dǎo)碼發(fā)送函數(shù)*******************/
void sendstart()
{
   IR=1;

while(!f16);IR=0;f16=0;        //高電平4.5ms
while(!f32);IR=1;irtime=0;f32=0;      //低電平4.5ms
       f2=0;           //清零標志位
    f4=0;
    f8=0;
  }

/*******************8位數(shù)據(jù)發(fā)送函數(shù)********************/
void sendnum(uchar t)
{
uchar b=0,i;
   //  t=key;
for(i=0;i<8;i++)           //發(fā)送8位數(shù)據(jù)
  {
   
     b=t&0x01;        //取出地i位
     t=t>>1;
    if(b==0)          //為1時發(fā)送
      {
        IR=1;
     while(!f2);IR=0;f2=0;     //等待時間 完成  0.56ms
     while(!f4);IR=1;irtime=0;f4=0;   //0.56ms
     }
    else          //為0時發(fā)送
       {
        IR=1;
     while(!f2);IR=0;f2=0;     //等待時間完成0.56ms
     while(!f8);irtime=0;IR=1;f8=0;    //1.68ms
  f4=0;         //清標志
     }
   }
}

/*********************終止碼發(fā)送函數(shù)*******************/
/*void sendend()           //終止碼自由定義
{
sendnum(0x0f);           
  }   */

/*******************16位客戶地址碼發(fā)送函數(shù)********************/
void sendadd()           //客戶地址碼自由定義
{
sendnum(0xfb);
sendnum(0xed);
}

/*********************編碼發(fā)送函數(shù)********************/
void send()
{
   TR0=1;              //啟動定時
while(flag)
{
   sendstart();                //發(fā)送起始碼
   sendadd();             //發(fā)送客戶地址碼
   sendnum(key);         //發(fā)送數(shù)據(jù)碼
   sendnum(~key);           //發(fā)送數(shù)據(jù)反碼
   //sendend();            //發(fā)送終止碼
   irtime=0;
   flag=!flag;
  }
TR0=0;                  //關(guān)閉定時
}

/*********************主函數(shù)**********************/
void main()
{
  IR=0;
// P1=0;            //復(fù)位后賦初值
  initT0();           //調(diào)用定時器0初始化函數(shù)

while(1)           //進入循環(huán)
實時監(jiān)控
   {
keyscan();          //調(diào)用鍵盤掃描函數(shù)
send();           //調(diào)用編碼發(fā)射函數(shù)
     
  }
}
2..2.3紅外線解調(diào)的硬件實現(xiàn)
  一體化紅外線接收器是一種集紅外線接收和放大于一體
不需要任何外接元件
就能完成從紅外線接收到輸出與TTL電平信號兼容的所有工作
而體積和普通的塑封三極管大小一樣
它適合于各種紅外線遙控和紅外線數(shù)據(jù)傳輸
它主要包括了收部分包括光、電轉(zhuǎn)換放大器、解調(diào)、解碼電路
如圖8所示

圖8 紅外線接收電路
2.2.4紅外線解調(diào)的軟件實現(xiàn)
  這是一個用紅外線控制數(shù)碼管顯示的樣例 (部分C程序)
.
  void Ir_work(void)//紅外鍵值散轉(zhuǎn)程序
  {
       switch(IRcord[2])//判斷第三個數(shù)碼值
          {
    case fe:P1=0xfe;break;//1 顯示相應(yīng)的按鍵值
    case fd:P1=0xfd;break;//2
    case fb:P1=0xfb;break;//3
    case f7:P1=0xf7;break;//4
    case ef:P1=0xef;break;//5
    case df:P1=0xdf;break;//6
    case bf:P1=0xbf;break;//7
    case 7f:P1=0x7f;break;//8
    }
    irpro_ok=0;//處理完成標志
  }
/*****************************************************************/
void Ircordpro(void)//紅外碼值處理函數(shù)
{
  unsigned char i, j, k;
  unsigned char cord,value;
  k=1;
  for(i=0;i<4;i++)//處理4個字節(jié)
     {
      for(j=1;j<=8;j++) //處理1個字節(jié)8位
         {
          cord=irdata[k];
          if(cord>7)//大于某值為1
      {
             value=value|0x80;
   }
          else
      {
             value=value;
   }
          if(j<8)
      {
    value=value>>1;
   }
           k++;
         }
     IRcord=value;
     value=0;     
     } irpro_ok=1;//處理完畢標志位置1
   
}
void main(void)
{
EX0init(); // Enable Global Interrupt Flag
TIM0init();//初始化定時器0
P2=0x00;//1位數(shù)碼管全部顯示
while(1)//主循環(huán)
   {
    if(irok)
   {   
    Ircordpro();//碼值處理
     irok=0;
   }
    if(irpro_ok)//step press key
   {
    Ir_work();//碼值識別散轉(zhuǎn)
     }
   }
}
3 總結(jié)
  單片機控制的紅外線通信系統(tǒng)具有硬件簡單、成本低廉、編程方便、通信可靠性高的特點
實現(xiàn)了通信雙方非接觸式的數(shù)據(jù)傳送
這種方案也可用于其它遙控、遙測應(yīng)用場合
實際應(yīng)用證明,該系統(tǒng)具有很好的適用性、擴展性與靈活性,能滿足大部分紅外傳輸系統(tǒng)的要求
  參 考 文 獻
   [1]張毅剛.單片機原理與應(yīng)用設(shè)計.電子工業(yè)出版社,2008:32-42
     [2]郭天祥.新編51單片機C語言教程.電子工業(yè)出版社,2009.56-78
     [3]張?zhí)旆?51單片機C語言開發(fā)詳解.電子工業(yè)出版社,2008.112-148
     
     









回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产欧美精品 | 午夜精品一区二区三区在线 | 日本成人久久 | 久久成人人人人精品欧 | 久久成人在线视频 | 久久99蜜桃综合影院免费观看 | 亚洲精品一区二区 | 91综合网| 亚洲第一成年免费网站 | 午夜欧美一区二区三区在线播放 | 国产精品亚洲精品日韩已方 | 91精品国产91久久久久久丝袜 | 精品www| 99re国产精品| 亚洲欧美中文日韩在线v日本 | 久草精品视频 | 男人天堂色| 久久国产精品99久久久久 | 国产精品免费观看 | 视频一区 亚洲 | 色吧综合| 一区二区三区在线电影 | 国产在线精品免费 | 新疆少妇videos高潮 | 99精品久久| 一级欧美一级日韩片免费观看 | 人人干人人干人人干 | 99国产精品久久久久久久 | 久久av网| 国产精品麻 | 国产精品美女久久久久久免费 | 精品欧美一区二区三区免费观看 | 巨大黑人极品videos精品 | 国产福利在线视频 | 懂色av一区二区三区在线播放 | 天天摸天天看 | 欧美一极视频 | 9191成人精品久久 | 久久亚洲国产精品 | 亚洲精品国产成人 | 成人在线观看免费 |