Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Измерение напряженрия
Измерение напряженрия
tolyan249 Дата: Вт, 16.02.2021, 08:43  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 183
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

Есть 6 аккумуляторов по 2.4в соединённых последовательно ,проект прилагаю ,но хрень какая та получается ,при изменение напряжение на 1 аккумуляторе в протеусе ,изменяеться показания и на другом ,не понятно ,может кто другой алгоритм знает ,мне нужно именно знать какое напряжение на каком аккумуляторе.

Спасибо.
Прикрепления: 234.bmp(276.9 Kb) · 1187182.zip(61.4 Kb)


если знаешь,помоги.
ЯНДЕКС Дата: 16.02.2021
anatol Дата: Вт, 16.02.2021, 11:07  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 624
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Не заметил...У меня при установке разных напряжений - разные показания.
xvovanx Дата: Вт, 16.02.2021, 12:01  |                                                                                                                Сообщение # 3
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 437
Репутация: 50   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата tolyan249 ()
не понятно


У вас в коде куски разных кодов програмы смешаны в кучу. Пишите, что все входы/выходы цифровые, а измеряете аналог АЦП. Не вижу настроек АЦП. Странные делители и расчет у вас, не возьму в толк. Для начала сделайте тестовую симуляцию для одного входа с переменником и вольтметром для контроля правильности замера. Вот кусок моего кода с настройками и расчетом. Совет - в железе показания на аккумах будут скакать, поэтому делайте много замеров и усредняйте. И пишите мах комментариев, что делаете, будет и самому потом разбираться и вспоминать проще, и другим понять ваш ход мыслей.
Прикрепления: 2151876.png(36.0 Kb) · 2561199.png(71.4 Kb)

Сообщение отредактировал xvovanx - Вт, 16.02.2021, 12:07
tolyan249 Дата: Вт, 16.02.2021, 12:47  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 183
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

Спасибо за ответы и помощь Делитель привёл к 1 показанию когда напряжение каждого аккумулятора 2.5в  ,   меняю напряжение на 2 аккумуляторе с верху ,показания меняются на 1 аккумуляторе ,просто алгоритм подсчёта напряжения нудно какой то другой .при делении может как то ограничится 2 знаками после запятой.

'****************************************************************
'Тест на PIC16F877
'Измерение 8 каналов напряжения                                         *
'****************************************************************
'-------------------------- Опции компилятора --------------------------------

Device = 16F877   ' Используемый микроконтроллер
Xtal = 4   ' Частота осциллятора  4 МГц
'Config  CP_OFF, DEBUG_OFF,CPD_OFF, LVP_OFF, BODEN_ON, PWRTE_OFF, WDT_OFF
'Config  BODEN_ON

;--Опции компилятора--

Declare  SHOW_SYSTEM_VARIABLES = OFF   ;В Proteus показать внутренние переменные
Declare  FSR_CONTEXT_SAVE = OFF   ;Не заботится о сохранении содержимого регистра FSR
Declare  Reminders = OFF    ;Выключает напоминания компилятора
Declare  Warnings = OFF   ;Выключает предупреждения компилятора

;--Настройки портов--

Declare  PORTA_PULLUPS = off  ; Включить подтягивающие резисторы на PORTA
Declare  PORTE_PULLUPS = off  ; Включить подтягивающие резисторы на PORTE
Declare  All_Digital =   off   ;перевести все порты в цифровой ввод вывод

; ---------------Настройка АЦП-------------------------
Declare Adin_Res 10  'задаём 10разрядную 1024 точность входов ацп ,500mv/1023=4.89mv
Declare Adin_tag 8_fosc  ;выбираем тактовый источник для АЦП   FOSC/8(4-20мгц)
Declare  Adin_Stime 50

'---Настройки подключения ЖКИ---

Declare  LCD_Type ALPHA
Declare  LCD_DTPin  PORTB.4
Declare  LCD_ENPin  PORTB.2
Declare  LCD_RSPin  PORTB.3
Declare  LCD_Interface  4
Declare  LCD_CommandUs  2000
Declare  LCD_DataUs  50
Declare  LCD_Lines  2

