<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > EDA/PCB > 帶8051內(nèi)核的系統(tǒng)級(jí)ADC芯片MSC1210介紹及應(yīng)用

          帶8051內(nèi)核的系統(tǒng)級(jí)ADC芯片MSC1210介紹及應(yīng)用

          ——
          作者:司剛?cè)?曾 旖 張彥斌 清華大學(xué) 張偉東 時(shí)間:2007-09-21 來(lái)源:?jiǎn)纹瑱C(jī)及嵌入式系統(tǒng)應(yīng)用 收藏

            摘要:介紹德州儀器公司最近出品的帶有高性能8051內(nèi)核的系統(tǒng)級(jí)ADC芯片——。說(shuō)明8051內(nèi)核單片機(jī)的特點(diǎn)、懷能以及片上Flash、24位高精度A/D轉(zhuǎn)換器的使用方法。利用豐富的片上資源,可以很簡(jiǎn)單地構(gòu)建精密數(shù)據(jù)采集系統(tǒng)。

              關(guān)鍵詞:

            MSC1210是德州儀器公司推出的系統(tǒng)級(jí)高精度ADC芯片系列,內(nèi)置24位低功∑—ΔADC前端信號(hào)調(diào)理電路—多路模擬開(kāi)關(guān)、緩沖器、PGA、電壓參考,且集成了高性能8051處理器內(nèi)核、Flash存儲(chǔ)器和32位累加器、兼容SPI串口等多片上外設(shè)。對(duì)于要求何種小、集成度高、精度高的測(cè)量系統(tǒng),MSC1210是理想的選擇。

            MSC1210的系統(tǒng)結(jié)構(gòu)框圖如圖1所示。

          1 MSC1210中高性能8051內(nèi)核介紹

            MSC1210系列芯片的所有指令與標(biāo)準(zhǔn)801兼容,相同各標(biāo)志位、功能寄存器的功能也是一致的。但MSC1210在速度上有很大的提高:對(duì)于同樣的外部時(shí)鐘,指令執(zhí)行速度提高1.5~3倍,這就使用戶(hù)可以使用較低的外部時(shí)鐘,以降低系統(tǒng)的哭聲和功耗。此外,MSC1210相對(duì)8051單片機(jī)還新增了一些功能寄存器,以完成對(duì)外設(shè)的控制功能。如可編程看門(mén)狗定時(shí)器,對(duì)系統(tǒng)程序的運(yùn)行進(jìn)行監(jiān)控,確保系統(tǒng)可靠運(yùn)行。片上具有兩個(gè)全雙工的UART,使得在開(kāi)發(fā)模式有一個(gè)串口被占用的情況下,仍有一個(gè)可留給用戶(hù)使用。增加的帶有FIFO的SPI接口和PWM,為特定應(yīng)用提供了極大的方便。

            MSC1210還提供了雙數(shù)據(jù)指針,可以加速整塊數(shù)據(jù)的移動(dòng)。在訪(fǎng)問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),還可以使訪(fǎng)問(wèn)周期延展2~9個(gè)指令周期,以適應(yīng)不同的外設(shè)速度。32位的累加器也可顯著地減少系統(tǒng)開(kāi)銷(xiāo)。它可在幾個(gè)指令周期內(nèi)完成結(jié)果的加法或移位操作,而同樣的操作用軟件完成則需要上百個(gè)指令周期。

            MSC1210內(nèi)部的時(shí)鐘控制電路可以方便地設(shè)置不同的時(shí)鐘信號(hào)。其秒、毫秒、微秒定時(shí)中斷寄存器可以為系統(tǒng)定時(shí)控制提供方便,如設(shè)置內(nèi)部Flash擦除時(shí)間、寫(xiě)入時(shí)間。MSC1210的所有I/O口都可以通過(guò)寄存器,配置成標(biāo)準(zhǔn)8051(上拉)、CMOS輸出、漏極開(kāi)路輸出、輸入四種方式中的一種。

          2 MSC1210中存儲(chǔ)器配置和使用

            MSC1210的片內(nèi)存儲(chǔ)器包括:特殊功能豁口(SFR),F(xiàn)lash寄存器,Scratchpad RAM,Boot Rom和SRAM。MSC1210內(nèi)置256字節(jié)的片內(nèi)數(shù)據(jù)存儲(chǔ)器和128字節(jié)的SFR,這與8051內(nèi)核單片機(jī)是相同的;唯一的區(qū)別是MSC1210定義了更多的特殊功能寄存器。MSC1210的位地址空間也與8051相同,內(nèi)部RAM中的20H~2FH以及SFR中以0或8結(jié)尾的字節(jié),都是可位尋址的。

            MSC1210中還有2KB的Boot Rom,用來(lái)控制串/并行編程時(shí)的操作。當(dāng)Boot Rom使能時(shí),其中的程序在用戶(hù)模式下是可以訪(fǎng)問(wèn)的,這時(shí),它的程序被定位在F800H~FFFFH;而在編程模式下,Boot Rom被定位在程序存儲(chǔ)器開(kāi)始的2KB中。Boot Rom中含有一些調(diào)試編程常用的程序,如:

            void autobaud(void);//設(shè)置波特率

            char write_flash_chk(int fadd,char fdat,char fdm);//寫(xiě)Flash并校驗(yàn)

            根據(jù)型號(hào)的不同,MSC1210系列有4KB到32KB的Flash存儲(chǔ)器。此外,片內(nèi)還提供1KB的SRAM作為數(shù)據(jù)存儲(chǔ)器。它也是通過(guò)MOVX指令訪(fǎng)問(wèn)的。SRAM的地址可從0000H或8000H開(kāi)始,而Flash數(shù)據(jù)存儲(chǔ)器的地址緊接SRAM。

            Flash存儲(chǔ)器作為數(shù)據(jù)存儲(chǔ)器使用前,首先要對(duì)硬件寄存器0(HCR0)的低3位進(jìn)行設(shè)置,分配數(shù)據(jù)存儲(chǔ)空間的大小。根據(jù)晶振頻率,設(shè)置MSEC和USEC寄存器來(lái)提供Flash存儲(chǔ)器的擦除和寫(xiě)時(shí)間。擦除和寫(xiě)入可以直接調(diào)用Boot Rom中的程序,編程示意代碼如下:

          #include<stdio.h> //頭文件引用

          #include<msc1210.h>

          #include“rom1210.h”

          #define PAGESTART 0x0400 //定義進(jìn)行改寫(xiě)的頁(yè)面

          #define PAGESIZE 0x80

          char xdata*Pflashpage;定義指向此頁(yè)面的指針

          char xdata buffer[PAGESIZE];//在XRAM里開(kāi)辟緩沖區(qū)

          int main()

          {char result;unsigned char i;

          autobaud();//調(diào)用BootRom中子程序,自動(dòng)設(shè)置波特率,與計(jì)算機(jī)通信,返回調(diào)試信息

          Pflashpage=(char xdata*)PAGESTART

          USEC=12-1;MSEC=12000-1; //以12MHz晶振為例,設(shè)置

          ………… //毫秒、微秒寄存器

          for(i=0;i<pagesize;i++)//從Flash中讀取一個(gè)頁(yè)面到XRAM

          buffer[i]=*Pflashpage++;

          buffer[0]+=1; //改變首字節(jié)值以重新寫(xiě)入

          page_erase(PAGESTART,0XFF,DATA_FLASH);//擦除頁(yè)面內(nèi)容,BootRom內(nèi)帶程序

          result=0;

          for(i=0;i<pagesize;i++)

          result=result|write_flash_chk(pagestart+i,buffer[i],DATA_FLASH);//將修改后的數(shù)據(jù)寫(xiě)入,Boot Rom內(nèi)帶程序

          3 高性能及其應(yīng)用

            MSC1210內(nèi)帶8路24位模數(shù)轉(zhuǎn)換器,自身可實(shí)現(xiàn)溫度檢測(cè)、輸入源泉開(kāi)路短路檢測(cè)、增益和漂移校準(zhǔn)等。內(nèi)核中的32位累加器可實(shí)現(xiàn)24位結(jié)果的快速累加計(jì)算。

            輸入多路轉(zhuǎn)換器將切換多路模擬輸入信號(hào)到輸入緩沖器。共有9路輸入信號(hào),其中1路為片內(nèi)溫度傳感器信號(hào),其余8路每路輸入可設(shè)置單極性輸入或差分輸入,通過(guò)ADMUX寄存器可隨意配置其輸入信號(hào)的正確與負(fù)端。片內(nèi)配置有模擬輸入緩沖,當(dāng)使用輸入緩沖時(shí),典型輸入阻抗為10GΩ;當(dāng)不使用模擬輸入緩沖時(shí),輸入阻抗(單位為Ω)由時(shí)鐘頻率與增益決定:

            PGA的增益可以設(shè)置為2 n(n=0~7)。通過(guò)PGA的使用,可以用效提高A/D轉(zhuǎn)換結(jié)果的分辨率。如輸入信號(hào)幅度為40mV,設(shè)置PGA=128,最小分辨率可達(dá)75nV。PGA的模擬輸入可以通過(guò)設(shè)置ODAC寄存器進(jìn)行偏置,最大偏置為輸入范圍的一半。

            ADC的轉(zhuǎn)換結(jié)果存儲(chǔ)在ADRESH(高字節(jié))、ADRESM(中字節(jié))、ADRESL(低字節(jié))中,配合總和寄存器和移位寄存器,可以方便地實(shí)現(xiàn)多次測(cè)量結(jié)果的累加和平均??偤图拇嫫魇?個(gè)32位的值,被分為SUMR0(LSB)、SUMR1、SUMR2、SUMR3(MSB),可以進(jìn)行最大256次測(cè)量結(jié)果的累加和平均。當(dāng)然,要得到測(cè)量結(jié)果的平均值,應(yīng)當(dāng)使累加次數(shù)和平均次數(shù)一致。通過(guò)SSCON寄存器,可以設(shè)置成以下4種工作方式。

          方式0:手動(dòng)累加,每次測(cè)量完畢,將測(cè)量結(jié)果寫(xiě)入總和寄存器,完成累加。

          方式1:ADC自動(dòng)累加,根據(jù)SSCON中設(shè)置的累加次數(shù),自動(dòng)將測(cè)量結(jié)果累加到總和寄存器。

          方式2:手動(dòng)求平均值,將總和寄存器中的值除以次數(shù),得到測(cè)量結(jié)果。

          方式3:ADC自動(dòng)累加后求平均,根據(jù)SSCON中設(shè)置的累加次數(shù),自動(dòng)完成測(cè)量結(jié)果的累加后求平均值。

          下面的示意代碼完成ADC高精度測(cè)量過(guò)程。單次測(cè)量結(jié)果可以通過(guò)直接讀取ADRESH、ADRESM、ADRESL得到。

          //設(shè)置ADC

          PDCON&=0x0f7; //打開(kāi)轉(zhuǎn)換器,系統(tǒng)時(shí)鐘開(kāi)啟

          ACLK=9; //設(shè)置ACLK頻率

          ADMUX=0x08; //選擇第一通道正極性,AINCON負(fù)極性

          ADCON0=0x30;//選擇片內(nèi)參考電壓1.25V,關(guān)閉緩沖器,PGA=1

          ADCON1=0x41;//單極性,濾波器自動(dòng)模式,自校準(zhǔn)

          for(i=0;i<4;i++) //四個(gè)采樣周期自校準(zhǔn)

          {while(!(AIE&0X20));

          resultl=ADRESL;

          resultm=ADRESM;

          resulth=ADRESH;}

          SSCON=0XDB; //方式3,ADC自動(dòng)累加后求平均,采樣16次累加

          While(!(AISTAT&0X40));//等待16次采樣結(jié)果被累加完成

          SMU=(SUMR3〈〈24〉+(SUMR2〈〈16〉+(SUMR1<<8)+SUMR0;

          4 MSC1210調(diào)試方式

            MSC1210可以通過(guò)串口對(duì)Flash編程,內(nèi)部Boot Rom中提供了調(diào)試用的相關(guān)函數(shù),避免了購(gòu)買(mǎi)昂貴的開(kāi)發(fā)設(shè)備,使基于MSC1210的開(kāi)發(fā)變得非常簡(jiǎn)單。

            硬件方面需要在開(kāi)發(fā)板上加一個(gè)RS232轉(zhuǎn)換芯片,將MSC1210的串口和計(jì)算機(jī)串口之間連接起來(lái);同時(shí),設(shè)置上電時(shí)ALE和PSEN的狀態(tài)來(lái)確定其編程/工作方式。MSC1210有串行和并行兩種編程模式:PSEN=0、ALE=1時(shí),為串行模式,即在線(xiàn)編程;PSEN=1、ALE=0時(shí),為并行模式,要用到第三方的編程器。當(dāng)二者皆為高電平時(shí),為一般用戶(hù)模式。一般用戶(hù)模式允許對(duì)Flash程序存儲(chǔ)器和Flash數(shù)據(jù)存儲(chǔ)器編程。如復(fù)位時(shí)檢測(cè)到一般模式,則編程模式結(jié)束。

            軟件方面,TI公司提供了TI Downloader插件,可以直接與Keil配置使用。安裝完成TI download后,打開(kāi)Keil,在Tools里面選擇Customize Tools Menu,添加TI Downloader插件,并對(duì)其進(jìn)行配置,如圖2所示。

          在Argument選項(xiàng)中,可以填入的參數(shù)為[/Ffilename][/Xcrystal freq.][/Poort][/Bbaud reat][/Hhwdconfig][/Tterm]

          /Ffile:目標(biāo)文件(.hex格式),在Keil環(huán)境中會(huì)自動(dòng)用項(xiàng)目的目標(biāo)文件代替(必選項(xiàng))。

          /Xfeq:MSC1210晶振頻率(必選),X11指11.0592MHz。

          /Pport:PC串口選擇(必選須)。

          /Bbaud:波特率(可選項(xiàng))。

          /H:如果設(shè)置該選項(xiàng),則硬件寄存器被編程。

          /T:如果設(shè)置該選項(xiàng),下載完成后將弱出調(diào)試終端窗口(可選項(xiàng))。

            硬件配置寄存器(HCR0/HCR1)只能在編程模式下進(jìn)行改寫(xiě)。此時(shí),HCR0的地址為代碼區(qū)807FH,HCR1的地址為807EH。通過(guò)如下程序進(jìn)行配置(HCR0、HCR1各內(nèi)容參見(jiàn)MSC1210 Datasheet):

          CSEG AT0807EH ;代碼區(qū)地址設(shè)定

          DB 0FCH ;HCR1的配置內(nèi)容

          DB 0FFH ;HCR0的配置內(nèi)容

          5 總結(jié)

            MSC1210以其優(yōu)越的模擬和數(shù)字性能,可以輕松地構(gòu)建高精度測(cè)量系統(tǒng)。我們以MSC1210為核心,輔以少量的外圍設(shè)備,設(shè)計(jì)了發(fā)電機(jī)轉(zhuǎn)子繞組接地位置檢測(cè)儀。充分利用了MSC1210的高精度優(yōu)勢(shì),使故障定位的準(zhǔn)確度有了很大提高??梢灶A(yù)見(jiàn),MSC1210是便攜式高精度測(cè)量系統(tǒng)的最佳選擇。

           



          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();