как заставит ацп измерять по времени??? - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 212»
Модератор форума: ivan_fd 
Форум Picbasic.ru » Программирование МК » PicBasicPro » как заставит ацп измерять по времени??? (вот проект посмотрите и помогите очень важно)
как заставит ацп измерять по времени???
ODNOROG Дата: Вс, 30.09.2012, 02:41  |                                                                                                                Сообщение # 1
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 25
Репутация: 0   ±
Замечания:   ±
На сайте с 06.11.2011

Статус: Offline

в архиве программа и протеус.
в чем собственно вопрос.

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

Принцип программы прост как только уровень напряжения достигнут отключить зарядное устройство. измеряемое напряжение до 108 вольт.

зарядное для электропогрузчиков
Прикрепления: ghjtrn.rar(19Kb)
ЯНДЕКС Дата: 30.09.2012
anatol Дата: Вс, 30.09.2012, 09:11  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 535
Репутация: 13   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

А если так?
Прикрепления: VATmetr_7seg.dsn(109Kb)
ODNOROG Дата: Вс, 30.09.2012, 16:50  |                                                                                                                Сообщение # 3
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 25
Репутация: 0   ±
Замечания:   ±
На сайте с 06.11.2011

Статус: Offline

спасибо за ответ , но мне кажется это не поможет... sad
mikhail09p Дата: Вс, 30.09.2012, 17:16  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 495
Репутация: 10   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Поможет! Диод я бы убрал - тем самым некоторая фильтрация положительных импульсов. И конденсатор не менее 10 мкф.
И напишите программно гистерезис с задержкой - 10 - 60 сек.

Сообщение отредактировал mikhail09p - Вс, 30.09.2012, 17:21
anatol Дата: Вс, 30.09.2012, 19:41  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 535
Репутация: 13   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

mikhail09p, Диод убирать нельзя. Это "пиковый детектор". Резистор в параллель для разрядки конденсатора.
mikhail09p Дата: Вс, 30.09.2012, 20:58  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 495
Репутация: 10   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

А зачем здесь "пиковый детектор" ? Нам ведь нужно напряжение на аккумуляторе смотреть, а не выбросы при его зарядке?
anatol Дата: Вс, 30.09.2012, 22:53  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 535
Репутация: 13   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Источник с большими пульсациями. Из-за внутреннего сопротивления аккумулятора напряжение во время зарядки тоже пульсирует. И у автора при измерении во время максимального напряжения срабатывает отключение зарядки. Гистерезис наверно мал и обнаруживается недозаряд и повторное включение. Конденсатор как фильтр без диода при пульсирующем источнике покажет среднее значение напряжения (уменьшенное по отношению к пиковому) - требует расчета фильтра (данных нет) и коррекции измеренных данных. На диоде мы крадем 0,7 вольта из 108 вольт и устаканиваем измерение dry .
Сообщение отредактировал anatol - Вс, 30.09.2012, 22:54
ODNOROG Дата: Пн, 01.10.2012, 09:42  |                                                                                                                Сообщение # 8
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 25
Репутация: 0   ±
Замечания:   ±
На сайте с 06.11.2011

Статус: Offline

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

Добавлено (01.10.2012, 09:42)
---------------------------------------------
возможно за эту же минуту аккумулятор до зарядится и не будет этого дребезжания реле и пускателя???

anatol Дата: Пн, 01.10.2012, 11:19  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 535
Репутация: 13   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

ODNOROG, процесс заряда довольно сложен. Однако в упрощенном виде концом заряда можно считать достижение напряжения 1,55 - 1,65 вольта на элемент. (Параметры должны быть заданы в паспорте на акк.) Рабочее напряжение заряженного акк. = 1,2 вольта н а элемент (это под нормальной нагрузкой). Следовательно надо отслеживать среднее значение для допустимости повторного включения на заряд, т.е. достигли максимального значения (1,55 - 1,65) переключаемся в режим контроля напряжения и повторное включение зарядного при опускании напряжения до 1,3-1,4 вольта на банку.
Надеюсь у вас аак. щелочные. Для других типов аналогично, только изменяются напряжения.
ODNOROG Дата: Пн, 01.10.2012, 11:28  |                                                                                                                Сообщение # 10
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 25
Репутация: 0   ±
Замечания:   ±
На сайте с 06.11.2011

