LINUX.ORG.RU

Коррекция падения напряжения на диоде.

 , ,


1

1

Приветствую!

Занимаюсь не большим, собственным проектом метеостанции с питанием от солнечной батареи. Для начала, из чего попало собрал тестовый образец: STM32F100, NRF24L01, датчик температуры - диод, CR2032 для RTC. В конечном устройстве планирую поставить BMP280, SHT20, STM32L151, NRF96W / Si4463.

Первое и самое главное - напряжение питания не будет постоянным. Падение напряжения на прямо включенном диоде зависит от температуры и +- линейно, но при неизменной температуре будет меняться в зависимости от питающего напряжения по причине I=U/R. Соответственно имеем проблему, как правильно откорректировать это значение опираясь на питающее напряжение?

Я написал простенький код, где АЦП делает 128 семплов и после вычисляется среднее арифметическое. Приведу ту часть, где вычисляются сами значения:

// VDDA currently
float vdda = (1.20 / adc_vref) * 4096.0;

// LSB value
float lsbv = (vdda / 4096.0);

// Diode voltage
float diode = lsbv * adc_diode;

Подключил плату к БП, измерил значения при разном напряжении питания и получил следующее:

БП 3.3v
vdda	3.26591372		
lsb	0.000797342218	
diode	0.512691021	

БП 2v	
vdda	1.98513734	
lsb	0.000484652672	
diode	0.486106634	

Соответственно при изменении питающего напряжения в пределах 1.28077638 V напряжение на диоде меняется на 0.026584387 V.

С матаном у меня не очень, поэтому подвигав не многочисленными извилинами, я пришел к такой последовательности расчетов:

  1. Возьмём значения из предыдущих измерений. Верхнее значения напряжения при измерении 3.26591372, дельту 1.28077638 и 0.026584387
  2. В текущий момент у нас следующие показатели:
    • vdda 2.57880378
    • lsb 0.000629590766
    • diode 0.499265492
  3. Получаем текущую дельту напряжения питания: 3.26591372 - 2.57880378 = 0.68710994
  4. Делим вымеренную дельту на текущую: 1.28077638 / 0.68710994 = 1.86400502371
  5. Делим дельту диода на значение из предыдущих расчетов: 0.026584387 / 1.86400502371 = 0.0142619717554
  6. Прибавляем полученное значение корректировки к текущему напряжению на диоде: 0.499265492 + 0.0142619717554 = 0.513527463756

Собственно мы получаем нечто более-менее похожее на правду, но храмающее по точности.

Схема включения диода

Фото тестовой платы

Схема тестовой платы

У АЦП есть возможность задавать опорное напряжение на указаном пине.

BceM_IIpuBeT ★☆☆☆☆ ()
Ответ на: комментарий от BceM_IIpuBeT

Прикрути стабилизатор.

На запитку диода? Хм, вполне можно, надо поискать 2в стабилизатор. Или как вариант сгенерировать ШИМ микроконтроллером с обратной связью по АЦП.

Это конечно немного усложняет реализацию, выходит математически нормально скорректировать не выйдет?

wheelman ()

А может просто воткнуть какой-нить dc-dc преобразователь и не парить мозг ибо при сильном падении напряжения (солнце ушло за тучку) стм один фиг отрубится.

ya-betmen ★★★★★ ()
Ответ на: комментарий от wheelman

Хм, вполне можно, надо поискать 2в стабилизатор.

ИМХО через резисторы запитывай диод, один резистор перед стабилитроном включённым в паралель с конденсатором, второй резистор от стабилитрона к твоему диоду.

Ну и напряжение питания возьми не 2v, а побольше.

torvn77 ★★★★★ ()
Последнее исправление: torvn77 (всего исправлений: 1)
Ответ на: комментарий от ya-betmen

А может просто воткнуть какой-нить dc-dc преобразователь и не парить мозг ибо при сильном падении напряжения (солнце ушло за тучку) стм один фиг отрубится.

Как вариант. Я хочу попробовать поставить boost dc-dc типа TPS610986, который может работать до 0.7в. Соответственно днём схема питается от панели, ночью - ионистора, пока напряжение на нём не упадёт до 1.8в, после включится dc-dc. Не знаю, эффективна ли будет такая задумка.

wheelman ()

LSB тут не особо поможет.

