реклама на сайте
подробности

 
 
> Измерение напряжения с помощью АЦП, 16 битное SD16_A
chainikru
сообщение Apr 9 2012, 10:58
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 5-12-11
Пользователь №: 68 682



Добрый день. Хочу поставить индикатор на регулятор мощности, для этого я хочу дополнить регулятор MSP430F2013 на аналоговые входы которого я буду подавать уменьшенный сигнал и измеряя напряжение с помощью АЦП выводить его значение в процентах. Для этого сделал для отлатки устройство с регулируемым напряжением до 0.59 вольт . Как я понял для написания пограммы надо сделать таблицу соответствия напряжения его цифрвому коду в АЦП .
Вот моя программа для этой цели где результат преобразования напряжения хранится в ChA0results:
#include <msp430x20x3.h>

/* Arrays to store SD16 conversion results */
/* NOTE: arrays need to be global to */
/* prevent removal by compiler */
static unsigned int ChA0results = 0x00;

static unsigned int ch_counter=0;

void main(void)
{

volatile unsigned int i; // Use volatile to prevent removal
// by compiler optimization

WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
BCSCTL2 |= DIVS_3; // SMCLK/8

SD16CTL = SD16REFON + SD16SSEL_1; // 1.2V ref, SMCLK
SD16INCTL0 = SD16INCH0; // Set channel A0+/-
SD16CCTL0 |= SD16SNGL + SD16UNI + SD16IE;
// Single conv, 256OSR, unipolar,
// enable interrupt
SD16INCTL0 |= SD16INTDLY_0; // Interrupt on 4th sample
SD16AE = SD16AE0; // P1.0 A0+, A0- = VSS

for (i = 0; i < 0x3600; i++); // Delay for 1.2V ref startup

while(1)
{
SD16CCTL0 |= SD16SC; // Set bit to start conversion
_BIS_SR(LPM0_bits + GIE); // Enter LPM0
}
}

#pragma vector = SD16_VECTOR
__interrupt void SD16ISR(void)
{
switch (SD16IV)
{ case 2: // SD16MEM Overflow
break;

case 4: // SD16MEM0 IFG

switch(ch_counter)
{
case 0:
ChA0results = SD16MEM0; // Save CH0 results (clears IFG)
SD16AE &= ~SD16AE0; // Disable external input A0+, A0
SD16INCTL0 &= ~SD16INCH_0; // Disable channel A0+/-
ch_counter++;

SD16AE = SD16AE0; // Reset external input to A0+/-
SD16INCTL0 = SD16INCH_0; // Reset channel observed
break;
}

_BIC_SR_IRQ(LPM0_bits); // Exit LPM0

}
}
Но у меня проблема с недопонимание работы этого АЦП. Я подаю напряжение на канал A0 и вижу результат на SD16MEM0 он его благополучно заносит в ChA0results. Но эти значени при каждом перезапуске программы разные. Подскажите пожалуйста как решить эту проблему и составить таблицу:для
0.59В-"результат преобразования" , 0.531В- , 0.472В- , 0.413В- , 0.354В- , 0.295В- , 0.236В- , 0.177В- , 0.118В- , 0.059В.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 21:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.01374 секунд с 7
ELECTRONIX ©2004-2016