Статус: Offline

дело в том что стоят 40 банок по 2.6 вольта на кажую ( последовательно)
Andriy76 Дата: Пн, 01.10.2012, 12:47  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 239
Репутация: 10   ±
Замечания:   ±
На сайте с 06.04.2010

Статус: Offline

Можно пойти разными путями
1 Заряжать АКБ в буферном режиме . Взять стабилизатор анодного напряжения и переделать под себя .
2 можно и циклически как Вы хотите .
3 Задействовать ШИМ и им управлять . Контролируем ток , а после переключаемся на контроль напряжения .
anatol Дата: Пн, 01.10.2012, 13:07  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 535
Репутация: 13   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

ODNOROG, Значит у вас кислотный (свинцовый) аккумулятор. Его ЭДС 2,4 Вольта. А 2,6 вольта это предельное зарядное.
Цикл простой 10 секунд зарядный ток, выкл. зарядного тока 1сек пауза, измеряем ЭДС, если меньше 2,5 продолжаем по циклу, если равно или больше выключаем заряд и переходим в просто контроль напряжения стало меньше 2,3 дозаряжаем. и так по кругу.
ODNOROG Дата: Вс, 07.10.2012, 15:00  |                                                                                                                Сообщение # 13
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 25
Репутация: 0   ±
Замечания:   ±
На сайте с 06.11.2011

Статус: Offline

наконец то сделал. Правда немного по другому но вообще суппер..... Спасибо всем за внимание
smile smile smile
anatol Дата: Вс, 07.10.2012, 22:49  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 535
Репутация: 13   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Надо поделиться наработанным. В копилку так сказать.
ODNOROG Дата: Пт, 09.11.2012, 18:42  |                                                                                                                Сообщение # 15
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 25
Репутация: 0   ±
Замечания:   ±
На сайте с 06.11.2011

Статус: Offline

вот готовый вариант рабртает следующим образом.
когда уровень достиг максимума ----- отключаеться

и не включиться пока не станет ниже минимума я поставил разницу в 2 вольта

им еня это устроило

' ---------------------[подключаемые файлы АЦП]--------------------------------
' ----------------Задание параметров для команды ADCIN ------------------------
Define ADC_BITS 10 ' Задать число разрядов в результате
Define ADC_CLOCK 3 ' Выбрать источник тактового сигнала (3 = RC)
Define ADC_SAMPLEUS 50 ' Задать время преобразования в микросекундах
'------------------------------------------------------------------------------
TRISA = %11100111 ' Установить PORTA
ADCON1 = %10000010
TRISB = $00 ' все выводы порта В - выход
TRISC = $0F ' выводы порта С - 0,1,2,3 = вход 4,5,6,7,=,выход

Segments Var PORTB ' вывод сегментов на PORTB
Digits Var PORTC ' вывод анодов цифр на PORTС

advv VAR WORD ' хранить результат чтения АЦП вольтметр
adva VAR WORD
indic VAR WORD ' число для вывода на индикатор
n Var Byte ' переменная значения зажигаемого разряда
x Var Byte ' переменная номера зажигаемого разряда
i Var Byte ' переменная равная количеству разрядов индикатора
vid Var Byte ' вид измерения U или А
Bk2 Var Byte ' переменная команды Button
Bk3 var byte
Bk4 var byte
Bk5 var byte
Bk6 var byte
BN Var Byte ' переменная П/П обработки клавиатуры
B0 Var Bit ' переменная П/П обработки клавиатуры