У этого контроллера есть специальный канал АЦП от внутреннего стабилизированного источника, ЕМНИП, 3 вольта.

Читаешь с него значение, рассчитываешь коэффициент коррекции.

будет меняться в зависимости от питающего напряжения по причине I=U/R

Ты точно уверен что падение напряжения на p-n переходе рассчитывается по формуле для резистора?

James_Holden ★★ ()

но при неизменной температуре будет меняться в зависимости от питающего напряжения по причине I=U/R.

Чо?

Первое и самое главное - напряжение питания не будет постоянным.

Значит используй внешний ИОН

Соответственно при изменении питающего напряжения в пределах 1.28077638 V напряжение на диоде меняется на 0.026584387 V.

man операционный усилитель.

Oberstserj ★★ ()
Ответ на: комментарий от wheelman

На запитку диода?

На запитку всей схемы.

Или как вариант сгенерировать ШИМ микроконтроллером с обратной связью по АЦП.

Это конечно немного усложняет реализацию

Ойй ляяя….да откуда ж вы такие беретесь?) Скоро наверное необходимость настучать две строчки кода будет считаться задачей для титанов.

Oberstserj ★★ ()

Соответственно при изменении питающего напряжения в пределах 1.28077638 V напряжение на диоде меняется на 0.026584387 V.

И кстати, а в чем проблема использовать не рандомный диод, а например…эмм…LM35 например?

Oberstserj ★★ ()
Ответ на: комментарий от wheelman

зачем все эти изголения?

посмотри на обычную стабилизацию рабочей точки базы транзистора или просто стабилитрон втули. нет, конкретной схемы не подскажу, а вот направление, куда копать с наименьшими заморочками я дал.

упд: и не я один.

deep-purple ★★★★★ ()
Последнее исправление: deep-purple (всего исправлений: 1)

с питанием от солнечной батареи Первое и самое главное - напряжение питания не будет постоянным.

Значит надо сделать его относительно постоянным, иначе измерять подключенными датчиками будешь не температуру и влажность, а отголоски своего собственного непостоянного напряжения.

Не надо программировать и нагружать контроллер непрофильной задачей, надо контролировать заряд, например так и dc-dc например так

Brillenschlange ()
Ответ на: комментарий от torvn77

ИМХО через резисторы запитывай диод, один резистор перед стабилитроном включённым в паралель с конденсатором, второй резистор от стабилитрона к твоему диоду

Стабилитрон, подключенный прямиком к нагрузке, плохо держит напряжение. Банальная схема на одном транзисторе с общим эммитером уже выдает вполне неплохие показатели. А если взять стабилитрон на 5.6 В, то из коробки будет довольно сносная температурная компенсация. Но я бы посоветовал взять дешманскую трехножечную микросхему готового стабилизатора с уже встроенной температурной компенсацией, и не морочить голову.

byko3y ★★★★ ()
Ответ на: комментарий от James_Holden

У этого контроллера есть специальный канал АЦП от внутреннего стабилизированного источника, ЕМНИП, 3 вольта.
Читаешь с него значение, рассчитываешь коэффициент коррекции.

Как я понимаю с него можно получить значение текущего напряжения питания. Вот я приводил расчет:

float vdda = (1.20 / adc_vref) * 4096.0;
Именно напряжение питания контроллера, а падение на диоде совсем другая история.

Ты точно уверен что падение напряжения на p-n переходе рассчитывается по формуле для резистора?

но при неизменной температуре будет меняться в зависимости от питающего напряжения по причине I=U/R.

Чо?

Хреново описал суть. Вот таблиица:

Voltage VS Temperature

Из неё видно, что падение напряжения на диоде зависит от протекающего через него тока и температуры. Так как диод мы подключаем через резистор, то ток через диод, а с ним и падение напряжения, будем меняться вместе с напряжением. I=U/R - фигурирует по причина резистора, резистор - константа, меняется U, а за ним и I и падение на диоде.

wheelman ()
Ответ на: комментарий от Oberstserj

И кстати, а в чем проблема использовать не рандомный диод, а например…эмм…LM35 например?

Нет никаких проблем, кроме отсутствия LM35 и возможности его заказать. В конечном устройстве температуру через SHT20 можно получить, а тут вот интересная задача возникла в процессе, интересно её решить.

wheelman ()
Ответ на: комментарий от byko3y

Внимание, вопрос: откуда берется vref?

17-ый канал (ADCx_IN17) АЦП СТМ-ки. Подключен к внутреннему опорнику. Конкретно adc_vref - 16 битное значение взятое из регистра ADC_DR.

Стыдно показывать весь код, там сейчас каша из кусков кода, которыми я проверяю работу периферии и режимов сна. Над архитектурой ещё не думал, скорее всего это будет что-то легковесное non-RTOS, типа Protothreads + libopencm3.

wheelman ()
Ответ на: комментарий от gtk3

Диод Шоттки?

Нет, обычный германиевый 1N60P.

На запитку диода?

На запитку всей схемы.

С батарейным питанием не катит.

Это конечно немного усложняет реализацию

Ойй ляяя….да откуда ж вы такие беретесь?) Скоро наверное необходимость настучать две строчки кода будет считаться задачей для титанов.

Не столь программно, сколько физически. Там я фото прикрепил в топике, вывести ногу ШИМ и найти ещё одну АЦП + добавить фильтрующую пассивку, немного в духе подковки блохи. Не сверхзадача, но хотелось обойтись малой кровью.

Добавил схему

wheelman ()
Ответ на: комментарий от wheelman

С батарейным питанием не катит.

Чего вдруг-то?

вывести ногу ШИМ и найти ещё одну АЦП + добавить фильтрующую пассивку, немного в духе подковки блохи. Не сверхзадача, но хотелось обойтись малой кровью.

Ну вот да, я про это и говорил. Это уже считается «кровью». Жесть просто…

Oberstserj ★★ ()

датчик температуры - диод

Ну и зря, используй хотя бы NTC с нормированной характеристикой.

Делаешь делитель на 1% постоянном резисторе и NTC, показания АЦП зависят только от соотношение сопротивлений NTC и постоянного резистора.

Дальше пересчитываешь соотношение сопротивлений к абсолютную температуру через Уравнение Стейнхарта.

Коэффициенты в даташите на NTC.

Чтобы минимизировать саморазогрев NTС - подавай питающее напряжения на делитель только во время измерения. Измерения делай пореже.

shkolnick-kun ★★★★★ ()
Ответ на: комментарий от Oberstserj

С батарейным питанием не катит. Чего вдруг-то?

Например стабилизатор на 3в, на панели 3.5в, всё хорошо. Солнце зашло за тучки, на панели 2.5в, на VDD - 2.5в, не работает, напряжение на диоде изменилось.

Например стабилизатор на 2в. Тут всё хорошо кроме КПД. Растрачивать ценную энергию в купе с саморазрядом ионистора - ну такое себе решение.

Ну вот да, я про это и говорил. Это уже считается «кровью». Жесть просто…

Ну, в целом так и есть. Появляется необходимость искать ещё каналы АЦП, скорее всего ремапить SPI, перепаивать кучу очень тоненьких, ломких проводочков жалом T12-C1 на плате размером с пол спичечного коробка без какой-либо увеличительной оптики. Работа кропотливая и не на один час. Если для вас это раз плюнуть, то принимайте мои поздравления :)

У меня сборка этой платы заняла достаточно времени. В особенности изготовление миниатюрной печатной платы с фильтрующими конденсаторами, посадка её на компаунд сверху микросхемы с последующей напайкой тонких проводочков на LQFP ножки.

wheelman ()
Ответ на: комментарий от shkolnick-kun

Ну и зря, используй хотя бы NTC с нормированной характеристикой.

Да я смотрю идея с диодом была так себе. Попытаюсь найти NTC или LM35 на старых материнках.

wheelman ()
Ответ на: комментарий от wheelman

17-ый канал (ADCx_IN17) АЦП СТМ-ки. Подключен к внутреннему опорнику

Ну так и бери напряжение оттуда. В конечном итоге с этим напряжением ты и делаешь сравнение.

byko3y ★★★★ ()
Ответ на: комментарий от wheelman

Например стабилизатор на 3в, на панели 3.5в, всё хорошо. Солнце зашло за тучки, на панели 2.5в, на VDD - 2.5в, не работает, напряжение на диоде изменилось.

Т.е. про буст схемы и степики ты не в курсе?)

Oberstserj ★★ ()
Ответ на: комментарий от shkolnick-kun

просто купи

Я ему уже намекал. У него там проблемы какие-то. Да и паять ему влом как вяснилось :)

