|
@@ -2,10 +2,10 @@
|
|
|
* Измеритель напряжения/тока/мощности/ёмкости *
|
|
|
|
|
|
Немогу никак определиться с диапазонами.
|
|
|
-Думал сначал сделать по два диапозона на напряжение и ток, но что-то мне эта
|
|
|
-идея разонравилась. Опять же, измерять большие напряжения/токи не особо часто
|
|
|
+Думал сначал сделать по два диапозона на напряжение и ток, но что-то мне эта
|
|
|
+идея разонравилась. Опять же, измерять большие напряжения/токи не особо часто
|
|
|
приходится. Напряжения в основном до 20 вольт, токи - до пары ампер.
|
|
|
-Тем более, так как это измеритель в конкретное устройство, то нужно под него и
|
|
|
+Тем более, так как это измеритель в конкретное устройство, то нужно под него и
|
|
|
подстраиваться.
|
|
|
Будет по одному диапазону на ток и напряжения.
|
|
|
|
|
@@ -13,11 +13,11 @@
|
|
|
сделать ввод Кд делителя напряжения умноженного на 1000,
|
|
|
и сопротивление шунта * Ку услителя тока * 1000.
|
|
|
|
|
|
-Далее в программе при вычислениях - получили код ацп, перевели в напряжение,
|
|
|
+Далее в программе при вычислениях - получили код ацп, перевели в напряжение,
|
|
|
умножили на 1000 и поделили на коэффициент.
|
|
|
|
|
|
Ох и здоровая (85х40мм) плата получилась...
|
|
|
-можно попробовать разбить на две -- на одной индикатор и кнопки, на второй всё
|
|
|
+можно попробовать разбить на две -- на одной индикатор и кнопки, на второй всё
|
|
|
остальное. получится две платы ~ 45х40 мм.
|
|
|
|
|
|
вариант A -- поменял входной разъём.
|
|
@@ -31,9 +31,9 @@
|
|
|
|
|
|
SVN-инит 2014.12.29
|
|
|
|
|
|
-появилась мысль -- сделать транзисторный ОК выход, например для управления
|
|
|
+появилась мысль -- сделать транзисторный ОК выход, например для управления
|
|
|
релюхой. хотя если брать ардуиновское реле -- то там нужен просто выход.
|
|
|
-реле для управления нагрузкой -- можно сделать тот-же зарядно-разрядный
|
|
|
+реле для управления нагрузкой -- можно сделать тот-же зарядно-разрядный
|
|
|
автомат.
|
|
|
===
|
|
|
2014.12.30
|
|
@@ -82,24 +82,24 @@ SVN-инит 2014.12.29
|
|
|
---
|
|
|
2016.03.24
|
|
|
|
|
|
-Так-как по прежнему тишь и глухомань, поднял проект в IAR-е и полез в
|
|
|
+Так-как по прежнему тишь и глухомань, поднял проект в IAR-е и полез в
|
|
|
отладку. Всё застряло где-то в Delay - похоже на проблемы с таймером.
|
|
|
-Таки да, забыл включить тактирование таймера -- похоже потерялось при
|
|
|
+Таки да, забыл включить тактирование таймера -- похоже потерялось при
|
|
|
переносе инициализации то туда, то сюда...
|
|
|
|
|
|
Повторяем заповедь -- "Часы, ноги, перефирия".
|
|
|
|
|
|
-Вобщем, SPI работает. Проблема была в том, что токозадающий резистор для
|
|
|
+Вобщем, SPI работает. Проблема была в том, что токозадающий резистор для
|
|
|
MAX нужно подключать на +5В, а у меня он был на земле. Напаял навесом.
|
|
|
Картинка появилась, но на индикаторах какой-то бред.
|
|
|
|
|
|
Исправил коды символов. Исправил позиции индикаторов.
|
|
|
-Вылезло два момента -- неправильно запаял индикаторы, собирался красный
|
|
|
-вниз, под ток, а жёлтый вверх под напряжение. В итоге запаял наоборот. Так
|
|
|
-ещё и на схеме они местами попутаны, так как на плате DS1 внизу, а DS2
|
|
|
+Вылезло два момента -- неправильно запаял индикаторы, собирался красный
|
|
|
+вниз, под ток, а жёлтый вверх под напряжение. В итоге запаял наоборот. Так
|
|
|
+ещё и на схеме они местами попутаны, так как на плате DS1 внизу, а DS2
|
|
|
вверху. Исправил схему и позиции индикаторов под факт.
|
|
|
|
|
|
-Добился картинки. Похоже тут какой-то бешенный оптимизатор -- выкинул нах
|
|
|
+Добился картинки. Похоже тут какой-то бешенный оптимизатор -- выкинул нах
|
|
|
похожую функцию. Нужно учесть на будущее.
|
|
|
|
|
|
---
|
|
@@ -122,30 +122,30 @@ C_adc = 16 * 10^-12, т.е.:
|
|
|
Factory_VREFINT у меня == 0x7E, т.е. полное значение 0x067E == 1662
|
|
|
Если это мерялось при 3В, то получается -- 1.218 В
|
|
|
|
|
|
-Предварительный успех -- читаю три канала АЦП и ПДП складывает их в
|
|
|
-память, преобразовываю и вывожу на индикаторы. Запуск АЦП каждые 10 мсек
|
|
|
+Предварительный успех -- читаю три канала АЦП и ПДП складывает их в
|
|
|
+память, преобразовываю и вывожу на индикаторы. Запуск АЦП каждые 10 мсек
|
|
|
тригером от Т2. Настройка Т2 пока заклинанием -- понимания нету.
|
|
|
-На очереди -- усреднение результатов, вычисление напряжения питания через
|
|
|
+На очереди -- усреднение результатов, вычисление напряжения питания через
|
|
|
опорное напряжение.
|
|
|
|
|
|
Пока не сильно нравится -- завышает напругу, скачут показания.
|
|
|
Мерял аккум - 4.219 В, мой точный показывал 4.207, DT-шка - 4.17-4.18 В.
|
|
|
Канал внутреннего опорного напряжения показывает 1.219 - 1.223 В
|
|
|
-По каналу тока висит 4 мВ, мой 5-ти разрядный вольтметр показывал 3 мВ на
|
|
|
+По каналу тока висит 4 мВ, мой 5-ти разрядный вольтметр показывал 3 мВ на
|
|
|
выводе.
|
|
|
-По каналу напряжения постоянно висит 17-26-35 мВ, вольтметр показывет
|
|
|
+По каналу напряжения постоянно висит 17-26-35 мВ, вольтметр показывет
|
|
|
чёткий "0". Замыкание на землю ничего не даёт. Хз, что это такое.
|
|
|
-Если от итогового напряжения вычесть эти миливольты, то результат будет
|
|
|
+Если от итогового напряжения вычесть эти миливольты, то результат будет
|
|
|
больше похож на правду.
|
|
|
|
|
|
На тему усреднения, такая идея:
|
|
|
- в прерывании ПДП данные перекладываются в быстрый кольцевой буфер
|
|
|
на 10 значений. Можно мерять чаще, хоть каждую 1 мс.
|
|
|
- - в основном теле каждые 100 мсек отрабатывает процедура, которая
|
|
|
+ - в основном теле каждые 100 мсек отрабатывает процедура, которая
|
|
|
усредняет данные из быстрого буфера, отбрасывая слишком мелкие/большие,
|
|
|
- и перекладывает в медленный кольцевой буфер. Тут же делать пересчёты
|
|
|
+ и перекладывает в медленный кольцевой буфер. Тут же делать пересчёты
|
|
|
значений из кода АЦП в реальные значения.
|
|
|
- - ещё одна процедура раз в секунду усредняет данные из медленного буфера
|
|
|
+ - ещё одна процедура раз в секунду усредняет данные из медленного буфера
|
|
|
и сохраняем в текущий секундный результат. Здесь же вычеслять мощности,
|
|
|
ёмкости, время и т.д.
|
|
|
|
|
@@ -154,11 +154,11 @@ Factory_VREFINT у меня == 0x7E, т.е. полное значение 0x067E
|
|
|
|
|
|
Причесал настройку Т2.
|
|
|
|
|
|
-Считаем среднее, зануляем младшие 4 бита, и потом сравниваем каждое
|
|
|
+Считаем среднее, зануляем младшие 4 бита, и потом сравниваем каждое
|
|
|
значение со сброшенными 4-мя младшими битами:
|
|
|
middle &= 0xFFF0;
|
|
|
if ((value & 0xFFF0) == middle) { ... }
|
|
|
-таким образом отберём только те значения, которые отличаются от
|
|
|
+таким образом отберём только те значения, которые отличаются от
|
|
|
предварительного среднего не более чем на 1/16
|
|
|
|
|
|
---
|
|
@@ -166,8 +166,8 @@ Factory_VREFINT у меня == 0x7E, т.е. полное значение 0x067E
|
|
|
|
|
|
Период измерений 1.25 мсек, быстрый буфер - на 16 значений.
|
|
|
Фильтра нет, только усреднение.
|
|
|
-Понял, почему скачет опора -- при включеном светодиоде проседает
|
|
|
-напряжение питания и завышаются показания. Что за хрень в канале напруги
|
|
|
+Понял, почему скачет опора -- при включеном светодиоде проседает
|
|
|
+напряжение питания и завышаются показания. Что за хрень в канале напруги
|
|
|
всё равно не понятно.
|
|
|
Нужно срочно увеличивать резисторы в цепи светодиодов.
|
|
|
Без светодиодов канал внутренней опоры показывает 1.219 В.
|
|
@@ -177,25 +177,25 @@ Factory_VREFINT у меня == 0x7E, т.е. полное значение 0x067E
|
|
|
|
|
|
Начитался AN3137. Краткие выводы:
|
|
|
- конденсаторы по входу АЦП нужно поменять на 220 нФ,
|
|
|
- - период измерения сделать не менее 2 мсек по упрощ'нной формуле,
|
|
|
+ - период измерения сделать не менее 2 мсек по упрощённой формуле,
|
|
|
или не менее 1,2 мсек по полной формуле,
|
|
|
- всё остальное -- отталкиваясь от этих данных.
|
|
|
|
|
|
Подробнее:
|
|
|
|
|
|
- 1. внешний конденсатор (правда в некоторых слачаях его не нужно ставить,
|
|
|
+ 1. внешний конденсатор (правда в некоторых слачаях его не нужно ставить,
|
|
|
только я не понял в каких) расчитывается по так:
|
|
|
Cext ~= 1.58 * Csh * (Umax / Ulsb),
|
|
|
где Csh -- внутрення ёмкость АЦП, 16 пФ,
|
|
|
Umax -- максимальное входное напряжение, принимается 4096,
|
|
|
Ulsb -- нужная точность, принимается 0.5 LSB.
|
|
|
Итого, Cext ~= 1.58 * 0.000000000016 * (4096 / 0.5) >= 207 nF.
|
|
|
-Этот конденсатор должен держать входное напряжение, пока оно меряеться АЦП,
|
|
|
+Этот конденсатор должен держать входное напряжение, пока оно меряеться АЦП,
|
|
|
при этом он должен разрядиться не больше чем на Ulsb.
|
|
|
Интересно, а можно его использовать для оверсемплинга, расчитав на 1 LSB ?
|
|
|
Конденсатор на 10 нФ успевает разрдится на 6-10 LSB.
|
|
|
|
|
|
- 2. Период времени между измерениями, за который должен успеть зарядиться
|
|
|
+ 2. Период времени между измерениями, за который должен успеть зарядиться
|
|
|
входной конденсатор, расчитывается так:
|
|
|
tc = - (Rin * Csh) * ln(1 - (Csh/Cext) * (Umax/Ulsb))
|
|
|
или, упрощённая формула tc ~= (Rin * Csh)
|
|
@@ -203,3 +203,29 @@ Factory_VREFINT у меня == 0x7E, т.е. полное значение 0x067E
|
|
|
ln(1 - (Csh/Cext) * (Umax/Ulsb)) ~= 0.9058
|
|
|
и в итоге, для канала вольтметра (как более высокоомного и медленного):
|
|
|
tc = (Rin * Csh) * 0.9058 = 9090 * 0.000000000016 * 0.9058 ~= 1,2 мсек
|
|
|
+
|
|
|
+---
|
|
|
+2016.07.27
|
|
|
+
|
|
|
+Попытка "ADC2" провалилась -- там что-то не то в буфере от АЦП.
|
|
|
+Возвращаюсь на последнюю рабочую версию и пойду другим путём.
|
|
|
+
|
|
|
+План:
|
|
|
+ - меряем два канала (напряжение и ток) каждые 1,5625 мсек;
|
|
|
+ - DMA забирает данные, в прерывании перебрасываем два слова в первичный
|
|
|
+ циклический буфер на 64 значения (два буфера под напряжение и ток?)
|
|
|
+ в этом буфере сырые данные (код от ацп);
|
|
|
+ - раз в 100 мсек усредняем/обрабатываем эти 64 значения и складываем во
|
|
|
+ второй буфер на 10 значений;
|
|
|
+ - раз в секунду усредняем и считаем данные из воторого буфера.
|
|
|
+
|
|
|
+ Закончил.
|
|
|
+ Получился слегка затянутым -- "фронт" изменения показаний около 3-х секунд.
|
|
|
+ Шаг вольтметра в 1 мВ я получил, но смысла особого не вижу :-)
|
|
|
+ Без "оверсэмплинга" показания более сабильны.
|
|
|
+
|
|
|
+ Фильтрация по каналу тока -- её не заметно. хз куда смотреть.
|
|
|
+ В канале тока постоянно "висит" 3-4 мА, когда-то я считал,
|
|
|
+ это похоже на смещение "0" от ОУ. Хз, нужно ли вычитывать их из результата.
|
|
|
+
|
|
|
+ Этот этап можно считать законченым.
|