реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Сохранение важных переменных в EEPROM при потере питяния
ATMExpert
сообщение Feb 8 2012, 13:05
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 20-11-09
Из: Ставрополь
Пользователь №: 53 756



Бодрого дня всем форумчанам. В моем проекте (на Mega640) требуется в момент пропадания общего питания сохранять 5-6 байт оперативной информации в еепром, дабы иметь возможность при подаче питания благополучно их считывать. Аппаратно для этих целей использую встроенный компаратор с внешней опорой (REF192) и делитель по питанию. В программе ставлю прерывание на компаратор, ну и пишу в еепром. Схема питания такая: +24-->+12-->diode-->condencator 2200 uF-->+5. При пропадании +24 схема детектирует просадку, вызывается прирывание. Конденсатор 2200 мкФ думаю достаточен, чтобы успеть записать в память до снижения питания ниже критического уровня. В железе показывает достаточно устойчивую работу (в лаб. условиях). Хочется услышать мнения по такой реализации, а также может нужно еще что-то в код добавлять если после успешной записи остается время (может нужно ожидать с ноги выхода компаратора смену уровня, если это была кратковременная просадка питания).
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 8 2012, 13:13
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(ATMExpert @ Feb 8 2012, 17:05) *
Конденсатор 2200 мкФ думаю достаточен

Это лучше подсчитать, чтобы иметь уверенность. Возможно, лучше будет перенести конденсатор на +24 или +12, если там нет мощных потребителей, ибо U^2.

Цитата(ATMExpert @ Feb 8 2012, 17:05) *
может нужно еще что-то в код добавлять если после успешной записи остается время (может нужно ожидать с ноги выхода компаратора смену уровня, если это была кратковременная просадка питания).

Можно, только с длительным debouncing'ом от греха.
Go to the top of the page
 
+Quote Post
V_G
сообщение Feb 8 2012, 13:15
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Я в xmegy успеваю сохранить страницу (32 байта) при конденсаторе на питании по 3,3 В 100 мкФ.
Проверял так: после аварийной записи EEPROM анализировал соотв. флаг готовности и после его выставления в ком-порт в цикле начинал сыпать байты. Сколько байт придет в компьютер, примерно такой запас (в попугаях) по времени имеется до критического понижения питания
Go to the top of the page
 
+Quote Post
zombi
сообщение Feb 8 2012, 13:36
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(ATMExpert @ Feb 8 2012, 16:05) *
... если после успешной записи остается время ...

Я бы ждал время за которое кондёр по питанию должен точно разрядиться.
Если этого не происходит, значит "фигня" с питанием, и в этом случае вижу 3 варианта дальнейших действий:

1. ничё не делаем и работаем дальше.
2. уходим на програмный сброс.
3. "радостно" сообщаем о плохом питании с дальнейшим п1 или п2.

Ну и BOD мк обязательно должен быть включён.
Go to the top of the page
 
+Quote Post
ATMExpert
сообщение Feb 8 2012, 16:06
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 20-11-09
Из: Ставрополь
Пользователь №: 53 756



Кондер стоит по 12 вольтам. от этой же напруги питается dc-dc на 5 вольт(Мега и логика). А диод после +12 стоит, он и отсекает всю нагрузку по этой линии питания. BOD стоит внешний вместе с WDT. Я мог проверить факт попадания в процедуру прерывания тупо уменьшая входное питание от БП. Делитель расчитал вроде верно с достаточным запасом. При 19 вольтах появляется сработка. Вот п/п от компаратора:

Код
__interrupt void MainPowerFail(void)
{
  asm("cli");
  if ((!drv_pan.drv_on)&&(!drv_tilt.drv_on))   // если тока приводы не включены - значит можно сохранить, а иначе нет смысла
    {Wr_Ee_Int((int)&PanFailPos, drv_pan.pos_pan); //сохраняем данные
     Wr_Ee_Int((int)&TiltFailPos,drv_tilt.pos_tilt);
     Wr_Eeprom((int)&ErrorFlag, (SYSTEM_STATUS|POS_SAVED));
     while (bit_is_set(ACSR, ACO)){}  //ждемс пока питание не восстановится
    }
}


Так можно решить задачу ожидания восстановления питания?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 8 2012, 16:12
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(ATMExpert @ Feb 8 2012, 20:06) *
Так можно решить задачу ожидания восстановления питания?

Так не стоит: нужно дождаться стабильного восстановления питания, а не вылетать по любому шороху от компаратора.
Go to the top of the page
 
+Quote Post
ATMExpert
сообщение Feb 8 2012, 16:25
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 20-11-09
Из: Ставрополь
Пользователь №: 53 756



Дык вот этой строчкой и жду вроде как:

while (bit_is_set(ACSR, ACO)){} //ждемс пока питание не восстановится
Ну а если не восстановится...на сем и заканчиватся работа...

Жаль я прознал о Ramtron'e недавно. Интерфейсы в трех вариациях имеются: parall, spi i2c. По моему - наиболее идеальное решение, не считаете так?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 8 2012, 16:27
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(ATMExpert @ Feb 8 2012, 20:21) *
Дык вот этой строчкой и жду вроде как:

В том-то и дело, что не ждете: ждать нужно не единичного события на выходе компаратора, а нормального уровня в течение достаточно длительного времени.
Иначе есть шанс вылететь совсем не вовремя.
Go to the top of the page
 
+Quote Post
ATMExpert
сообщение Feb 8 2012, 16:31
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 20-11-09
Из: Ставрополь
Пользователь №: 53 756



Цитата(aaarrr @ Feb 8 2012, 20:27) *
В том-то и дело, что не ждете: ждать нужно не единичного события на выходе компаратора, а нормального уровня в течение достаточно длительного времени.
Иначе есть шанс вылететь совсем не вовремя.


Т.е. дебоунс однозначно? Тогда в этот цикл ожидания задержку милисек так на 100 и повторно зырить состояние ноги?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 8 2012, 16:44
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(ATMExpert @ Feb 8 2012, 20:31) *
Т.е. дебоунс однозначно?

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

Цитата(ATMExpert @ Feb 8 2012, 20:31) *
Тогда в этот цикл ожидания задержку милисек так на 100 и повторно зырить состояние ноги?

Не задержку, а постоянно на протяжении 100 миллисекунд смотреть линию. Процессору все равно в это время больше нечем заняться.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Feb 8 2012, 17:04
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



1. Что мешает сразу сохранять данные в EEPROM?
2. Будут ли актуальны эти данные после , например , часа простоя системы?
3. После диода стоит стабилизатор на 5 В?


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
zombi
сообщение Feb 8 2012, 17:29
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(ATMExpert @ Feb 8 2012, 19:06) *
При 19 вольтах появляется сработка.

Т.е. при повышении питания происходит ложная сработка?
Go to the top of the page
 
+Quote Post
ATMExpert
сообщение Feb 8 2012, 17:48
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 20-11-09
Из: Ставрополь
Пользователь №: 53 756



Цитата
1. Что мешает сразу сохранять данные в EEPROM?
2. Будут ли актуальны эти данные после , например , часа простоя системы?
3. После диода стоит стабилизатор на 5 В?


1. Данные - это по сути текущие координаты привода (вертикаль и горизонт). Их имеет смысл сохранять только когда привод стоит на месте, иначе если во время движения привода пропадет питание, актуальность их в еепроме никакая, т.к. любой привод имеет некую инертность и не сразу остановится. Мы используем шаговые движки без обратной связи (без энкодеров).
2. Само собой данные будут актуальны через любое кол-во времени.
3. Да, после диода стоит стаб. 5 вольтоф

Цитата
Т.е. при повышении питания происходит ложная сработка?

Нет, сработка происходит при понижении питания, и как уже отмечалось, в п/п прерывания от компаратора сидим и ждем пока либо питание не восстановится, либо ждем конца света)))

aaarrr, твои подсказки по ожиданию выхода(невыхода) из обработки прерывания применю обязательно, спасибо!


А никто и не сказал кстати, применяли ли в проектах ферроэлектрик энергонезвисимую мемори от Рамтрона?
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Feb 8 2012, 18:04
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(ATMExpert @ Feb 8 2012, 21:44) *
1. Их имеет смысл сохранять только когда привод стоит на месте, иначе если во время движения привода пропадет питание, актуальность их в еепроме никакая, т.к. любой привод имеет некую инертность и не сразу остановится. Мы используем шаговые движки без обратной связи (без энкодеров).
2. Само собой данные будут актуальны через любое кол-во времени.

Вы не находите в своих словах не стыковку. Вы не знаете точно , что произошло после последних сохранённых данных.Т.е. после вкл. питания и до его внезапного отключения произошли события изменившие настройку приводов или они находились в движении в этот момент. Но у Вас в EEPROM остались старые данные. По существу Вы не знаете в каком положении находится привод. Не проще сделать -запись EEPROM затем делать шаг двигателя , запись - шаг. Так у Вас всегда есть координаты привода +/- шаг
3.
Цитата
Да, после диода стоит стаб. 5 вольтоф

Лучше до диода


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
ATMExpert
сообщение Feb 8 2012, 19:10
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 24
Регистрация: 20-11-09
Из: Ставрополь
Пользователь №: 53 756



Цитата(ILYAUL @ Feb 8 2012, 22:04) *
Вы не находите в своих словах не стыковку. Вы не знаете точно , что произошло после последних сохранённых данных.Т.е. после вкл. питания и до его внезапного отключения произошли события изменившие настройку приводов или они находились в движении в этот момент. Но у Вас в EEPROM остались старые данные. По существу Вы не знаете в каком положении находится привод. Не проще сделать -запись EEPROM затем делать шаг двигателя , запись - шаг. Так у Вас всегда есть координаты привода +/- шаг

Представляете на сколько хватит еепром если в нее писать после каждого шага? До внезапного отключения питания может происходить что угодно. При норм. питании текущие координаты лежат в ОЗУ, верно? Верно. Факт пропадания питания фиксируется? Еще как! Так вот если привод в этот момент вращался, то нет нужды сохранять эти координаты. После такого режима проводится рекалибровка привода по крайним положениям однозначно. А вот если привод стоял в это время, мы и запишем то, где он остался стоять. Ну а после подачи питания нагло прочтем сохраненное, и мы в корректных координатах. В след. версии поставлю FM25xx или FM24xx. В нее хоть можно смело писать каждый раз после команды стоп.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 19:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01492 секунд с 7
ELECTRONIX ©2004-2016