Oberstserj ★★ ()
Ответ на: комментарий от Oberstserj

Т.е. про буст схемы и степики ты не в курсе?)

Лично я стабилизатором называю LDO, возможно это не совсем корректно в виду попаданию в эту категорию LDO, DC-DC и стабилитронов.

У него там проблемы какие-то

А можно конкретнее, а то я не в курсе.

Да и паять ему влом как вяснилось :)

Да, мне влом перепаивать столь миниатюрный монтаж, это куда сложнее, чем чесать языком на форуме ;)

wheelman ()
Последнее исправление: wheelman (всего исправлений: 1)
Ответ на: комментарий от wheelman

Например стабилизатор на 3в, на панели 3.5в, всё хорошо. Солнце зашло за тучки, на панели 2.5в, на VDD - 2.5в, не работает, напряжение на диоде изменилось.

А ты типа уверен, что напряжение с панели всегда допустимое, и можно вот так вот напрямую на микроконтроллер фигачить? Почему б не поставить импульсник или LDO и не искать себе приключений?

И потом нормальный датчик температуры. Если микроконтроллер не греется от нагрузки - внутри у него тоже датчик температуры есть.

Vit ★★★★★ ()
Ответ на: комментарий от wheelman

Лично я стабилизатором называю LDO, возможно это не совсем корректно в виду попаданию в эту категорию LDO, DC-DC и стабилитронов.

Ну ты сам себе и ответил: рассуждаешь про кпд, но продразумеваешь лдо. Ты уж определись)

А можно конкретнее, а то я не в курсе.

Про то, что якобы у тебя нет возможности ничего заказать.

Да, мне влом перепаивать столь миниатюрный монтаж, это куда сложнее, чем чесать языком на форуме ;)

Ну ты пожалуйся тут, пожалуйся. Я 0402 паяю без проблем и когда мне рассказывают, что LQFP паять сложно - сорян, звучит как издевательство.

Oberstserj ★★ ()
Ответ на: комментарий от Vit

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

Кстааати..)

Oberstserj ★★ ()
Ответ на: комментарий от Vit

Ты решил скроить 30 центов, а диод специально запитал без LDO или источника тока?

Скорее один коллега рассказывал, как использовал диод в качестве датчика температуры и мне стало интересно попробовать.

В целом да, на большинстве схем его запитывают без LDO или источников тока. Я не гуру электронщик, возможно я чего-то не знаю.

А ты типа уверен, что напряжение с панели всегда допустимое, и можно вот так вот напрямую на микроконтроллер фигачить? Почему б не поставить импульсник или LDO и не искать себе приключений?

Делал замер при максимальной экспозиции солнцем при ясной погоде, панель выдавала порядка 3.5в, после диода выйдет порядка 3.4-3.3в, думаю это в пределах терпимого.

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

И потом нормальный датчик температуры. Если микроконтроллер не греется от нагрузки - внутри у него тоже датчик температуры есть.

Можно и так. Мне интересен был вариант с диодом.

wheelman ()
Ответ на: комментарий от Oberstserj

Ну ты сам себе и ответил: рассуждаешь про кпд, но продразумеваешь лдо

Вот именно, когда я говорил про КПД я подразумевал LDO. LDO можно поставить после панели, как посоветовал Vit, но это не отменяет батарейного питания и снижения напряжения с течением времени.

Про то, что якобы у тебя нет возможности ничего заказать.

Возможность есть, не позволяют финансы, сейчас есть другие планы на них, поэтому я оперирую тем, что есть.

Ну ты пожалуйся тут, пожалуйся. Я 0402 паяю без проблем и когда мне рассказывают, что LQFP паять сложно - сорян, звучит как издевательство.

Дядя, я не пойму, что ты хочешь, похвалы? Ты не берёшь в расчет оборудование, условия и объём работы. Ты просто Senior 0402 паяльщик, пришёл и пытаешься кидануть в меня какахой.

Ну ОК.

Я паяю не первый год и могу запаять хоть 0402, хоть любую BGA-ху без проблем ( Руки не дрожат :) ). Но одно дело впаять пару 0402, а другое провести комплексную работу по переносу ионистора и SPI из одного угла платы в другой. Нужно определить пины по даташиту, высмотреть их на плате через лупу, выпаять SPI и ионистор, найти новое место для ионистора, нарезать тонких проводников, зачистить, залудить и протянуть через огород из уже существующих проводков стараясь их не оборвать.

Не то, чтобы это смерть как сложно, займёт пару часов, но зачем эта бессмысленная работа, чтобы что-то кому-то доказать? Кек. shkolnick-kun хороший вариант посоветовал, если не прокатит с диодом, поставлю NTC, это простое решение без существенной переделки платы.

Возможно ты не совсем понял моё слово «сложно». Я не говорю, что припаяться на один LQFP занимает 6 часов, но напаять пару проводников без соплей всё же кропотливая работа, особенно когда работаешь без оптики ( пользуюсь лупой после, когда инспектирую ).

wheelman ()
Ответ на: комментарий от wheelman

Делал замер при максимальной экспозиции солнцем при ясной погоде, панель выдавала порядка 3.5в, после диода выйдет порядка 3.4-3.3в, думаю это в пределах терпимого.

После диода выйдет 2,9-3,0 скорее.

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

Вот с этого и надо было начать :)

Oberstserj ★★ ()
Ответ на: комментарий от wheelman

Вот именно, когда я говорил про КПД я подразумевал LDO.

Яснопонятно.

Я не гуру электронщик, возможно я чего-то не знаю.

А, понятно.

Ты не берёшь в расчет оборудование, условия и объём работы.

T12-C1

Да нет, как раз учитываю.

Ты просто Senior 0402 паяльщик, пришёл и пытаешься кидануть в меня какахой.

Не в тебя, а в твое брезгливое нежелание ручками иногда работать.

Но одно дело впаять пару 0402, а другое провести комплексную работу по переносу ионистора и SPI из одного угла платы в другой. Нужно определить пины по даташиту, высмотреть их на плате через лупу, выпаять SPI и ионистор, найти новое место для ионистора, нарезать тонких проводников, зачистить, залудить и протянуть через огород из уже существующих проводков стараясь их не оборвать.

Даааа…ууууужассс…ууууу!

Не то, чтобы это смерть как сложно

Вот именно…

но зачем эта бессмысленная работа, чтобы что-то кому-то доказать?

Ну если эта работа бессмысленна, то может вообще и не начинать ничего? Это ж надо паяльник в розетку включать, мучительно долго ждать пока он нагреется, задыхаться от канифоли, потом еще кооооодить….а потом ждать пока скомпилииииируется xD))

напаять пару проводников без соплей всё же кропотливая работа, особенно когда работаешь без оптики

Ладно-ладно, понял, бедняжка :) Так и быть, не мучайся.

Oberstserj ★★ ()

Ты пытаешься что-то наколхозить, а ведь в таких схемах используют специальные источники опорного напряжения ИОН, как раз для АЦП. И как раз при изменении температуры они именно что плавают в некоторых обозначенных в документации диапазонах, и там это быть может гораздо лучше чем на всяких диодах…

Ток максимальный у ИОН небольшой - а большой и не нужен для такой задачи

I-Love-Microsoft ★★★★★ ()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)

А не хочешь использовать специализированный датчик температуры? Есть совмещенные с влажностью и атмосферным давлением

Недавно помогал товарищу его климатическую хреновину делать, возились с датчиком, он сразу по I2C что надо отдавал

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от wheelman

IMHO ты слишком много хочешь сделать на соплях одновременно. Но удачи.

Тогда тебе надо:

  • Мерить внутренний vref, чтобы понять текущее напряжение питание схемы (т.к. оно является опорой при измерениях)
  • Найти в датащите на диод, как меняется падение напряжения от тока (он же у тебя плавать будет), и пересчитывать пропорционально результат измерений.
Vit ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

А не хочешь использовать специализированный датчик температуры? Есть совмещенные с влажностью и атмосферным давлением

Я его поставлю в следующей версии. Мне диод советовал коллега, говорил, что использовал в своих устройствах, что просто в использовании, имеет весьма не плохую точность и дёшево-сердито. Но похоже его устройства были без батарейного питания или он использовал ИОН.

wheelman ()

Полагаю вопрос исчерпал себя. Всем спасибо за советы, они были очень полезны!

Я ещё поиграюсь с диодом ради любопытства, а потом сменю его на NTC, это эффективное решение. А в следующей версии буду использовать датчик влажности или барометр (оба меряют) чтобы получать данные о температуре.

wheelman ()
Ограничение на отправку комментариев: только для зарегистрированных пользователей