Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 10718|Відповідь: 0

Zigbee Journey (6): Кілька важливих базових експериментів CC2430 — ADC single sampleling

[Копіювати посилання]
Опубліковано 30.10.2014 23:20:31 | | | |
1. З'єднання верхнього та нижнього рівнів

У бездротових сенсорних мережах важливо перетворювати аналогові значення сенсорів у цифрові величини для зручності передачі та обробки. Для завершення цього перетворення використовується АЦП (аналогово-цифровий перетворювач).

У попередньому розділі ми ввели послідовний портовий зв'язок між CC2430 і ПК. CC2430 має вбудований датчик температури, і цей розділ реалізує простий експеримент з моніторингу температури на чіпі на основі попереднього розділу: використовуйте АЦП для перетворення значення напруги датчика температури на чипі у цифрову величину, використовуйте формулу для розрахунку температурного значення, а потім передайте температурне значення на ПК через послідовний порт і відобразіть його.

2. Одиночне семплінгування АЦП(1) Вступ до експерименту

АЦП використовується для перетворення температурного значення датчика температури CC2430 на чипі, і значення температури передається на ПК через послідовний порт і відображається.

(2) Блок-схема програми

(3) Експериментальний вихідний код і аналіз/*
    Опис експерименту: Експеримент з визначення температури в мікросхемі передає дані на ПК через послідовний порт 0
*/

#include

#define led1 P1_0
#define led2 P1_1
#define led3 P1_2
#define led4 P1_3

/*32M晶振初始化
-------------------------------------------------------*/
Порожнечаxtal_init(Порожнеча)
{
  SLEEP &= ~0x04;            //都上电
  поки(! (SLEEP &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;         Виберіть кристалічний осцилятор на 32 МГц
  СОН |=0x04;
}

/*LED灯初始化
-------------------------------------------------------*/
Порожнечаled_init(Порожнеча)
{
  P1SEL =0x00;         P1 — це звичайний порт введення/виведення
  P1DIR |=0x0F;         P1.0 P1.1 P1.2 P1.3 вихід
  
  led1 =1;
  led2 =1;
  led3 =1;
  led4 =1;
}

/*UART0初始化
-------------------------------------------------------*/
Порожнеча  Uart0Init(Без підпису charStopBits,Без підпису charПаритет)
{
   P0SEL |=  0x0C;                  //初始化UART0端口
   PERCFG&= ~0x01;                  //选择UART0为可选位置一
   U0CSR =0xC0;                    встановити режим UART і увімкнути акцептор
   U0GCR =11;
   U0BAUD =216;                    //设置UART0波特率为115200bps
   U0UCR |= StopBits| Паритет;        //设置停止位与奇偶校验
}

/*UART0发送字符
-------------------------------------------------------*/
Порожнеча  Uart0Send(Без підпису charдані)
{
  поки(U0CSR&0x01);   //等待UART空闲时发送数据
  U0DBUF = дані;
}

/*UART0发送字符串
-------------------------------------------------------*/
ПорожнечаUart0SendString(Без підпису char*s)
{
  поки(*s !=0)
    Uart0Send(*s++);
}

/*UART0接收数据
-------------------------------------------------------*/
Без підпису charUart0Receive(Порожнеча)
{
  Без підпису charдані;
  поки(! (U0CSR&0x04));//查询是否收到数据,否则继续等待
  data=U0DBUF;
  Поверненнядані;
}

/*延时函数
-------------------------------------------------------*/
ПорожнечаЗатримка(Без підпису intn)
{
  Без підпису inti;
  для(i=0; i<n; i++);
  для(i=0; i<n; i++);
  для(i=0; i<n; i++);
  для(i=0; i<n; i++);
  для(i=0; i<n; i++);
}

/*得到实际温度值
-------------------------------------------------------*/
ПоплавокgetTemperature(Порожнеча)
{
  Без підпису int  цінність;

  ADCCON3 = (0x3E);                  //选择1.25V为参考电压;14位分辨率;对片内温度传感器采样
   
  ADCCON1 |=0x30;                    //选择ADC的启动模式为手动
  ADCCON1 |=0x40;                    Ініціація конверсій AD            
   
  поки(! (ADCCON1 &0x80));           //等待ADC转化结束

  value = ADCL >>2;
  значення |= (ADCH <<6);               //取得最终转化结果,存入value中
  
  ПоверненняЦінність*0.06229-311.43;        //根据公式计算出温度值
}

/*主函数
-------------------------------------------------------*/
ПорожнечаГоловна(Порожнеча)
{
  chari;
  ПоплавокavgTemp;
  Без підпису charвихід[]="";
        
  xtal_init();
  led_init();
  
  led1 =0;

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

  Uart0SendString("Привіт, CC2430 - TempSensor!");

  поки(1)
  {
    led1 =0;
    avgTemp =0;
    для(i =0; i <64; i++)
    {
      avgTemp += getTemperature();
      avgTemp = avgTemp/2;            //每采样1次,取1次平均值
    }
   
    Вихід[0] = (Без підпису char)(avgTemp)/10 + 48;         //十位
    Вихід[1] = (Без підпису char)(avgTemp)%10 + 48;         //个位
    Вихід[2] ='.';                                       //小数点
    Вихід[3] = (Без підпису char)(середня температура*10)%10+48;         //十分位
    Вихід[4] = (Без підпису char)(середня температура*100)%10+48;        //百分位
    Вихід[5] ='';                                      //字符串结束符
   
    Uart0SendString(output);
    Uart0SendString("°C");
    led1 =1;                          //LED熄灭,表示转换结束,
   
    Затримка(20000);
    Затримка(20000);
    Затримка(20000);
    Затримка(20000);
    Затримка(20000);
    Затримка(20000);
    Затримка(20000);
    Затримка(20000);
    Затримка(20000);
    Затримка(20000);
  }
}

Для вмісту коду послідовного порту, будь ласка, зверніться до попереднього розділу, який тут не буде пояснений~

ADC зазвичай включають 6 SFR:

ADCCON1Для загального керування АЦП, включно з прапорцем кінця конвертації, методом тригера АЦП, генератором випадкових чисел
ADCCON2Конфігурація для безперервного конвертування АЦП (цей експеримент не передбачає безперервне конвертування АЦП і тому не використовує цей SFR)
ADCCON3Конфігурація для одного конвертування АЦП, включаючи вибір опорної напруги, роздільної здатності, джерела перетворення
ADCH[7:0]Високий рівень результату конверсії ADC, тобто ADC [13:6]
ADCL[7:2]Низький рівень результату конверсії ADC, тобто ADC [5:0]
ADCCFGAIN0~AIN7 з P0.0~P0.7 як входом АЦП (цей SFR не використовується, оскільки датчик температури на чипі обраний як джерело перетворення в цьому тесті і не залучає AIN0~AIN7)

(Примітка: будь ласка, зверніться до китайського посібника CC2430 для наведених вище деталей SFR)

Далі зосередимося на цьомуgetTempuratureФункції, яка є ключем до отримання значення температури:

(1) Спочатку налаштуйте АЦП для однієї дискретизації: встановіть ADCCON3=0x3E, виберіть 1.25V як системну напругу, виберіть 14-бітну роздільну здатність і виберіть датчик температури CC2430 на чіпі як джерело перетворення АЦП

(2) Потім встановити ADCCON1 |= 0x30, щоб метод тригера АЦП став ручним (тобто при ADCCON.6=1 починати перехід АЦП)

(3) Тоді нехай ADCCON1 |= 0x40 для початку одиночної конверсії ADC

(4) Використати твердження поки (!( ADCCON1 &0x80)) Чекати на завершення переходу ADC

(5) Результат перетворення зберігається в ADCH[7:0] (8 біт вище), ADCH [7:2] (на 6 біт нижче) і проходить:

    value = ADCL >>2;
    значення |= (ADCH <<6);   

Збережіть результат конвертації у значення

(6) Нарешті, використовуйте формулутемпература=значення*0.06229-311.43, обчислити температурне значення та віддачу

Поради щодо CC2430
Ти, мабуть, здивований останньою формулою, чому одноразова функція? Чому він має нахил 0,06229 і перехоплення 211,43? Добре, ось відповідь:
Цей датчик температури розташований всередині чипа CC2430, тому його опис безумовно можна знайти в інструкції. І справді, я тутЕлектричні характеристикиВідповідний контент можна знайти в цьому розділі, а скріншот виглядає так:
Ця таблиця описує температуру (°C) датчика температури відносно вихідної напруги (V).
Перший погляд на другу червону коробку:Температурний коефіцієнт。 "Коефіцієнт"? Хіба не відчувається трохи? Потім подивіться на її одиницю: mV/°C, і раптом зрозумієте, що взаємозв'язок між температурою і напругою лінійний~ Тобто:
де V — вихідна напруга, T — температурне значення, а 2,45 — нахил. Перехоплення b має бути визначене нижче.
На перший погляд ми побачимо на першій червоній коробці, що напруга при 0°C становить 743mV, тобто b дорівнює 743? Інакше, якщо продовжувати дивитися вниз, то побачиш, що абсолютна похибка сягає 8°C! Потім, дивлячись праворуч, побачимо, що вона вже забезпечує найбільш відповідний перехоплення, тобто b=763, тобто існує така формула:
Добре, тепер у нас вже є датчик температуриВведіть температуру TіВихідна напруга VНаступний крок — знайти ADCВхідна напруга VіВихідне значення N(тобто результат перетворення 14 біт), і нарешті знайти формулу перетворення N і T.
Результат перетворення N дорівнює 14 бітам, і коли N=11 1111 1111 1111 (бінарна), вихідна напруга має бути максимальним значенням (тобто еталонна напруга 1,25 В). Отже, маємо такий пропорційний зв'язок:
(Примітка: оскільки вихід 14 бітів є двійковим доповненням, 14-й біт — це біт символу.) Отже, в абсолютних термінах ефективне значення становить лише 13 біт, тобто 2 до степеня 13)
Поєднуючи дві формули, можна вивести зв'язок між T і N:
ПРИЙОМ~

Нарешті, кілька слів про те, чому на кожен зразок потрібно 64 цикли. Оскільки датчики неминуче піддаються перешкодам або випадковим помилкам при вимірюванні температури, дані, отримані датчиками, іноді перебільшуються (наприклад, раптова зміна на 10°C, а потім миттєве повернення до норми). Але ми знаємо, що зміна температури — це інтегральний процес, і рідко трапляється великий стрибок миттєво). Тому ми використовуємо метод середнього для зменшення таких помилок.

(4) Експериментальні результати

Спочатку відкрийте інструмент налагодження послідовних портів, потім завантажте програму і запустіть її, і з'явиться наступний екран:

Температура всередині плівки становить близько 14,5°C. Автор відчуває кімнатну температуру гуртожитку своїм тілом, яка трохи перевищує 10°C. Внутрішня частина чіпа має отримати трохи тепла, тому 14°C — це майже нормально~

Це кінець експерименту.

3. Висновок

У цій статті описується реалізація ADC single-sampling. У наступному розділі ми представимо режим передачі данихDMA(прямий доступ до пам'яті), тобто «прямий доступ до пам'яті». Периферійні пристрої, такі як ADC/UART/RF трансивери та пристрої пам'яті, можуть обмінюватися безпосередньо під керуванням «DMA-контролера»Потрібне мало втручання процесора, що значно підвищує загальну ефективність системи.

Слідкуйте за оновленнями!


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




Попередній:Zigbee Journey (5): Кілька важливих базових експериментів CC2430 — послідовна комунікація
Наступний:Zigbee Journey (7): Кілька важливих базових експериментів CC2430 — передача DMA
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com