#1 2019-07-20 14:21:42

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

снова про вольтметр (секретный)

Добрый день !

http://blog.unlimite.net/?p=25

Давно известная тема про измерение опорного Vcc для получения точных значений входного напряжения.

Вот сделал такой код :

float VBG = 1.191, R_kft = 5.309, v_bat, ref_volt;
uint32_t data_rf, data_v;

void setup()  {
	Serial.begin (57600);
//  ====================================================================
ADCSRA = 0x85;    //  ADCSRA  1 0 0 0   0 1 0 1     // adc enable , clk/32
ADCSRB = 0x00;    //  ADCSRB  0 0 0 0   0 0 0 0
ADMUX = 0x4F;     //  ADMUX   0 1 0 0   1 1 1 1     // ref = AVCC , input = GND
DIDR0 = 0xFF;     //  DIDR0   1 1 1 1   1 1 1 1     // ADCxD = off
  } 
 
void loop()  { 
Volt_zamer(); 
	ref_volt = (VBG * 16368L)/(float)data_rf;					//	Vcc
  	v_bat = (((float)data_v * ref_volt) / 16368L) * R_kft;		//	Vin
Serial.print("Vcc = ");  Serial.print (ref_volt);  Serial.print(" V  ");
Serial.print("  Vin = ");  Serial.print ( Vac2 );  Serial.println(" V");
  delay(500);	
  }
/* ============================================================================ */
/* =========               блокок функций измерения                   ========= */
/* ============================================================================ */  
uint32_t Ref_zamer()  {
	ADC = 0;	ADMUX = 0x4E;				// ref = Vcc , input = 1.1V (VBG)	
	for (uint16_t n = 0; n < 256; n++ ) { ADCSRA |= (1<<ADSC);  
			while (bit_is_set(ADCSRA, ADSC));	data_rf += ADC; } 
	data_rf >>= 4;				  			// 16368 full scale 14bit  *** ОВЕРСЕМПЛИНГ
  return data_rf;  }

uint32_t Volt_zamer()  {	Ref_zamer(); 
	ADC = 0;	ADMUX = 0x43;           	// ref = Vcc , input = A3	
	for (uint16_t n = 0; n < 256; n++ ) { ADCSRA |= (1<<ADSC);  
			while (bit_is_set(ADCSRA, ADSC));	data_v += ADC; } 
	data_v >>= 4;  							// 16368 full scale 14bit  *** ОВЕРСЕМПЛИНГ	
  return data_v;  }

Но где-то я туплю, а где не пойму ....

Vcc = 4.98 V    Vin = 12.09 V
Vcc = 4.98 V    Vin = 12.09 V
Vcc = 4.98 V    Vin = 12.09 V
Vcc = 4.98 V    Vin = 12.09 V
Vcc = 4.98 V    Vin = 12.09 V
Vcc = 4.98 V    Vin = 12.09 V
Vcc = 4.98 V    Vin = 12.09 V
Vcc = 4.98 V    Vin = 12.09 V
Vcc = 4.97 V    Vin = 12.09 V
Vcc = 4.98 V    Vin = 12.09 V
Vcc = 4.98 V    Vin = 12.09 V
Vcc = 4.98 V    Vin = 12.09 V
Vcc = 4.98 V    Vin = 12.09 V
Vcc = 4.98 V    Vin = 12.09 V
Vcc = 4.98 V    Vin = 12.09 V
Vcc = 4.98 V    Vin = 12.09 V
Vcc = 4.98 V    Vin = 12.09 V
Vcc = 4.98 V    Vin = 12.09 V
Vcc = 4.98 V    Vin = 12.09 V
Vcc = 4.98 V    Vin = 12.09 V
Vcc = 4.98 V    Vin = 12.09 V
Vcc = 4.98 V    Vin = 12.09 V
Vcc = 4.98 V    Vin = 12.09 V
Vcc = 4.98 V    Vin = 12.10 V





Vcc = 4.84 V    Vin = 12.64 V
Vcc = 4.84 V    Vin = 12.65 V
Vcc = 4.84 V    Vin = 12.65 V
Vcc = 4.83 V    Vin = 12.61 V
Vcc = 4.84 V    Vin = 12.64 V
Vcc = 4.84 V    Vin = 12.64 V
Vcc = 4.84 V    Vin = 12.65 V
Vcc = 4.84 V    Vin = 12.62 V
Vcc = 4.84 V    Vin = 12.64 V
Vcc = 4.84 V    Vin = 12.65 V
Vcc = 4.84 V    Vin = 12.63 V
Vcc = 4.84 V    Vin = 12.64 V
Vcc = 4.84 V    Vin = 12.62 V
Vcc = 4.84 V    Vin = 12.62 V
Vcc = 4.84 V    Vin = 12.65 V
Vcc = 4.84 V    Vin = 12.64 V
Vcc = 4.84 V    Vin = 12.64 V
Vcc = 4.84 V    Vin = 12.64 V
Vcc = 4.83 V    Vin = 12.61 V
Vcc = 4.84 V    Vin = 12.64 V
Vcc = 4.84 V    Vin = 12.64 V
Vcc = 4.84 V    Vin = 12.65 V
Vcc = 4.84 V    Vin = 12.64 V
Vcc = 4.84 V    Vin = 12.65 V
Vcc = 4.84 V    Vin = 12.65 V

Vcc измеряет корректно все соответствует измеренному мультиметром.

Но почему при этом скачет значение входного напряжения если в реале оно постоянно..... ???

Неактивний

#2 2019-07-20 14:38:04

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: снова про вольтметр (секретный)

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

Неактивний

#3 2019-07-20 15:14:21

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: снова про вольтметр (секретный)

Вячеслав Азаров пише:

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

Это понятно, но не вижу связи с данным случаем.

Может вы вставку с результатами не проскролили до конца ?
Там не в шумах дело... там стабильное изменение показаний входного напряжения (постоянного) в зависимости от изменения опорного ...

Неактивний

#4 2019-07-20 15:46:39

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: снова про вольтметр (секретный)

renoshnik пише:
Вячеслав Азаров пише:

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

Это понятно, но не вижу связи с данным случаем.

Может вы вставку с результатами не проскролили до конца ?
Там не в шумах дело... там стабильное изменение показаний входного напряжения (постоянного) в зависимости от изменения опорного ...

Я не искал ошибки в вашей программе. Кроме того, непонятно что это за два блока результатов. Я вам дело подсказал, из-за чего может быть, если нет ошибок в логике вычислений. Если это понятно, то почему вы делаете всё наоборот? Мгновенные значения опорника и сигнала должны считываться одновременно. Я всё просмотрел но не разбирался, нет интереса. Правду говорят о том куда благими намерениями дорога вымощена.

Неактивний

#5 2019-07-20 16:15:17

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: снова про вольтметр (секретный)

Вячеслав Азаров пише:
renoshnik пише:
Вячеслав Азаров пише:

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

Это понятно, но не вижу связи с данным случаем.

Может вы вставку с результатами не проскролили до конца ?
Там не в шумах дело... там стабильное изменение показаний входного напряжения (постоянного) в зависимости от изменения опорного ...

Я не искал ошибки в вашей программе. Кроме того, непонятно что это за два блока результатов. Я вам дело подсказал, из-за чего может быть, если нет ошибок в логике вычислений. Если это понятно, то почему вы делаете всё наоборот? Мгновенные значения опорника и сигнала должны считываться одновременно. Я всё просмотрел но не разбирался, нет интереса. Правду говорят о том куда благими намерениями дорога вымощена.


Два блока результатов это результаты при РАЗЛИЧНЫХ значениях Vcc. Входное напряжение это стабильное напряжение от аккумулятора.
В каждом блоке результатов значения достаточно стабильные, поэтому вопроса к пульсациям и синхронности измерения нет.

Проблема в том, что по идее при ИЗМЕНЕНИИ опорного напряжения (выбрано Vcc) значения измерения входного напряжения от аккумулятора НЕ должны меняться...  А вот этого как раз и не происходит...

Неактивний

#6 2019-07-20 17:34:08

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: снова про вольтметр (секретный)

renoshnik пише:

... Проблема в том, что по идее при ИЗМЕНЕНИИ опорного напряжения (выбрано Vcc) значения измерения входного напряжения от аккумулятора НЕ должны меняться...  А вот этого как раз и не происходит...

Опорное, это то на что опираются - известная константа. На основании её вычисляют все поправки. Изменили опорное - напряжение получли другой результат. Разобраться в этих трёх соснах не так уж и сложно.  При питании АЦП не от опоного источника, требется измерение известного напряжения Vref, с получением какого-то результата ADref и пересчёте: Vsig = Vref * ADsig / ADref, где Vsig - искомое напряжение сигнала а ADsig - понятно. Это без учета делителей и поправок. Всё очень просто.

Неактивний

#7 2019-07-20 17:44:20

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: снова про вольтметр (секретный)

Вячеслав Азаров пише:
renoshnik пише:

... Проблема в том, что по идее при ИЗМЕНЕНИИ опорного напряжения (выбрано Vcc) значения измерения входного напряжения от аккумулятора НЕ должны меняться...  А вот этого как раз и не происходит...

Опорное, это то на что опираются - известная константа. На основании её вычисляют все поправки. Изменили опорное - напряжение получли другой результат. Разобраться в этих трёх соснах не так уж и сложно.  При питании АЦП не от опоного источника, требется измерение известного напряжения Vref, с получением какого-то результата ADref и пересчёте: Vsig = Vref * ADsig / ADref, где Vsig - искомое напряжение сигнала а ADsig - понятно. Это без учета делителей и поправок. Всё очень просто.

Это понятно...
В первом сообщении есть ссылка на статью (уверен вы её уже когда-то читали).

Перед измерением напряжения АКБ в программе измеряется напряжение внутреннего источника (1.1 В) по результату рассчитывается
Vcc которое и используется как опорное напряжение.
По идее при изменении Vcc при расчете напряжения аккумулятора должна автоматически производиться корректировка...
а этого не происходит....

Неактивний

#8 2019-07-20 17:59:55

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: снова про вольтметр (секретный)

Нет не читал. Я уже как-то давал ссылку на хорошую статью, но не для AVR. Вот она: https://www.st.com/content/ccc/resource … 211314.pdf Здесь много полезного по этой теме.

Неактивний

#9 2019-07-20 17:59:56

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: снова про вольтметр (секретный)

Вот тут измеряем " известного напряжения " внутренний источник = 1.1 Вольта

uint32_t Ref_zamer()  {
	ADC = 0;	ADMUX = 0x4E;				// ref = Vcc , input = 1.1V (VBG)	
	for (uint16_t n = 0; n < 256; n++ ) { ADCSRA |= (1<<ADSC);  
			while (bit_is_set(ADCSRA, ADSC));	data_rf += ADC; } 
	data_rf >>= 4;				  			// 16368 full scale 14bit  *** ОВЕРСЕМПЛИНГ
  return data_rf;  }

в качестве опорного напряжения используем Vcc .
соответственно если мы знаем напряжение источника 1.1 В, то можем рассчитать реальное значение Vcc

	ref_volt = (VBG * 16368L)/(float)data_rf;					//	Vcc

После этого измеряем напряжение от аккумулятора на входе А3, в качестве опорного напряжения используем Vcc

uint32_t Volt_zamer()  {	Ref_zamer(); 
	ADC = 0;	ADMUX = 0x43;           	// ref = Vcc , input = A3	
	for (uint16_t n = 0; n < 256; n++ ) { ADCSRA |= (1<<ADSC);  
			while (bit_is_set(ADCSRA, ADSC));	data_v += ADC; } 
	data_v >>= 4;  							// 16368 full scale 14bit  *** ОВЕРСЕМПЛИНГ	
  return data_v;  }

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

v_bat = (((float)data_v * ref_volt) / 16368L) * R_kft;		//	Vin

+++++++++++++++++++++++++++++++++++++

по идее при изменении Vcc корректировка в расчетах должна происходить автоматически но это не так...

Остання редакція renoshnik (2019-07-20 18:14:20)

Неактивний

#10 2019-07-20 18:04:21

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: снова про вольтметр (секретный)

Вячеслав Азаров пише:

Нет не читал. Я уже как-то давал ссылку на хорошую статью, но не для AVR. Вот она: https://www.st.com/content/ccc/resource … 211314.pdf Здесь много полезного по этой теме.

Мельком взглянул но это не то...

Посмотрите ту ссылку, что у меня или мой пост №9 я описал способ измерения...

Про пульсации и наводки тут речи нет (пока).
Во всех результатах опорное напряжение Vcc измеряется с достаточной точностью но почему-то не получается реализовать корректировку измеряемого напряжения аккумулятора.

Неактивний

#11 2019-07-20 18:18:01

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: снова про вольтметр (секретный)

Приведение типов это не преобразование типов, с ним нужно острожно и со знанием сути. Возможно, это и есть ошибка.

Неактивний

#12 2019-07-20 18:29:17

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: снова про вольтметр (секретный)

renoshnik пише:

Мельком взглянул но это не то... Посмотрите ту ссылку, что у меня или мой пост №9 я описал способ измерения... Про пульсации и наводки тут речи нет (пока). Во всех результатах опорное напряжение Vcc измеряется с достаточной точностью но почему-то не получается реализовать корректировку измеряемого напряжения аккумулятора.

Главное, обычно, между строк. Я вам дал подсазку. Математически, в программе, всё верно.

Неактивний

#13 2019-07-20 18:47:05

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: снова про вольтметр (секретный)

Вячеслав Азаров пише:

Приведение типов это не преобразование типов, с ним нужно острожно и со знанием сути. Возможно, это и есть ошибка.

