一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

CC2530的ADC工作原理與應(yīng)用

 xpxys99 2017-07-02

第6課 CC2530的ADC工作原理與應(yīng)用

廣東職業(yè)技術(shù)學(xué)院 歐浩源

一、A/D轉(zhuǎn)換的基本工作原理

將時間上連續(xù)變化的模擬量轉(zhuǎn)化為脈沖有無的數(shù)字量,這一過程就叫做數(shù)字化,實現(xiàn)數(shù)字化的關(guān)鍵設(shè)備是ADC。

ADC:數(shù)模轉(zhuǎn)換器,將時間和幅值連續(xù)的模擬量轉(zhuǎn)化為時間和幅值離散的數(shù)字量,A/D轉(zhuǎn)換一般要經(jīng)過采樣、保持、量化編碼4個過程。

CC2530的ADC工作原理與應(yīng)用

二、CC2530的A/D轉(zhuǎn)換模塊

CC2530的ADC模塊支持最高14位二進制的模擬數(shù)字轉(zhuǎn)換,具有12位的有效數(shù)據(jù)位,它包括一個模擬多路轉(zhuǎn)換器,具有8個各自可配置的通道,以及一個參考電壓發(fā)生器。

CC2530的ADC工作原理與應(yīng)用

該ADC模塊有如下主要特征:

<1> 可選取的抽取率,設(shè)置分辨率(7~12位)。

<2> 8個獨立的輸入通道,可接收單端或差分信號。

<3> 參考電壓可選為內(nèi)部單端、外部單端、外部差分或AVDD5。

<4> 單通道轉(zhuǎn)換結(jié)束可產(chǎn)生中斷請求。

<5> 序列轉(zhuǎn)換結(jié)束可發(fā)出DMA觸發(fā)。

<6> 可將片內(nèi)溫度傳感器作為輸入。

<7> 電池電壓測量功能。

三、ADC模塊的信號輸入

端口0引腳可以配置為ADC輸入端,依次為AIN0~AIN7

<1> 可以把輸入配置為單端輸入或差分輸入。

<2> 差分輸入對:AIN0~AIN1、AIN2~AIN3、AIN4~AIN5、AIN6~AIN7。

<3> 片上溫度傳感器的輸出也可以作為ADC的輸入用于測量芯片的溫度。

<4> 可以將一個對應(yīng)AVDD5/3的電壓作為ADC輸入,實現(xiàn)電池電壓監(jiān)測。

<5> 負電壓和大于VDD的電壓都不能用于這些引腳。

<6> 單端電壓輸入AIN0~AIN7,以通道號碼0~7表示;四個差分輸入對則以 通道號碼8~11表示;溫度傳感器的通道號碼為14;AVDD5/3電壓輸入的通道號碼為15。

四、ADC相關(guān)的幾個概念

<1> 序列ADC轉(zhuǎn)換:可以按序列進行多通道的ADC轉(zhuǎn)換,并把結(jié)果通過DMA傳送到存儲器,而不需要CPU任何參與。

<2> 單通道ADC轉(zhuǎn)換:在程序設(shè)計中,通過寫ADCCON3寄存器觸發(fā)單通道ADC轉(zhuǎn)換,一旦寄存器被寫入,轉(zhuǎn)換立即開始。

<3> 參考電壓:內(nèi)部生成的電壓、AVDD5引腳、適用于AIN7輸入引腳的外部電壓,或者 適用于AIN6~AIN7輸入引腳的差分電壓。

<4> 轉(zhuǎn)換結(jié)果:數(shù)字轉(zhuǎn)換結(jié)果以2的補碼形式表示。對于單端,結(jié)果總是正的。對于差分配置,兩個引腳之間的差分被轉(zhuǎn)換,可以是負數(shù)。 當(dāng)ADCCON1.EOC設(shè)置為1時,數(shù)字轉(zhuǎn)換結(jié)果可以獲得,且結(jié)果總是駐留在ADCH和ADCL寄存器組合的MSB段中。

<5> 中斷請求:通過寫ADCCON3觸發(fā)一個單通道轉(zhuǎn)換完成時,將產(chǎn)生一個中斷,而完成 一個序列轉(zhuǎn)換時,是不產(chǎn)生中斷的。當(dāng)每完成一個序列轉(zhuǎn)換,ADC將產(chǎn)生 一個DMA觸發(fā)。

<6>寄存器:ADC有兩個數(shù)據(jù)寄存器:ADCLADCH;三個控制寄存器:ADCCON1ADCCON2ADCCON3;分別用來配置ADC并返回轉(zhuǎn)換結(jié)果。

五、實訓(xùn)項目:定時采集電壓數(shù)據(jù)發(fā)送到上位機

CC2530的ADC工作原理與應(yīng)用

【1】配置APCFG寄存器

當(dāng)使用ADC時,端口0的引腳必須配置為ADC模擬輸入。要配置一個端口0引腳為一個ADC輸入,APCFG寄存器中相應(yīng)的位必須設(shè)置為1。這個寄存器的默認值是0,選擇端口0為非模擬輸入,即作為數(shù)字I/O端口。

注意:APCFG寄存器的設(shè)置將覆蓋P0SEL的設(shè)置。

【2】配置ADCCON3寄存器

單通道的ADC轉(zhuǎn)換,只需將控制字寫入ADCCON3寄存器即可。

CC2530的ADC工作原理與應(yīng)用

【3】ADC初始化

主要對端口的功能進行選擇,設(shè)置其傳輸方向,并將端口設(shè)置為模擬輸入。

【4】ADC數(shù)據(jù)采集

首先將ADCIF標志位清0,接著對ADCCON3寄存器設(shè)置,該寄存器一旦被寫入,轉(zhuǎn)換立即開啟;然后等待ADCIF置1,這時候轉(zhuǎn)換完成,讀取數(shù)據(jù)即可。

【5】實訓(xùn)項目源代碼

#include 'ioCC2530.h'/*===============定時器1初始化函數(shù)==================*/void Init_Timer1{ T1CC0L = 0xd4; //設(shè)置最大計數(shù)值的低8位 T1CC0H = 0x30; //設(shè)置最大計數(shù)值的高8位 T1CCTL0 |= 0x04; //開啟通道0的輸出比較模式 T1IE = 1; //使能定時器1中斷 T1OVFIM = 1; //使能定時器1溢出中斷 EA = 1; //使能總中斷 T1CTL = 0x0e; //分頻系數(shù)是128,模模式}unsigned char count = 0;unsigned char F_time = 0;/*================定時器1服務(wù)函數(shù)====================*/#pragma vector = T1_VECTOR__interrupt void Timer1_Sevice{ T1STAT &= ~0x01; //清除定時器1通道0中斷標志 count++; if(count == 10) //定時1秒到 { F_time = 1; count = 0; }}/*===================UR0初始化函數(shù)====================*/void Init_Uart0{ PERCFG = 0x00; //串口0的引腳映射到位置1,即P0_2和P0_3 P0SEL = 0x0C; //將P0_2和P0_3端口設(shè)置成外設(shè)功能 U0BAUD = 59; //16MHz的系統(tǒng)時鐘產(chǎn)生9600BPS的波特率 U0GCR = 9; U0UCR |= 0x80; //禁止流控,8位數(shù)據(jù),清除緩沖器 U0CSR |= 0xC0; //選擇UART模式,使能接收器 UTX0IF = 0; //清除TX發(fā)送中斷標志 URX0IF = 0; //清除RX接收中斷標志 URX0IE = 1; //使能URAT0的接收中斷 EA = 1; //使能總中斷}unsigned char dat[4];/*===================UR0發(fā)送字符串函數(shù)==================*/void UR0SendString(unsigned char *str, unsigned char count){ while(count--) { U0DBUF = *str++; //將要發(fā)送的1字節(jié)數(shù)據(jù)寫入U0DBUF while(!UTX0IF); //等待TX中斷標志,即數(shù)據(jù)發(fā)送完成 UTX0IF = 0; }}/*===================ADC初始化函數(shù)====================*/void Init_ADC0{ P0SEL |= 0x01; //P0_0端口設(shè)置為外設(shè)功能 P0DIR &= ~0x01; //P0_0端口設(shè)置為輸入端口 APCFG |= 0x01; //P0_0作為模擬I/O使用}/*===================讀取ADC的數(shù)據(jù)====================*/void Get_ADC0_Value{ ADCIF = 0; //參考電壓選擇AVDD5引腳,256抽取率,AIN0通道0 ADCCON3 = (0x80 | 0x10 | 0x00); while(!ADCIF); //等待A/D轉(zhuǎn)換完成, dat[0] = 0xaf; dat[1] = ADCH; //讀取ADC數(shù)據(jù)低位寄存器 dat[2] = ADCL; //讀取ADC數(shù)據(jù)高位寄存器 dat[3] = 0xfa;}/*=======================主函數(shù)======================*/void main{ Init_Uart0; Init_Timer1; Init_ADC0; while(1) { if(F_time == 1) //定時1秒時間到 { Get_ADC0_Value; //進行A/D轉(zhuǎn)換并讀取數(shù)據(jù) UR0SendString(dat,4); //向上位機發(fā)送數(shù)據(jù) F_time = 0; //定時1秒標志清0 } }}

【結(jié)語】:

關(guān)于CC2530微控制器入門基礎(chǔ)教程到此大功告成。

理解并能獨立完成上述6個基本模塊的應(yīng)用,可以說基本上掌握了CC2530的基礎(chǔ)應(yīng)用,為日后學(xué)習(xí)Zigbee組網(wǎng)應(yīng)用打下了良好的基礎(chǔ)。

對于CC2530來說,進行低功耗無線組網(wǎng)應(yīng)用才是它的真正使命。有了我們?nèi)腴T的基礎(chǔ),后面如果有時間,我會把OSAL操作系統(tǒng)z-Stack協(xié)議棧的應(yīng)用再做兩個系列的教材,讓大家真正的掌握CC2530的應(yīng)用精髓。

--------------------------------------------------------------------------------------------------------------------

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    欧美精品久久一二三区| 精品人妻一区二区三区四在线| 亚洲日本中文字幕视频在线观看 | 果冻传媒在线观看免费高清| 国产精品推荐在线一区| 中文字幕中文字幕一区二区| 加勒比人妻精品一区二区| 免费特黄欧美亚洲黄片| 亚洲欧洲在线一区二区三区| 欧美有码黄片免费在线视频| 人妻一区二区三区在线| 国产av一区二区三区久久不卡| 亚洲最新av在线观看| 国产成人精品国内自产拍| 国产91麻豆精品成人区| 国产国产精品精品在线| 亚洲欧洲一区二区综合精品| 国语久精品在视频在线观看| 中日韩免费一区二区三区| 欧美亚洲国产日韩一区二区| 好吊妞视频只有这里有精品| 少妇激情在线免费观看| 亚洲一区二区精品免费| 欧美一区二区不卡专区| 免费观看成人免费视频| 老外那个很粗大做起来很爽| 日韩成人高清免费在线| 美女极度色诱视频在线观看| 日韩夫妻午夜性生活视频| 久久99青青精品免费观看| 91欧美视频在线观看免费| 国产精品一区二区传媒蜜臀| 国产欧美高清精品一区| 熟女乱一区二区三区四区| 日韩一区二区三区嘿嘿| 99久久国产综合精品二区| 又黄又色又爽又免费的视频| 98精品永久免费视频| 男生和女生哪个更好色| av在线免费观看在线免费观看| 亚洲国产天堂av成人在线播放|