#26 2018-05-10 23:25:11

Lic Control
Учасник
Зареєстрований: 2016-01-23
Повідомлень: 124

Re: [решено] Датчик тока с высоким макс.током и чувствительностью в низком

LynX пише:

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

Основная проблема не в гальванической развязке, хотя она безусловно нужна, а в том, что упомянутый вами трансформатор тока понижающий - 50A/50mA. Измеряя ток в 23 мА вы получите на выходе ток 23 мкА. Даже если вы нагрузите выход резистором 100 ом (это максимум, что допускает этот т-р) напряжение на резисторе в режиме  ожидания будет U = 0.000023 А х 100 Ом = 0.0023 В. Значит нужен будет операционный усилитель,  к нему питание, ограничители уровня и т.д.
Ваша схема при измеряемом токе 10А даст на выходе 1В.

Неактивний

#27 2018-05-11 03:43:22

LynX
Учасник
Зареєстрований: 2018-04-19
Повідомлень: 71

Re: [решено] Датчик тока с высоким макс.током и чувствительностью в низком

Коротко: подключаем к АЦП по классической схеме и все работает. Мне и всем кто все усложнял - двойка.

Полностью: Мучался я с АЦП, а оказалось что АЦП на ESP32 присутствует чисто формально. 5-8 рабочих бит остальное мусор 1 2.

Пришлось посадить на AVR, которая там была временно, теперь видимо будет штатной. Схема включения - токовый датчик + резистор на 47Ом + сдвиг напряжения.

Дальше просто считаю RMS. При 1000 измерениях значения немного прыгают, при 10к уже довольно надежно.
Показания простые: Все выключено RMS <=0.0011В, лампа накаливания 75Вт RMS=0.0165В, зарядник от мобильного 2Вт RMS=0.0017В (пробовал и другие, это самое маломощное что нашел).

	uint64_t sum=0,square_sum=0;
	const uint32_t MAX=10000;
	for(uint32_t i=0;i<MAX;i++)
	{	uint16_t value=analogRead(A0);
		sum+=value;
		square_sum+=((uint32_t)value)*value;
	}
	double average=sqrt(square_sum/(double)MAX);
	double RMS=sqrt((square_sum+average*(MAX*average-2*sum))/MAX);
	// пусть не смущает эта формула RMS, я просто задумался как посчитать RMS не сохраняя всех значений в памяти
	// взял листик, три строчки, получилось вот такая эквивалентная формула

screens_2018.1525998654.png
Тот редкий случай когда теоретически ничего не получается, а практически все как по маслу (благодаря оверсемплингу?). С учетом что расчетное и измеренное напряжение на лампе накаливания совпало, буду считать что ошибок нет и это неожиданно успешный результат.

Всем спасибо.

Остання редакція LynX (2018-05-11 03:46:00)

Неактивний

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

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

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