count_remain VAR BYTE ' Остаток счета
count_per_c VAR BYTE ' Счет C
maximum var word
minimum var word
rc0 var portc.0 ; клавиатура = - +
rc1 var portc.1

pause 150
'____________ Начало работы программы измерения напряжения __________________
lop:
GoSub key:
Branchl BN, [volt, maxx, minn]
GoTo lop ' Закольцевать
volt:
ADCIN 0, advv ' Прочитать АЦП - канал 0, значение (0-1023)
advv = ((advv + 1) */ 500) >> 2 ' определить: (advv+1 * 500)/1024
indic = advv * 4
;vid = $c1
gosub log ' вид измерения U
GoTo loop1 ' Покажите значение на индикаторе

loop1: GoSub display ' Покажите значение на индикаторе
GoTo lop ' Возврат
'********************************************************************
'________________ П/п вывода числа на индикатор ____________________
'********************************************************************
display:
For i = 0 To 3 ' счетчик разрядов
n = indic Dig i ' выделить число для индикации
GoSub display1 ' засветить чисдо на индикаторе
Pause 1 ' пауза в 1 милисек.
x = i + 4 ' произвести коррекцию вывода портов вкл. анодов
; if x = 7 then Segments = vid ' на индикатор вид измерения ------ Закрывает !!!!!!!!!!!!!
if x = 5 then PORTB.7 = 0 ' подготовить точку
Digits = Dcd x ' включить разряд на индикаторе
Next i ' продолжить вычислять разряд
Return
'********************************************************************
'_______________ П/п определения сегментов числа ____________________
'********************************************************************
display1:
Digits = $00 ' погасить индикаторы
Lookup n, [$C0, $F9, $A4, $B0, $99, $92, $82, $F8, $80, $90, $BF, $FF ], Segments
' таблица 0 1 2 3 4 5 6 7 8 9 - off
Return
'********************************************************************

maxx:
'vid = $dc
indic = maximum
Bk3 = 0
Button rc0, 0, 255, 30, Bk3, 0, k11
maximum = maximum + 1
if maximum=2001 then maximum=2000

k11:

Bk4 = 0
Button rc1, 0, 255, 30, Bk4, 0, k22
maximum = maximum - 1
if maximum = 0 then maximum = 1
k22:
goto loop1

minn:
'vid = $e3
indic = minimum
'Bk5 = 0
'Button rc0, 0, 255, 30, Bk5, 0, k33
minimum = maximum - 20
if minimum =2001 then minimum = 2000
k33:

'Bk6 = 0
'Button rc1, 0, 255, 30, Bk6, 0, k44
'minimum = minimum - 1
'if minimum = 0 then minimum = 1
k44:
goto loop1

'********************************************************************
; подпрограмма проверки на логику

log:

if advv*4 >=maximum then low porta.3

if advv*4 <=minimum then high porta.3


return

'****************************************************************
key:

Bk2 = 0 ' Переменная циклов команды BUTTON
Button portC.3, 0, 255, 10, Bk2, 0, k1 ' Проверка кнопки 1(Пропуск если Не Нажато)
if B0 = 1 then k2
BN = BN + 1 ' если нажата - записать в переменную +1
if BN = 3 then BN = 0

B0 = 1
k2:
return
k1:
B0 = 0
return
'==============================================================================
end

Добавлено (09.11.2012, 18:38)
---------------------------------------------
и все равно работает не так как хочется...

Добавлено (09.11.2012, 18:42)
---------------------------------------------
когда нет нагрузки
программа думает что необходимо произвести заряд и включает пускатель, тут же проверяет что превышает показание и вырубает , и так по кругу

подскажите что можно придумать .... sad sad sad

Форум Picbasic.ru » Программирование МК » PicBasicPro » как заставит ацп измерять по времени??? (вот проект посмотрите и помогите очень важно)
Страница 1 из 212»
Поиск: