Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 10718|Odpoveď: 0

Zigbee Journey (6): Niekoľko dôležitých základných experimentov CC2430 - jednorazové vzorkovanie ADC

[Kopírovať odkaz]
Zverejnené 30. 10. 2014 23:20:31 | | | |
1. Prepojenie hornej a dolnej úrovne

V bezdrôtových senzorových sieťach je dôležité prevádzať analógové hodnoty senzorov na digitálne veličiny pre jednoduchý prenos a spracovanie. Na dokončenie tejto konverzie sa používa ADC (analógovo-digitálny prevodník).

V predchádzajúcej časti sme zaviedli komunikáciu cez sériový port medzi CC2430 a PC. CC2430 má vo vnútri zabudovaný teplotný senzor a táto časť implementuje jednoduchý experiment s monitorovaním teploty na čipe založený na predchádzajúcej časti: použite ADC na prevod hodnoty napätia z teplotného senzora na čipe na digitálnu veličinu, použite vzorec na výpočet teploty a potom preneste teplotnú hodnotu PC cez sériový port a zobrazí ju.

2. Jednorazové vzorkovanie ADC(1) Úvod do experimentu

ADC sa používa na konverziu teplotnej hodnoty snímača teploty CC2430 na čipe a hodnota teploty sa posiela do PC cez sériový port a zobrazuje sa.

(2) Schéma toku programu

(3) Experimentálny zdrojový kód a analýza/*
    Experimentálny popis: Experiment na meranie teploty v čipe posiela dáta do PC cez sériový port 0
*/

#include

#define viedol1 P1_0
#define LED2 P1_1
#define LED3 P1_2
#define Lead4 P1_3

/*32M晶振初始化
-------------------------------------------------------*/
prázdnotaxtal_init(prázdnota)
{
  SPAJ &= ~0x04;            //都上电
  zatiaľ čo(! (SLEEP &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;         Vyberte 32MHz kryštálový oscilátor
  SPAK |=0x04;
}

/*LED灯初始化
-------------------------------------------------------*/
prázdnotaled_init(prázdnota)
{
  P1SEL =0x00;         P1 je bežný I/O port
  P1DIR |=0x0F;         P1.0 P1.1 P1.2 P1.3 výstup
  
  led1 =1;
  led2 =1;
  LED3 =1;
  LED4 =1;
}

/*UART0初始化
-------------------------------------------------------*/
prázdnota  Uart0Init(nepodpísané charStopBits,nepodpísané charParita)
{
   P0SEL |=  0x0C;                  //初始化UART0端口
   PERCFG&= ~0x01;                  //选择UART0为可选位置一
   U0CSR =0xC0;                    nastaviť režim UART a povoliť akceptor
   U0GCR =11;
   U0BAUD =216;                    //设置UART0波特率为115200bps
   U0UCR |= StopBits| Parita;        //设置停止位与奇偶校验
}

/*UART0发送字符
-------------------------------------------------------*/
prázdnota  Uart0Send(nepodpísané chardáta)
{
  zatiaľ čo(U0CSR&0x01);   //等待UART空闲时发送数据
  U0DBUF = dáta;
}

/*UART0发送字符串
-------------------------------------------------------*/
prázdnotaUart0SendString(nepodpísané char*s)
{
  zatiaľ čo(*s !=0)
    Uart0Send(*s++);
}

/*UART0接收数据
-------------------------------------------------------*/
nepodpísané charUart0Receive(prázdnota)
{
  nepodpísané chardáta;
  zatiaľ čo(! (U0CSR&0x04));//查询是否收到数据,否则继续等待
  data=U0DBUF;
  návratdáta;
}

/*延时函数
-------------------------------------------------------*/
prázdnotaOneskorenie(nepodpísané intn)
{
  nepodpísané inti;
  pre(i=0; i<n; i++);
  pre(i=0; i<n; i++);
  pre(i=0; i<n; i++);
  pre(i=0; i<n; i++);
  pre(i=0; i<n; i++);
}

/*得到实际温度值
-------------------------------------------------------*/
PlavákgetTemperature(prázdnota)
{
  nepodpísané int  hodnota;

  ADCCON3 = (0x3E);                  //选择1.25V为参考电压;14位分辨率;对片内温度传感器采样
   
  ADCCON1 |=0x30;                    //选择ADC的启动模式为手动
  ADCCON1 |=0x40;                    Spustenie konverzií AD            
   
  zatiaľ čo(! (ADCCON1 &0x80));           //等待ADC转化结束

  hodnota = ADCL >>2;
  hodnota |= (ADCH <<6);               //取得最终转化结果,存入value中
  
  návratHodnota*0.06229-311.43;        //根据公式计算出温度值
}

/*主函数
-------------------------------------------------------*/
prázdnotamain(prázdnota)
{
  chari;
  PlavákavgTemp;
  nepodpísané charoutput[]="";
        
  xtal_init();
  led_init();
  
  led1 =0;

  Uart0Init(0x00, 0x00);   //初始化串口:无奇偶校验,停止位为1位

  Uart0SendString("Ahoj CC2430 - TempSensor!");

  zatiaľ čo(1)
  {
    led1 =0;
    avgTemp =0;
    pre(i =0; i <64; i++)
    {
      avgTemp += getTemperature();
      avgTemp = avgTemp/2;            //每采样1次,取1次平均值
    }
   
    Výstup[0] = (nepodpísané char)(avgTemp)/10 + 48;         //十位
    Výstup[1] = (nepodpísané char)(avgTemp)%10 + 48;         //个位
    Výstup[2] ='.';                                       //小数点
    Výstup[3] = (nepodpísané char)(avgTemp*10)%10+48;         //十分位
    Výstup[4] = (nepodpísané char)(avgTemp*100)%10+48;        //百分位
    výstup[5] ='';                                      //字符串结束符
   
    Uart0SendString(output);
    Uart0SendString("°C");
    led1 =1;                          //LED熄灭,表示转换结束,
   
    Oneskorenie(20000);
    Oneskorenie(20000);
    Oneskorenie(20000);
    Oneskorenie(20000);
    Oneskorenie(20000);
    Oneskorenie(20000);
    Oneskorenie(20000);
    Oneskorenie(20000);
    Oneskorenie(20000);
    Oneskorenie(20000);
  }
}

Pre kódový obsah sériovej portovej komunikácie sa prosím pozrite na predchádzajúcu sekciu, ktorá tu nebude vysvetlená~

ADC zvyčajne zahŕňajú 6 SFR:

ADCCON1Pre všeobecnú kontrolu ADC, vrátane koncovej vlajky konverzie, metódy spúšťania ADC, generátora náhodných čísel
ADCCON2Konfigurácia pre kontinuálnu konverziu ADC (tento experiment nezahŕňa kontinuálnu konverziu ADC a preto nepoužíva tento SFR)
ADCCON3Konfigurácia pre jednu konverziu ADC, vrátane výberu referenčného napätia, rozlíšenia, zdroja konverzie
ADCH[7:0]Vysoká úroveň konverzie ADC, teda ADC [13:6]
ADCL[7:2]Nízka úroveň konverzie ADC, teda ADC [5:0]
ADCCFGAIN0~AIN7 s P0.0~P0.7 ako vstupom ADC (tento SFR sa nepoužíva, pretože v tomto teste je ako zdroj konverzie zvolený teplotný senzor na čipe a nezahŕňa AIN0~AIN7)

(Poznámka: Pre vyššie uvedené podrobnosti o SFR si pozrite čínsky manuál CC2430)

Ďalej sa na to zamerajmegetTempuraturefunkcie, ktorá je kľúčom k získaniu hodnoty teploty:

(1) Najprv nakonfigurujte ADC pre jedno vzorkovanie: nastavte ADCCON3=0x3E, vyberte 1,25V ako systémové napätie, vyberte 14-bitové rozlíšenie a ako zdroj konverzie ADC vyberte teplotný senzor CC2430 na čipe

(2) Potom nastavte ADCCON1 |= 0x30 na manuálne nastavenie metódy ADC (t. j. keď ADCCON.6=1 spustite prechod ADC)

(3) Potom nechajme ADCCON1 |= 0x40 na začiatok jednorazovej konverzie ADC

(4) Použi vetu while(!( ADCCON1 &0x80)) Počkajte na koniec prechodu na ADC

(5) Výsledok konverzie sa uloží do ADCH[7:0] (8 bitov vysoký), ADCH [7:2] (o 6 bitov nižší) a odovzdaný:

    hodnota = ADCL >>2;
    hodnota |= (ADCH <<6);   

Uložiť výsledok konverzie do hodnoty

(6) Nakoniec použite tento vzorecteplota= hodnota*0,06229-311,43, vypočítajte teplotu a vráťte

Tipy na CC2430
Musíte byť zmätení posledným vzorcom, prečo jednorazová funkcia? Prečo má sklon 0,06229 a priesečník 211,43? Dobre, tu je odpoveď:
Tento teplotný senzor sa nachádza vo vnútri čipu CC2430, takže jeho popis určite nájdete v manuáli. A naozaj, som tuElektrické špecifikácieRelevantný obsah nájdete v tejto sekcii a snímka obrazovky je nasledovná:
Táto tabuľka popisuje teplotu (°C) teplotného senzora vo vzťahu k výstupnému napätiu (V).
Najprv sa pozrite na druhý červený rámček:Teplotný koeficient。 "Koeficient"? Necíti sa to trochu? Potom sa pozrite na jeho jednotku: mV/°C, a zrazu si uvedomíte, že vzťah medzi teplotou a napätím je lineárny~ Teda:
kde V je hodnota výstupného napätia, T je hodnota teploty a 2,45 je sklon. Intercept b musí byť určený nižšie.
Na prvý pohľad zistíme, že pri prvom červenom boxe je napätie pri 0°C 743 mV, takže b je rovné 743? Inak, ak budete pozerať dole, zistíte, že jeho absolútna chyba dosahuje až 8°C! Potom sa pozrieme doprava a uvidíme, že už poskytuje najvhodnejší priesečník, t.j.: b=763, takže existuje nasledujúci vzorec:
Dobre, teraz už máme teplotný senzorZadajte teplotu TaVýstupné napätie VĎalším krokom je nájsť ADCVstupné napätie VaVýstupná hodnota N(t. j. výsledok konverzie 14 bitov) a nakoniec nájsť konverzný vzorec N a T.
Výsledok konverzie N je 14 bitov, a keď N=11 1111 1111 1111 1111 (binárne), výstupné napätie by malo byť maximálna hodnota (t. j. referenčné napätie 1,25V). Preto máme nasledujúci proporcionálny vzťah:
(Poznámka: Keďže výstup 14 bitov je binárny doplnok, 14. bit je symbol bit.) Takže v absolútnych hodnotách je efektívna hodnota len 13 bitov, teda 2 na mocninu 13)
Kombináciou týchto dvoch vzorcov možno odvodiť vzťah medzi T a N:
KONIEC~

Nakoniec pár slov o tom, prečo je na vzorku potrebných 64 cyklov. Keďže senzory sú nevyhnutne vystavené rušeniu alebo náhodným chybám pri meraní teploty, údaje získané senzormi sú niekedy prehnané (napríklad náhla zmena o 10°C a následný okamžitý návrat do normálu). Ale vieme, že zmena teploty je neoddeliteľný proces a je zriedkavé, aby veľký skok nastal v okamihu). Preto používame metódu priemeru na zníženie takýchto chýb.

(4) Experimentálne výsledky

Najprv otvorte nástroj na ladenie sériových portov, potom si stiahnite program a spustite ho, a zobrazí sa nasledujúca obrazovka:

Teplota vo vnútri filmu je približne 14,5 °C. Autor cíti teplotu izby internátu svojím telom, ktorá je asi niečo vyše 10 °C. Vnútro čipu potrebuje trochu tepla, takže 14°C je v podstate normálne~

Toto je koniec experimentu.

3. Záver

Tento článok popisuje implementáciu jednorazového vzorkovania ADC. V ďalšej časti predstavíme režim prenosu dátDMA(priamy prístup do pamäte), teda "priamy prístup do pamäte". Periférne jednotky ako ADC/UART/RF transceivery a pamäťové zariadenia môžu byť vymieňané priamo pod kontrolou "DMA radiča"Je potrebná minimálna zásah CPU, čo výrazne zlepšuje celkovú efektivitu systému.

Zostaňte naladení!


</n; i++);
</n; i++);
</n; i++);
</n; i++);
</n; i++);




Predchádzajúci:Zigbee Journey (5): Niekoľko dôležitých základných experimentov CC2430 – sériová komunikácia
Budúci:Zigbee Journey (7): Niekoľko dôležitých základných experimentov CC2430 - DMA prenos
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com