Экспериментировал и с преобразованием типов... без результатов ....

Неактивний

#14 2019-07-20 18:58:50

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: снова про вольтметр (секретный)

renoshnik пише:
Вячеслав Азаров пише:

Приведение типов это не преобразование типов, с ним нужно острожно и со знанием сути. Возможно, это и есть ошибка.

Экспериментировал и с преобразованием типов... без результатов ....

Может у вас внутренний опорник неисправен? Или вы его неправильно измеряете, что он плывёт? А приведение типов? Лучше поставьте константу первой в выражении.

Неактивний

#15 2019-07-20 19:21:16

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: снова про вольтметр (секретный)

" Может у вас внутренний опорник неисправен? Или вы его неправильно измеряете, что он плывёт? "

Врятли... контролирую мультиметром и реальные значения всегда соответствуют расчетным ref_volt (Vcc) ...

Неактивний

#16 2019-07-20 19:30:08

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: снова про вольтметр (секретный)

renoshnik пише:

" Может у вас внутренний опорник неисправен? Или вы его неправильно измеряете, что он плывёт? "
Врятли... контролирую мультиметром и реальные значения всегда соответствуют расчетным ref_volt (Vcc) ...

Тогда осталось применить хрустальный шар.  smile

Неактивний

#17 2019-07-20 19:56:16

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: снова про вольтметр (секретный)

Вячеслав Азаров пише:
renoshnik пише:

" Может у вас внутренний опорник неисправен? Или вы его неправильно измеряете, что он плывёт? "
Врятли... контролирую мультиметром и реальные значения всегда соответствуют расчетным ref_volt (Vcc) ...

Тогда осталось применить хрустальный шар.  smile

Вот это в тему....
Заблудился в трех соснах...

Неактивний

#18 2019-07-28 10:37:49

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: снова про вольтметр (секретный)

Столкнулся с таким вот явлением ....  sad

Ардуино ПроМини маркировка 5 Вольт 16 МГц.
Подключаю через адаптер USB to UART с питанием 5 Вольт, работает нормально.
Подключаю внешнее питание 5 Вольт прямо на Vcc тоже нормальная работа.

!!! Подключаю внешнее питание 7 - 9 Вольт на вход RAW и получаю Vcc = 3.3 Вольта  !!!

Это, что китайцы перепутали стабилизатор на плате ????

Неактивний

#19 2019-07-28 10:46:48

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: снова про вольтметр (секретный)

renoshnik пише:

Столкнулся с таким вот явлением ....  sad

Ардуино ПроМини маркировка 5 Вольт 16 МГц.
Подключаю через адаптер USB to UART с питанием 5 Вольт, работает нормально.
Подключаю внешнее питание 5 Вольт прямо на Vcc тоже нормальная работа.

!!! Подключаю внешнее питание 7 - 9 Вольт на вход RAW и получаю Vcc = 3.3 Вольта  !!!

Это, что китайцы перепутали стабилизатор на плате ????

Скорее всего, или маркировку. А что на корпусе стабилизатора написано и какая частота кварца в реальности?

Неактивний

#20 2019-07-28 13:00:22

renoshnik
Учасник
Зареєстрований: 2017-04-03
Повідомлень: 1,025

Re: снова про вольтметр (секретный)

Вячеслав Азаров пише:
renoshnik пише:

Столкнулся с таким вот явлением ....  sad

Ардуино ПроМини маркировка 5 Вольт 16 МГц.
Подключаю через адаптер USB to UART с питанием 5 Вольт, работает нормально.
Подключаю внешнее питание 5 Вольт прямо на Vcc тоже нормальная работа.

!!! Подключаю внешнее питание 7 - 9 Вольт на вход RAW и получаю Vcc = 3.3 Вольта  !!!

Это, что китайцы перепутали стабилизатор на плате ????

Скорее всего, или маркировку. А что на корпусе стабилизатора написано и какая частота кварца в реальности?


стаб. S2RA маркировка.

кварц AN маркировка, точнее это сборка с тремя ножками (СМД). жаль измерить нечем...

Неактивний

#21 2019-07-28 13:48:40

Вячеслав Азаров
Учасник
Зареєстрований: 2017-05-25
Повідомлень: 1,732

Re: снова про вольтметр (секретный)

renoshnik пише:

... стаб. S2RA маркировка. кварц AN маркировка, точнее это сборка с тремя ножками (СМД). жаль измерить нечем...

Понятно. Хорошая маркировка, и счищать не нужно, что-бы интеллектуальную собственность не украли. smile Измерить можно программой Ардуинки и секундомером, только без использования системного таймера millis().

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму