Перейти к содержанию

Ацп


svip

Рекомендуемые сообщения

Допустим ацп сидит на PORTA (мега 16)

как правильно прописать

PORTA=0x00;

DDRA=0x00;

Пробовал разные варианты. получается что меряет при всех. но разные данные выдает. Подскажите как правильно??

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Сначала его нада правильно инициализировать выбрать источник апорного напряжения и режим работы питать ацп (AVCC) нада через LC фильтр аналогавая земля должна быть соеденени с обшей шиной только в одном месте.

И даташ не плохо бы почитать

Ваши права преследуются по закону!

Ссылка на комментарий
Поделиться на другие сайты

С портами разобрался. Но вот проблема. нужно мерять переменное напряжение 50 герц 0-300 Вольт (424 вольта макс.)

поставил делитель и получаю на входе контроллера от 0 до 5 В. Можно ли подавать на вход АЦП отрицательное напряжение до -5В?

Вроде как нет. Подскажите как реализовать измерение.

Пробовал через диод чтобы отсекать отрицательный полупериод, но у диода нелинейная х-ка и не могу рассчитать коэффициент для отображения значений.

P.S. делитель для смещения начального напряжения до 2,5 В не подходит (принцыпиально).

Ссылка на комментарий
Поделиться на другие сайты

Если хотите мерить отрицательное напряжение и нехотите (из непонятных мене принцыпов) делать смещение в положительную область то или испольлзовать специальный внешний АЦП или ничего больше неделать и сказать себе - "блин опять ничего неполучилось"... Почему нельзя делать смешение???

Ссылка на комментарий
Поделиться на другие сайты

потому что напряжение для смещения не удается застабилизировать точно. и при нулевом напряжении переменки на входе получаем разные напряжения на экране.

Ссылка на комментарий
Поделиться на другие сайты

Ну насколько мене известно и по собственному опыту знаю - даже если мерить стабилизированую постоянку - измерения плавают очень сильно.. если нужна точность - то использовать среднее из 4 - 8 измерений... При частоте 50герц это реально... И рачитывайте на то что искажения БУДУТ!!!! От них неизбавиться.. Тут надо думать как их учитывать... И ещё если плавает - то можно попробовать выделить постоянную составляющую и придать её к опрному...

Ссылка на комментарий
Поделиться на другие сайты

нее. Вы меня не правильно поняли. я говорю про напряжение 5Вольт которое подаем на резисторный делитель чтобы на входе АЦП получить смещение 2,5 вольта. сюда же и подключаю переменку амплитудой до 2,5 В

Вот напряжение на делитель я и не могу застабилизировать. получается что когда переменка - 0 на входе АЦП от делителя идет не точно 2,5 В а 2,4-2,7 В

Ссылка на комментарий
Поделиться на другие сайты

Ну тогда для начала нужно сюда выложить вашу схему принципиальную :) Потом мы её покритикуем и предложим решение которое будет работать... Ждём... Потому что вы там чтото не так делаете...

Ссылка на комментарий
Поделиться на другие сайты

post-23011-1203675937_thumb.png

Вот кусок схемы с делителем неапряжения смещения и делителем переменного напряжения.

P.S. извеняюсь что такая "некрасивая" просто под рукой кроме painta ничего не оказалось

Изменено пользователем svip
Ссылка на комментарий
Поделиться на другие сайты

Ну вопервых так подключать опорное для точных измерений - полное ламерство.. Для опорного надо ставить свой токовый стабилизатор. И я бы выбрал опорное на 4,096 вольта.. чтобы потом хорошо делилось... На входе надо поставитьповторяющий усилитель.. И им же сместить от "-" в "+" весь сигнал.. И потом будете удивляться как всё хорошо работает!!! Так как делаете вы - на колене сможете померить с точностью так на пол вольта...

P.S. Ещё полезно почитать даташит - там написано как нужно использовать АЦП для достижения большой точности... И ещё на время измерений хорошо давать процесору sleep...

Изменено пользователем wowa
Ссылка на комментарий
Поделиться на другие сайты

Используйте sleep.h и активируйте прерывание на конец перевода... Вообще то это надо прикручивать применительно к алгоритму работы вашей програмы... Я незнаю что кк и когда хотите мерить... Может быть вам и точность такая ненужна... А пример - религия непозволяет посмотреть в директорию cvavr\examples\ ??? Есть именно такоё пример только на ADC8535.. Вобщем то сильно неотличается от того что делаю я... Я кстати тоже не всегда его усыпляю... Редко мене такая точность нужна...

Ссылка на комментарий
Поделиться на другие сайты

написал таким образом:

#include <mega16.h>
#include <stdlib.h>
#include <math.h>

#define ADC_VREF_TYPE 0x00
//#define ADC_VREF_TYPE 0x40

// Alphanumeric LCD Module functions
#asm
  .equ __lcd_port=0x18;PORTB
#endasm
#include <lcd.h>

// Declare your global variables here

unsigned int i;
int v;
unsigned char volt;



void in(unsigned int v_in)
{
 char temp[3];
 lcd_gotoxy(0,0);
 itoa(v_in,temp);
 lcd_puts(temp);
}

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
 ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
 // Start the AD conversion
 ADCSRA|=0x40;
 // Wait for the AD conversion to complete
 while ((ADCSRA & 0x10)==0);
 ADCSRA|=0x10;
 return ADCW;
}

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 500,000 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: None
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x81;				   




// LCD module initialization
lcd_init(16);

while (1)
  {
	v=0;
	// Place your code here
	for (i=0;i<1000;i++)
	{
	  volt=read_adc(1);
	  v=fmax(v,volt);
	}
	in(v); 

	//v=0;
	//for (i=0;i<1000;i++)
	//{
	//  volt=read_adc(0);
	//  v=(int)volt;
	//}

  };
}

но уже при напряжении +2,5 вольт на входе ацп в переменной volt=read_adc(1); уже лежит значении 255. Получается что опорное напряжение забито как 2,5 В ???? хотя же стоит 5В

post-23011-1204109335_thumb.png

Ссылка на комментарий
Поделиться на другие сайты

А проверено на железе или только в симулятору? Если только симулятор - то надо пробовать на железе. В большинстве случаеш на железе ходит а в симуляторе нет...

Ссылка на комментарий
Поделиться на другие сайты

на железе вообще чудеса. при напряжении на входе 4-5 вольт - меряет правильно, при напряжении на входе 1-2 Вольта выводит значение 760 или 555 или такого типа числа. хотя максимум же 255

Вот и не пойму где проблема

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...