日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機電之家資源網(wǎng)
單片機首頁|單片機基礎|單片機應用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓信息
贊助商
基于aduc842瞬態(tài)波形存儲器
基于aduc842瞬態(tài)波形存儲器
 更新時間:2009-7-9 16:50:15  點擊數(shù):0
【字體: 字體顏色

四、總結(jié) 在這個電路中,通過模擬處理模塊和單片機配合實現(xiàn)對輸入信號的自動放大,當輸入信號在0.002V至2V之間,使單片機采樣信號始終保持在0.2V至2V之間。同時利用ADuC842內(nèi)部的AD和DA對信號采樣并同步輸出,在這個過程中,把采樣值保存在數(shù)組中,通過按鍵實現(xiàn)回放。       附件: 主程序 #include "zlg7290b.h" //SCLK--SCL    MOSI--SDA   INT--INT0 #define uchar unsigned char #define uint  unsigned int bit con_caiji=0; bit tongb_hf=0; sbit P0_0=P2^0; sbit P0_1=P2^1; sbit P0_2=P0^2; sbit P0_3=P0^3; unsigned int k,tb_shuzu; unsigned int j=0,i=0; unsigned char caiji_2=100; unsigned char panduan,panduan1; unsigned int xdata tongbu[4000]={0}; /****************************************** 函數(shù):void DispValue(unsigned char x, unsigned char dat) 功能:通過ZLG7290 顯示一個字符型數(shù)據(jù) 說明:顯示范圍:0--255 參數(shù):x,顯示起始位置。dat,需要顯示的數(shù)據(jù) ******************************************/ void DispValue(unsigned char x, unsigned char dat) {    unsigned char d;    d = dat / 10;    ZLG7290_Download(x,0,0,d);    d = dat - d * 10;    ZLG7290_Download(x+1,0,0,d); } /****************************************** 函數(shù):unsigned int ADC(unsigned char channel) 功能:控制單片機的AD的工作 說明:無 參數(shù): channel,AD通道選擇 ******************************************/ unsigned int ADC(unsigned char channel) {     ADCCON2 = channel;     //選擇通道     SCONV = 1;             //啟動轉(zhuǎn)換     while(SCONV);          //等待轉(zhuǎn)換完成     return((ADCDATAH & 0x0F) * 256 + ADCDATAL);       } /****************************************** 函數(shù):void DAC1(unsigned int da_data) 功能:控制單片機DA1的工作 說明:無 參數(shù):da_data,AD轉(zhuǎn)換的數(shù)字量 ******************************************/ void DAC1(unsigned int da_data)     {     DAC1H = da_data >> 8;     DAC1L = da_data; } /****************************************** 函數(shù):INT0_SVC() 功能:ZLG7290 鍵盤中斷服務程序 說明:中斷觸發(fā)方式選擇負邊沿觸發(fā),       因此不必等待中斷請求信號恢復為高電平 參數(shù):無 ******************************************/ void INT0_SVC() interrupt 2 {     unsigned char KeyValue=1;     unsigned char RepeatCnt=0;     unsigned char FunctionKey=0;     EA=0;     FunctionKey=gets2(ZLG7290_FunctionKey);   //讀功能計數(shù)器的值     KeyValue=gets2(ZLG7290_Key);              //讀鍵值     RepeatCnt=gets2(ZLG7290_RepeatCnt);       //讀連擊計數(shù)器     DispValue(0,KeyValue);                    //顯示連鍵值     if(KeyValue==1)     {         tongb_hf=0;         caiji_2=0;     }     if(KeyValue==2)     {         tongb_hf=1;         j=0;     }     P0_0=P0_0;     P0_1=P0_1;     EA=1; } /****************************************** 函數(shù):caiji_data() 功能:數(shù)據(jù)采集觸發(fā) 說明:無 參數(shù):無 ******************************************/ void caiji_data() interrupt 0 {     EA=0;     caiji_2++;     panduan++;     panduan1++;     if(caiji_2==4)     {         con_caiji=1;         i=0;     }     if(caiji_2==60)     {         con_caiji=0;         tb_shuzu=i;     }     if(caiji_2>=200)     {         caiji_2=80;     }     if(panduan==30)     {         panduan=0;     }     EA=1;   } /****************************************** 函數(shù):ad_start() 功能:AD轉(zhuǎn)換,同時DA進行,實現(xiàn)同步輸出 說明:無 參數(shù):無 ******************************************/ void ad_start() interrupt 1 {     uint temp_data;     EA=0;     TH0=(65536-1800)/256;     TL0=(65536-1800)%256;     temp_data = ADC(5);     if(tongb_hf==0)     {         DAC1(temp_data);         if(con_caiji==1)         {             tongbu[i]=temp_data;             i++;         }               }     if(tongb_hf==1)     {         DAC1(tongbu[j]);         j++;         if(j==tb_shuzu)         {             j=1;         }      }          EA=1;    } void main() {     uint k;     uchar x1,x2,x3,x4;     uchar fanda;     SystemInit();               //7290復位     PLLCON = 0x00;              //for 842     I2CCON=0xa8;                //I2C初始化     I2C_Init();                 //I2C初始化 7290用     ClearAll();                 //7290全部清除     ADCCON1 = 0xBC;             //ADC上電,內(nèi)部基準,clk 8分頻     DACCON = 0x16;              //DAC采用內(nèi)部ref做基準     TMOD=0x01;                 //定時器0方式1     TH0=(65536-1000)/256;     TL0=0;     IT0 = 1;                     //負邊沿觸發(fā)中斷     EX0 = 1;                     //允許外部中斷     EA = 1;                      //開中斷     ET0=1;                       //開c0的中斷     EX1=1;                       //開中斷 int1     TR0=1;                       //啟動c0記時      PT0=1;                       //同步回放中斷優(yōu)先     k=5000;     while(k--)     {        P2=0x00;     }           while(1)     {         while(panduan!=28)         {             if(P0_3!=1)             {                 x1++;             }             if(P0_2!=0)             {                 x2++;                }         }         if(panduan==29)         {             x3=x1;             x4=x2;             x1=0;             x2=0;         }         if((fanda==10)&&(x4==0)&&(x3==0))         {             P0_0=1;             P0_1=0;             fanda=100;         }         if(P0_2==1)         {             P0_0=0;             P0_1=0;             }         if(x4==0&&x3==0)         {             if(P0_0==1&& P0_1==0)             {                 P0_0=1;                 P0_1=0;             }             else             {                 P0_0=0;                 P0_1=1;                 fanda=10;             }         }     } } 頭文件1 /******************************************************************** ZLG7290.c 數(shù)碼管顯示與鍵盤管理芯片ZLG7290 的標準80C51 驅(qū)動程序C 文件 Copyright (c) 2005,廣州周立功單片機發(fā)展有限公司 All rights reserved. 本程序僅供學習參考,不提供任何可靠性方面的擔保;請勿用于商業(yè)目的 ******************************************************************/ #include "i2c.h" #include "zlg7290.h" /**************************************************** 函數(shù):ZLG7290_WriteReg() 功能:向ZLG7290 的某個內(nèi)部寄存器寫入數(shù)據(jù) 參數(shù): RegAddr:ZLG7290 的內(nèi)部寄存器地址 dat:要寫入的數(shù)據(jù) 返回: 0:正常 1:訪問ZLG7290 時出現(xiàn)異常 *************************************************/ /*bit ZLG7290_WriteReg(unsigned char RegAddr, char dat) { bit b; b = I2C_Puts(ZLG7290_I2C_ID,RegAddr,1,&dat,1); return b; }*/ /*********************************************** 函數(shù):ZLG7290_cmd() 功能:向ZLG7290 發(fā)送控制命令 參數(shù): cmd0:寫入CmdBuf0 寄存器的命令字(第1 字節(jié)) cmd1:寫入CmdBuf1 寄存器的命令字(第2 字節(jié)) 返回: 0:正常 1:訪問ZLG7290 時出現(xiàn)異常 **************************************************/ bit ZLG7290_cmd(char cmd0, char cmd1) { bit b; char buf[2]; buf[0] = cmd0; buf[1] = cmd1; b = I2C_Puts(ZLG7290_I2C_ID,ZLG7290_CmdBuf,1,buf,2); return b; } /****************************************************** 函數(shù):ZLG7290_SegOnOff() 功能:段尋址,單獨點亮或熄滅數(shù)碼管(或LED)中的某一段 參數(shù): seg:取值0~63,表示數(shù)碼管(或LED)的段號 b:0 表示熄滅,1 表示點亮 返回: 0:正常 1:訪問ZLG7290 時出現(xiàn)異常 說明: 在每一位數(shù)碼管中,段號順序按照“a,b,c,d,e,f,g,dp”進行 *******************************************************/ /*bit ZLG7290_SegOnOff(char seg, bit b) { char cmd; cmd = seg & 0x3F; if ( b ) cmd |= 0x80; return ZLG7290_cmd(0x01,cmd); }*/ /************************************************* 函數(shù):ZLG7290_Download() 功能:下載數(shù)據(jù)并譯碼 參數(shù): addr:取值0~7,顯示緩存DpRam0~DpRam7 的編號 dp:是否點亮該位的小數(shù)點,0-熄滅,1-點亮 flash:控制該位是否閃爍,0-不閃爍,1-閃爍 dat:取值0~31,表示要顯示的數(shù)據(jù) 返回: 0:正常 1:訪問ZLG7290 時出現(xiàn)異常 說明: 顯示數(shù)據(jù)具體的譯碼方式請參見ZLG7290 的數(shù)據(jù)手冊 *************************************************/ bit ZLG7290_Download(char addr, bit dp, bit flash, char dat) { char cmd0; char cmd1; cmd0 = addr & 0x0F; cmd0 |= 0x60; cmd1 = dat & 0x1F; if ( dp ) cmd1 |= 0x80; if ( flash ) cmd1 |= 0x40; return ZLG7290_cmd(cmd0,cmd1); } /******************** 函數(shù):SystemInit() 功能:系統(tǒng)初始化 ********************/ void SystemInit()   //等待7290初始化完畢 {      unsigned int i;     for(i = 0;i < 60000;i ++); } /************************* 函數(shù):ClearAll() 功能:清除所有顯示 *************************/ void ClearAll() {  unsigned char x;  for ( x=0; x<8; x++ )  {    ZLG7290_Download(x,0,0,31);    //00011111,表示不顯示,循環(huán)8次,將8個數(shù)碼管顯示都清除  } } 頭文件2 #include<ADuC842.h> #include <stdio.h> #define I2C_SCL MCO                  //ADUC831的I2CCON寄存器中的1位,時鐘位 #define I2C_SDA_O MDO                //ADUC831的I2CCON寄存器中的1位,數(shù)據(jù)輸出 #define I2C_SDA_I MDI                //ADUC831的I2CCON寄存器中的1位,數(shù)據(jù)輸入 #define IO_ENABLE  MDE               //ADUC831的I2CCON寄存器中的1位,數(shù)據(jù)輸入/輸出的使能 #define ZLGWR 0x70                   //ZLG7290的寫地址 #define ZLGRD 0x71                   //ZLG7290的讀地址 /************************* I2C延時程序 *************************/ void I2C_Delay() {   char i;   for(i=0;i<50;i++); } /********************************************************* 函數(shù):I2C_Init() 功能:I2C 總線初始化,使總線處于空閑狀態(tài) 說明:在main()函數(shù)的開始處,通常應當要執(zhí)行一次本函數(shù) ************************************************************/ void I2C_Init() { IO_ENABLE=1;                  //使能為1,則為輸出;為0,則為輸入 I2C_SCL = 1; I2C_Delay(); I2C_SDA_O = 1; I2C_Delay(); } /************************************************************** 函數(shù):I2C_Start() 功能:產(chǎn)生I2C 總線的起始狀態(tài) 說明: SCL處于高電平期間,當SDA 出現(xiàn)下降沿時啟動I2C 總線 不論SDA 和SCL 處于什么電平狀態(tài),本函數(shù)總能正確產(chǎn)生起始狀態(tài) 本函數(shù)也可以用來產(chǎn)生重復起始狀態(tài) 本函數(shù)執(zhí)行后,I2C 總線處于忙狀態(tài) ******************************************************************/ void I2C_Start() { IO_ENABLE=1; I2C_SDA_O = 1; I2C_Delay(); I2C_SCL = 1; I2C_Delay(); I2C_SDA_O = 0; I2C_Delay(); I2C_SCL = 0; I2C_Delay(); } /***************************************** 函數(shù):I2C_Write() 功能:向I2C 總線寫1 個字節(jié)的數(shù)據(jù) 參數(shù): dat:要寫到總線上的數(shù)據(jù) ********************************************/ void I2C_Write(char dat) {   unsigned char t = 8;   IO_ENABLE=1;   do   {     I2C_SDA_O = (bit)(dat & 0x80);     dat <<= 1;     I2C_SCL = 1;     I2C_Delay();     I2C_SCL = 0;     I2C_Delay();   } while ( --t != 0 ); } /************************************** 函數(shù):I2C_Read() 功能:從從機讀取1 個字節(jié)的數(shù)據(jù) 返回:讀取的一個字節(jié)數(shù)據(jù) **************************************/ char I2C_Read() { char dat=0; unsigned char t = 8; do { I2C_SCL = 0; I2C_Delay(); I2C_SCL = 1; I2C_Delay(); dat <<= 1; IO_ENABLE=0; if ( I2C_SDA_I ) dat |= 0x01; I2C_SCL = 0; I2C_Delay(); } while ( --t != 0 ); return dat; } /****************************************************** 函數(shù):I2C_GetAck() 功能:讀取從機應答位 返回: 0:從機應答 1:從機非應答 說明: 從機在收到每個字節(jié)的數(shù)據(jù)后,要產(chǎn)生應答位 從機在收到最后1 個字節(jié)的數(shù)據(jù)后,一般要產(chǎn)生非應答位 ***********************************************************/ bit I2C_GetAck() { bit ack; IO_ENABLE=1; I2C_SDA_O = 1; I2C_Delay(); I2C_SCL = 1; I2C_Delay(); IO_ENABLE=0; ack = I2C_SDA_I; I2C_SCL = 0; I2C_Delay(); return ack; } /******************************************************** 函數(shù):I2C_PutAck() 功能:主機產(chǎn)生應答位或非應答位 參數(shù): ack=0:主機產(chǎn)生應答位 ack=1:主機產(chǎn)生非應答位 說明: 主機在接收完每一個字節(jié)的數(shù)據(jù)后,都應當產(chǎn)生應答位 主機在接收完最后一個字節(jié)的數(shù)據(jù)后,應當產(chǎn)生非應答位 *********************************************************/ void I2C_PutAck(bit ack) { IO_ENABLE=1; I2C_SDA_O = ack; I2C_Delay();                                                                                                            I2C_SCL = 1; I2C_Delay(); I2C_SCL = 0; } /*************************************************************** 函數(shù):I2C_Stop() 功能:產(chǎn)生I2C 總線的停止狀態(tài) 說明: SCL處于高電平期間,當SDA 出現(xiàn)上升沿時停止I2C 總線 不論SDA 和SCL 處于什么電平狀態(tài),本函數(shù)總能正確產(chǎn)生停止狀態(tài) 本函數(shù)執(zhí)行后,I2C 總線處于空閑狀態(tài) ******************************************************************/ void I2C_Stop() { unsigned int t =1; IO_ENABLE=1; I2C_SDA_O = 0; I2C_Delay(); I2C_SCL = 1; I2C_Delay(); I2C_SDA_O= 1; I2C_Delay(); while ( --t != 0 ); //在下一次產(chǎn)生Start 之前,要加一定的延時 } /***************************************************** 函數(shù)? 功能:將I2C總線置于空閑狀態(tài),即將時鐘線和數(shù)據(jù)線都拉高 ******************************************************/ void idle() {    I2C_SCL=1;    IO_ENABLE=1;    I2C_SDA_O=1;    IO_ENABLE=0; } /******************************************************************** 函數(shù):I2C_Puts() 功能:I2C 總線綜合發(fā)送函數(shù),向從機發(fā)送多個字節(jié)的數(shù)據(jù) 參數(shù): SlaveAddr:從機地址(7 位純地址,不含讀寫位) SubAddr:從機的子地址 SubMod:子地址模式,0-無子地址,1-單字節(jié)子地址,2-雙字節(jié)子地址 *dat:要發(fā)送的數(shù)據(jù) Size:數(shù)據(jù)的字節(jié)數(shù) 返回: 0:發(fā)送成功 1:在發(fā)送過程中出現(xiàn)異常 說明: 本函數(shù)能夠很好地適應所有常見的I2C 器件,不論其是否有子地址 當從機沒有子地址時,參數(shù)SubAddr 任意,而SubMod 應當為0 **********************************************************************/ bit I2C_Puts(unsigned char SlaveAddr,unsigned int SubAddr,unsigned char SubMod,char *dat,unsigned int Size) { unsigned char i;          //定義臨時變量 char a[3]; if ( Size == 0 ) return 0;     //檢查長度 a[0] = (SlaveAddr << 1);      //準備從機地址 if ( SubMod > 2 ) SubMod = 2;   //檢查子地址模式 switch ( SubMod )             //確定子地址 {    case 0:break;    case 1:a[1] = (char)(SubAddr);break;    case 2:a[1] = (char)(SubAddr >> 8);a[2] = (char)(SubAddr);break;    default:break; } a[1] = (char)(SubAddr); SubMod++;                 //發(fā)送從機地址,接著發(fā)送子地址 I2C_Start(); for ( i=0; i<SubMod; i++ ) {   I2C_Write(a[i]);   if ( I2C_GetAck() )    {     I2C_Stop();idle();     return 1;    } }  do                             //發(fā)送數(shù)據(jù)   {    I2C_Write(*dat++);    if ( I2C_GetAck() ) break;   } while ( --Size != 0 );   I2C_Stop();  idle();              //發(fā)送完畢,停止I2C 總線,并返回結(jié)果   if ( Size == 0 ) return 0;   else return 1; } /******************************************************************** 函數(shù):I2C_Gets() 功能:I2C 總線綜合接收函數(shù),從從機接收多個字節(jié)的數(shù)據(jù) 參數(shù): SlaveAddr:從機地址(7 位純地址,不含讀寫位) SubAddr:從機的子地址 SubMod:子地址模式,0-無子地址,1-單字節(jié)子地址,2-雙字節(jié)子地址 *dat:保存接收到的數(shù)據(jù) Size:數(shù)據(jù)的字節(jié)數(shù) 返回: 0:接收成功 1:在接收過程中出現(xiàn)異常 說明: 本函數(shù)能夠很好地適應所有常見的I2C 器件,不論其是否有子地址 當從機沒有子地址時,參數(shù)SubAddr 任意,而SubMod 應當為0 ********************************************************************/ /*bit I2C_Gets(unsigned char SlaveAddr,unsigned int SubAddr,unsigned char SubMod,char *dat,unsigned int Size) { unsigned char i;          //定義臨時變量 char a[3]; if ( Size == 0 ) return 0;   //檢查長度 a[0] = (SlaveAddr << 1);   //準備從機地址 if ( SubMod > 2 ) SubMod = 2;  //檢查子地址模式 if ( SubMod != 0 )            //如果是有子地址的從機,則要先發(fā)送從機地址和子地址   {     if ( SubMod == 1 )          //確定子地址      {        a[1] = (char)(SubAddr);      }     else     {     a[1] = (char)(SubAddr >> 8);     a[2] = (char)(SubAddr);     } } SubMod++; t0=1;                    //發(fā)送從機地址,接著發(fā)送子地址 I2C_Start(); for ( i=0; i<=SubMod; i++ )   {   I2C_Write(a[i]);   } } I2C_PutAck(1); I2C_Stop(); t0=0; I2C_Start();             //這里的I2C_Start()對于有子地址的從機是重復起始狀態(tài)                            //對于無子地址的從機則是正常的起始狀態(tài) I2C_Write(a[0]+1);       //發(fā)送從機地址 if ( I2C_GetAck() ) { I2C_Stop(); return 1; } for (;;)     //接收數(shù)據(jù) { while( I2C_GetAck() ); *dat = I2C_Read(); if ( --Size == 0 ) { I2C_PutAck(1); I2C_PutAck(0); break; } } I2C_Stop(); //接收完畢,停止I2C 總線,并返回結(jié)果 return 0; }*/ char gets2(unsigned char subaddr) {     char i,dat;     I2C_Start();     I2C_Write(ZLGWR);     I2C_GetAck();     I2C_Write(subaddr);     I2C_SCL=1;     for(i=0;i<2;i++){;}     I2C_SCL=0;     I2C_Stop();     for(i=0;i<5;i++){;}     I2C_Start();     I2C_Write(ZLGRD);     I2C_GetAck();     dat=I2C_Read();     I2C_PutAck(1);     I2C_Stop();     idle();     return dat; }
摘 要 本作品由增益放大與控制模塊、極性轉(zhuǎn)換模塊、觸發(fā)以及以aduc841/ aduc831為核心的單片機最小系統(tǒng)4個部分構(gòu)成,由單片機實現(xiàn)控制與波形存儲回放功能。 一、方案論證與設計  1. 增益放大與測量方案     方案一:將輸入信號經(jīng)放大后送入窗口比較器,上限1V,下限0.1V。若小于0.1V,則通過單片機(p0.2=1,p0.3=0)控制增益放大電路將信號放大10倍,再輸入到控制模塊與0.1V和1V比較,若仍小于0.1V,則通過單片機控制增益放大電路將信號放大100倍;若大于1V,則通過單片機(在一個 周期內(nèi)出現(xiàn)p0.2=1,p0.3=0;p0.2=1,p0.3=1;p0.2=0,p0.3=1這幾種情況)控制增益放大電路將信號衰減10倍(當前信號已經(jīng)放大100倍或10倍),如果信號放大1倍,則衰減為零,阻止通過;若在0.1V和1V之間,則通過單片機(在一個 周期內(nèi)出現(xiàn)p0.2=1,p0.3=0;p0.2=1,p0.3=1這兩種種情況)控制增益放大電路將信號無增益的輸出。通過此電路使輸出信號幅度控制在0.2V至2V之間。     方案二:將放大后的信號其中一路轉(zhuǎn)換為直流信號,再將此信號給窗口比較器,上限2V,下限0.2V。若小于0.2V,則通過單片機(p0.2=1,p0.3=0)控制增益放大電路將信號放大10倍,再輸入到控制模塊與0.2V和2V比較,若仍小于0.2V,則通過單片機控制增益放大電路將信號放大100倍;若大于2V,則通過單片機(p0.2=0,p0.3=1)控制增益放大電路將信號衰減為零,阻止通過;若在0.2V和2V之間,則通過單片機(p0.2=1,p0.3=1)控制增益放大電路將信號無增益的輸出。通過此電路使輸出信號幅度控制在0.2V至2V之間。    對以上兩種方案進行比較,方案一雖在軟件控制方面稍繁,但也易于實現(xiàn),而方案二在將交流變?yōu)橹绷鞯挠布矫孑^為復雜,故采用方案二。 2. 采樣方案      方案一:通過觸發(fā)模塊提供給單片機一個周期信號,通過軟件實現(xiàn)定時采樣。       方案二:先將信號經(jīng)過100倍頻之后,送給單片機作為采樣觸發(fā)信號,也就是說每個周期固定采100個點。但是同步回放頻率難以控制。    對以上兩種方案進行比較,方案二雖然在采樣方面比較精準,但回放難以實現(xiàn),而方案一在兩方面均可兼顧。故采用方案一。   二、原理分析與硬件電路     根據(jù)題目要求,該調(diào)理系統(tǒng)包括增益放大與控制模塊、極性轉(zhuǎn)換模塊、觸發(fā)3個模塊,由于3個模塊相對獨立,其中增益放大與控制模塊是重點。以下分別對其進行原理分析與電路設計。 1.增益放大與循環(huán)取樣模塊 (1)原理分析   設輸入信號幅度為A,將輸入信號輸入循環(huán)取樣模塊與0.1V和1V比較:若小于0.1V,則通過單片機控制增益放大電路將信號放大10倍,再輸入到控制模塊與0.1V和1V比較,若仍小于0.1V,則通過單片機控制增益放大電路將信號放大100倍;若大于1V,則通過單片機控制增益放大電路將信號衰減10倍(當前信號已經(jīng)放大100倍或10倍),如果信號放大1倍,則衰減為零,阻止通過;若在0.1V和1V之間,則通過單片機控制增益放大電路將信號無增益的輸出。通過此電路使輸出信號峰峰值控制在0.2V至2V之間。 (2)原理電路①循環(huán)取樣模塊。本電路采用專用比較器LM339,使用三端穩(wěn)壓管TL431提供2.5V的穩(wěn)壓源,通過調(diào)節(jié)滑動變阻器使LM339的6腳和5腳分別得到0.1V和1V的電平。將取樣信號送給由LM339構(gòu)成的窗口比較器,可以從1腳和2腳得到隨信號變化的TTL電平,從而將比較結(jié)果送給單片機,以便單片機做出判決,發(fā)出控制信號。該增益控制模塊電路的基本原理如下圖所示。 ②增益控制模塊。根據(jù)單片機發(fā)出的控制信號送給CD4051,選擇X0,X1,X2,X3導通,從而改變運放U2B的放大倍數(shù)。通過滑動變阻器的微調(diào)使放大倍數(shù)達到指標(1倍、10倍、100倍)。該增益放大模塊電路的基本原理如下圖所示。 2.極性轉(zhuǎn)換模塊 (1)原理分析     將輸入信號通過極性轉(zhuǎn)換模塊(含有一加法器和一提供穩(wěn)定電壓的穩(wěn)壓源),使信號幅度均抬高1.25V,從而將輸入的雙極性信號轉(zhuǎn)換成單極性信號輸出。(2)原理電路    使用三端穩(wěn)壓管TL431向TL084的正極提供1.25V的穩(wěn)壓源,由TL084組成加法器,使輸入信號與1.25V相加。該極性轉(zhuǎn)換模塊電路的基本原理如下圖所示。  3.觸發(fā)模塊 (1)原理分析     將輸入信號通過觸發(fā)模塊(含有比較器),一周期的輸入信號得到一上升沿觸發(fā)。 (2)原理電路     將輸入信號接入比較器LM339的正極,負極接入一可通過滑動變阻器微調(diào)的電壓,通過與8腳電壓比較,得到一個周期與輸入信號相同的方波,作為觸發(fā)信號送給單片機。該觸發(fā)模塊電路的基本原理如下圖所示。       三、軟件設計與流程

小于0.2V
大于2V
鍵值等于1
鍵值等于2
放大倍數(shù)為10倍或100倍
(放大倍數(shù)小于100倍)
大于2V或小于0.2V
小于2V且大于0.2V
開始
端口初始化
開始采集信號D/A轉(zhuǎn)換輸出
放大倍數(shù)增加10倍
放大1倍
讀輸出控制信號
信號判斷
取樣判斷
讀取樣端口值
停止采集回放信號
中斷信號
判斷
  • 上一篇: 單片機應用 之摩斯密碼電子鎖
  • 下一篇: 數(shù)字溫度計的設計
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網(wǎng)友評論:(只顯示最新5條。)
    關于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責信息內(nèi)容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學會
    中國行業(yè)電子商務100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1