Dim V0 As  Word
Dim V1 As  Word
Dim V2 As  Word
Dim V3 As  Word
Dim V4 As  Word
Dim V5 As  Word
'V6 Var Word
'V7 Var Word

Dim U0 As Float
Dim U1 As  Float
Dim U2 As Float
Dim U3 As  Float
Dim U4 As Float
Dim U5 As  Float
'U6 VAR Word
'U7 VAR Word

Dim mm0 As Float
Dim mm1 As Float
Dim mm2 As Float
Dim mm3 As Float
Dim p As Byte
Dim mm4 As Float
Dim mm5 As Float

up var Float

'--Определение назначения каналов портов--

TRISA = %11111111      ' Сделать PORTA входом
TRISE = %00000111      ' Сделать PORTE входом
TRISC = %00000000     ' PORTC выходами
TRISD = %00000000     ' Сделать каналы PORTD выходами
TRISB = %00000000
PORTD=0

'------------------ Инициализация -------------------------
ADCON0 = 1 ' %0000001
ADCON1 = 10000100    '%01110000

ADCON0.0 = 0 'Включим АЦП
ADCON0.0 = 0 'Включим АЦП

PAUSE 500           ' Ждем 0.5 сек инициализации ЖКИ
LCDOUT $FE, 1       ' Очищаем экран ЖКИ

'------------------------Старт-----------------------------------
Start:
'---------------------Измерение напряжения-----------------------
ADCIN 0, V0         ' Считываем аналоговое значение и сохраняем в Volts1
U0=v0*4.89
U0=U0/100

ADCIN 1, V1         ' Считываем аналоговое значение и сохраняем в Volts1
U1=v1*4.89
U1=U1 /100

ADCIN 2, V2         ' Считываем аналоговое значение и сохраняем в Volts2
U2=V2*4.89
U2=U2/100

ADCIN 3, V3         ' Считываем аналоговое значение и сохраняем в Volts3
U3=V3*4.89
U3=U3/100

ADCIN 4, V4         ' Считываем аналоговое значение и сохраняем в Volts4
U4=V4*4.89
U4= U4/100

ADCIN 5, V5         ' Считываем аналоговое значение и сохраняем в Volts5
U5=V5*4.89
U5=U5/100

mm0=U0
mm1=U1
mm2=U2
mm3=U3
mm4=U4
mm5=U5

U0=u0-mm1
U1=u1-mm2
U2=u2-mm3
U3=u3-mm4
U4=u4-mm5

up=u5+u4
up=up+u3+u2
up=up+u1+u0

Print At 1, 1,"V0=",Dec2 U0,"  V1=",Dec2 U1
Print At 2, 1,"V2=",Dec2 U2,"  V3=",Dec2 U3
Print At 3, 1,"V4=",Dec2 U4,"  V5=",Dec2 U5
Print At 4, 5,"Up=",Dec2 up

GoTo Start

End
Прикрепления: 4977182.png(83.3 Kb)


если знаешь,помоги.
Сообщение отредактировал tolyan249 - Вт, 16.02.2021, 14:24
tolyan249 Дата: Вт, 16.02.2021, 13:12  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 183
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

На вольтметре в протеус показывает  2.5в  а у меня 2.49 ,почему ,что не правильно ? мне нужна точность  в 10мв. Меняются несколько напряжений а не одно +общее ,
Прикрепления: 7494680.png(81.3 Kb) · 1460683.png(82.3 Kb)


если знаешь,помоги.
Сообщение отредактировал tolyan249 - Вт, 16.02.2021, 13:37
xvovanx Дата: Вт, 16.02.2021, 14:58  |                                                                                                                Сообщение # 6
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 437
Репутация: 50   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата tolyan249 ()
На вольтметре в протеус показывает  2.5в  а у меня 2.49 ,почему ,что не правильно ? мне нужна точность  в 10мв


Выведите на дисплей рядом с вольтажем и колличество ступенек АЦП для проверки.

Сообщение отредактировал xvovanx - Вт, 16.02.2021, 14:59
anatol Дата: Вт, 16.02.2021, 17:23  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 624
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Зима...мозги замерзли?  При изменении на любом из нижних аккумуляторов будет меняться напряжение в точках соединения других аккумуляторов. соответственно напряжение надо вычислять минусуя АЦП от старшего к младшему. Более того АЦП 10-разрядный, и при пяти вольтах опорного 1 разряд весит 5В\1024=0,00489В=4,89мВ (от 0 до 1023 будет 1024). Чтобы было кратно 10 мВ необходимо внешний опорник на 1,024 Вольт. Для целого значения есть 4, 096 вольта , причем встроенные. 
Код
ADCIN 0, V0         ' Считываем аналоговое значение и сохраняем в Volts1
U0=v0*4.89
"V" большое не равно    "v" маленькому. Далее, у тебя нулевой АЦП в Протеусе подключен к шестому аккумулятору, а первый к шестому. Создает путаницу.
tolyan249 Дата: Вт, 16.02.2021, 18:07  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 183
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

там 51 или 52 ,что соответствует 51*4.89=249,39     или 52*4.89=254,28, вот и получаеться либо 2.49в или 2.54в ,2.50 не попадает.

если знаешь,помоги.
Сообщение отредактировал tolyan249 - Вт, 16.02.2021, 18:08
Anatoliy1000 Дата: Пн, 22.02.2021, 10:26  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 179
Репутация: 0   ±
Замечания:   ±
На сайте с 02.03.2016

Статус: Offline

Подскажите как проверять на "разряженность" Акка?
Пробовал через встроенный LVP, но как обычно ни чего не понял. Как всегда нехватка базовых знаний.

 

И вообще не понятно физически как это все на МК должно быть? Нужно на ногу LVP "вешать" питание или она и так знает что происходит, ведь одна из ног питание знает.


Я новичок. За помощь стараюсь плюсовать репутацию (пока других способов сказать спасибо не знаю).
ivan_fd Дата: Пн, 22.02.2021, 11:04  |                                                                                                                Сообщение # 10
Группа: Модераторы
Ранг:  Специалист
Сообщений: 1137
Репутация: 108   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

У вас контроллер питается от АКБ?

За состоянием батареи, я думаю, нужно следить АЦП.
А LVD удобно применять, если нужен контроль за снижением напряжения ниже контрольной точки.
Например: настроить LVDL3:LVDL0 - 0111, и если напряжение питания снизится в пределах 3.0-3.18В, то установится флаг
LVDIF(прерывание, если включено) Далее, делаем какие то действия, что бы успеть до полного пропадания питания.
Цитата Anatoliy1000 ()
Нужно на ногу LVP "вешать" питание или она и так знает что происходит, ведь одна из ног питание знает.

Не нужно.


Меня все время преследуют умные мысли...но я быстрее!!!
Anatoliy1000 Дата: Вт, 23.02.2021, 07:30  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 179
Репутация: 0   ±
Замечания:   ±
На сайте с 02.03.2016

Статус: Offline

1. Если на АЦП, то с чем сравнивать?
2. Если все как вы написали, то почему у меня "не заработало"? Верней сразу после подключения МК к питанию срабатывает флаг. Может паузу добавить для стабилизации напряжения?


Я новичок. За помощь стараюсь плюсовать репутацию (пока других способов сказать спасибо не знаю).
Сообщение отредактировал Anatoliy1000 - Вт, 23.02.2021, 07:31
ЯНДЕКС Дата: 23.02.2021
xvovanx Дата: Вт, 23.02.2021, 10:42  |                                                                                                                Сообщение # 12
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 437
Репутация: 50   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

Цитата Anatoliy1000 ()
1. Если на АЦП, то с чем сравнивать?

АЦП и LVD не имеют друг к другу никакого отношения. LVD-внутренний компаратор, сравнивающий питание с внутренними опорными напругами. Это в других контроллерах есть FVR, так вот там можно с АЦП работу организовать.

Цитата Anatoliy1000 ()
2. Если все как вы написали, то почему у меня "не заработало"? Верней сразу после подключения МК к питанию срабатывает флаг. Может паузу добавить для стабилизации напряжения?

А если посмотреть и почитать мануал - порядок и последовательность включения для правильной работы, т.е. не сразу все регистры включаем, а постепенно, отслеживая готовность LVD.
Прикрепления: 9048937.png(98.0 Kb)

Сообщение отредактировал xvovanx - Вт, 23.02.2021, 11:29
Anatoliy1000 Дата: Вт, 23.02.2021, 12:17  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 179
Репутация: 0   ±
Замечания:   ±
На сайте с 02.03.2016

Статус: Offline

Становится кое что понятно.
А как АЦП будет проверять напряжение? Допустим я пока схему питаю от блока питания  с регулируемым напряжением. По логике АЦП измеряет 5/1035 (например) = 0,005 тогда 5в = 1035, 3в = 600 (резистором подстроечным найти значение например 10Ком), а если упало напряжение до 3в которое мне нужно поймать, это будет 3/1035 3в=1035, 1,8в=600. Правильная логика или опять не понял чего-то?
Тогда как бы я не понижал напряжение АЦП всегда мне покажет где "середина" делителя. То есть нужно АЦП сравнивать с чем-то стабильным. Посмотрел стабилизаторы на 3.3в копейки стоят. Может их цеплять и с ними сравнивать?
Я просто думал можно с какой-то ногой сравнивать где есть стабильное напряжение не зависящее от питания. То есть я понимаю что есть Vref - опорное напряжение но как им воспользоваться не знаю. Предполагаю, что если Vref настроить как Vref, то он будет стабильным на определенное напряжение. Вольтметр на работе поэтому пока лишь предположение и времени пока нет "добить" этот вопрос срочно нужно статью дописать.


Я новичок. За помощь стараюсь плюсовать репутацию (пока других способов сказать спасибо не знаю).
Сообщение отредактировал Anatoliy1000 - Вт, 23.02.2021, 12:24
ivan_fd Дата: Вт, 23.02.2021, 12:44  |                                                                                                                Сообщение # 14
Группа: Модераторы
Ранг:  Специалист
Сообщений: 1137
Репутация: 108   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Цитата Anatoliy1000 ()
По логике АЦП измеряет 5/1035
Не 1035, а от 0 до 1023 (10 бит - 210 = 1024)

Если питать от батареи и ее же мерять, то нужно внешний источник опорного напряжения.
В 18f252 нету внутреннего.


Меня все время преследуют умные мысли...но я быстрее!!!
xvovanx Дата: Вт, 23.02.2021, 12:47  |                                                                                                                Сообщение # 15
Группа: Модераторы
Ранг:  Помогаю всем
Сообщений: 437
Репутация: 50   ±
Замечания:   ±
На сайте с 02.05.2013

Статус: Offline

С замером питания батарейки, если МК сам от нее питается не так просто. С АЦП ничего путного не выйдет - на входе АЦП на делителе напруга будет уменьшаться, но в то же время и питание самого МК будет уменьшаться и одна ступенька АЦП отсчета станет меньше. В итоге скажем при делителе на входе 1/2 мы получим 512 ступенек всегда и при севшей напруге тоже.
Вы правильно пишете про стабильные опорные источники, но стабы и делители довольно много кушающие и при питании от маленькой батарейки устройство быстро ее посадит. Можно конечно что-то придумать, типа подавать с выхода ноги единицу через резистор на стабилитрон и делитель только в моменты замера, но это как-то так не очень.
В некоторых контроллерах (сталкивался в 12F1822/1840) есть FVR модули опорных напряжений 1,024/2,048/4,096В, так вот эту опорную напругу можно по всякому и для компаратора и АЦП использовать. В вашем контроллере стоит LVD модуль, его можно использовать по другому, для АЦП его никак.

Сообщение отредактировал xvovanx - Вт, 23.02.2021, 12:59
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Измерение напряженрия
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: