| AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
Алгоритм расчета потребляемой мощности
04.04.2014, 20:01
|
|
|
Прописка
Регистрация: 06.05.2008
Адрес: Пятигорск
Сообщений: 222
Сказал спасибо: 11
Сказали Спасибо 17 раз(а) в 13 сообщении(ях)
|
Re: Алгоритм расчета потребляемой мощности
Не стандартный подход, долго соображал, но все же дошло. Но в этом случае я не смогу узнать среднюю мощность за последний час если израсходовалось менее 100Вт. Поясню что это устройство будет установлено между солнечной панелью и аккумулятором, пожалуй на наго сразу нагружу и контроль заряда. Поэтому энергия не расходуется , а приходуется, но не суть важно. Еще понял что для создания посуточного журнала потребуется таймер реального времени. Но по моему его можно организовать аппаратными средствами атмега8? Отсюда вытекает следующая проблема. как мне привязать дату к ячейке с мощностью? Ведь есть только 512 байт.
|
|
|
|
04.04.2014, 20:30
|
|
|
Заблокирован
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
|
Re: Алгоритм расчета потребляемой мощности
Сообщение от wlad773
|
|
я не смогу узнать среднюю мощность за последний час если израсходовалось менее 100Вт
|
Та ни боже ж мой ! Об чём разговор ! Нужна точность 1Вт-час - нет проблем !
Делаете ещё одну переменную в ОЗУ, назовём Т1, для сотых и тысячных долей кВт-час. Применяем алгоритм:
|
PHP код:
|
раз в секунду
{
измеряем мощность М
кладём в Т = Т + М
если Т›= 3600, то Т = Т-3600 и Т1= Т1+1
если Т1 ›= 100, то Т1=0 и Р=Р+1
}
|
Вот и всё. Раз в час сохраняете показания Р и Т1 в переменные Рs и Т1s для последуюшего сравнения.
Допустим, в 10:00 было Р=24, Т1=85. Это означает текущая энергии = 2.485кВт-час. Кладём Рs=24 и Т1s=85.
В 11:00 стало Р=25, Т1=37. Это означает значение = 2.537кВт-час.
Берём разницу (Р,Т1)-(Рs,Т1s), то есть 2.537 - 2.485 = 0.052 кВт-час энергия за час с точностью 0.001кВт-час.
Последний раз редактировалось Yurkin2014; 04.04.2014 в 20:35.
|
|
|
|
Сказали "Спасибо" Yurkin2014
|
|
|
04.04.2014, 21:25
|
|
|
Прописка
Регистрация: 06.05.2008
Адрес: Пятигорск
Сообщений: 222
Сказал спасибо: 11
Сказали Спасибо 17 раз(а) в 13 сообщении(ях)
|
Re: Алгоритм расчета потребляемой мощности
Как все просто когда кто-то разжевал. Всегда думаешь, как это я сам не догадался?  Остается еще один вопрос- Как мне привязать дату к ячейке с мощностью? Ведь есть только 512 байт.
|
|
|
|
04.04.2014, 21:40
|
|
|
Заблокирован
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
|
Re: Алгоритм расчета потребляемой мощности
Сообщение от wlad773
|
|
Как мне привязать дату к ячейке с мощностью?
|
Ну, самое простое: в первые два байта писать дату начала, типа номер дня с момента 01.04.2014. Для сегодня это будет 3. Далее пишем байты с энергией. Если писать раз в день, значит номер ячейки - 2 плюс первые два байта будет количество дней, прошедших с 01.04.2014. Можно легко вычислить дату.
Если хотите писать сериями по нескольку дней, потом пауза пару недель, потом снова запись - тут немного сложнее. Придумайте индентификатор начала серии, например 255. Тогда при чтении бежим по памяти, пока не встретим 255 - это начало серии. За идентификатором - дата старта, два байта, как описано выше. Потом идёт сама серия. Встретили 255 - конец/начало следующей серии. То есть на каждую серию будет лишний расход по 3 байта.
Последний раз редактировалось Yurkin2014; 04.04.2014 в 21:42.
|
|
|
|
05.04.2014, 09:23
|
|
|
Прописка
Регистрация: 06.05.2008
Адрес: Пятигорск
Сообщений: 222
Сказал спасибо: 11
Сказали Спасибо 17 раз(а) в 13 сообщении(ях)
|
Re: Алгоритм расчета потребляемой мощности
Почти такое решение и пришло в голову. Память разбить на месяцы. Каждый месяц будет начинаться с FFh, далее № месяца от 1 до 12 и год от 00 до 254(2000-2254). (Придется исключить значение FFh из мощности.) Дойдя до FFh программа понимает, что месяц кончился не зависимо от кол-ва дней. И не придется писать сложный календарь. Останется указать високосные года и февраль каждый раз проверять - делать 28 или 29 записей.
Yurkin2014, Ваш алгоритм почти хорош, но он мне не совсем подходит. Во-первых он не решает проблемы первого часа, и во-вторых он покажет значения за предыдущий реальный час, а не за последний текущий. Т.е. если я смотрю в 11-50, то вижу показания с 10-00 до 11-00, что будет вводить в заблуждение. Думаю в этом случае применить такой- (Х0+Х1+Х2...+Х58+Х59)/60. А Ваш алгоритм будет удобен при подсчете энергии за 1 мин., сутки, месяц.
|
|
|
|
05.04.2014, 14:03
|
|
|
Заблокирован
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
|
Re: Алгоритм расчета потребляемой мощности
Ваше разбиение на месяцы мне не нравится. Как это будет выглядеть, если я начну регистрацию энергии 5 апреля, потом с 10 по16 апреля будет прибор выключен, затем снова включу запись? Придется, помимо месяца и года, где-то еще и день писать. Получается большой расход памяти.
Далее. Зачем Вы все время хотите что-то делить на 60? Типа, средняя мощность за текущий час? А Х0 это средняя мощность за минуту? Чтобы ее получить, надо сложить 60 значений мощности за каждую секунду, а потом поделить снова на 60? А чтобы получить энергию не забыть среднее за час умножить на 3600? Сложный и запутанный метод, требующий использовать операцию умножения и деления, для 8-битных процессоров тяжело будет.
И заметьте, кстати, что если измеренные значения складывать 60 раз за минуту, потом делить на 60 для усреднения за минуту, полученное среднее складывать 60 раз за час, потом делить на 60 для среднего за час, и, наконец, среднее за час умножить на 3600, то получится просто СУММА 3600 последних значений за каждую секунду. Получается, что все эти деления-умножения вовсе не нужны!
Что я и предлагаю: алгоритм без умножений и делений. В байтах Р и Т1 находится текущая энергия. С этими значениями делайте все что хотите. Это уже готовый, посчитанный результат. Хотите за последний час? Складывайте каждую минуту байты Р и Т1 в кольцевой буфер 60 ячеек. Пишите по кругу, то есть достигли конца буфера - начинайте с начала буфера. Но перед тем, как затереть старые данные новыми значениями, возьмите разницу. Это и будет энергия за послений час, так как пишете по кругу и данные в текущей ячейке уже на час устарели.
Последний раз редактировалось Yurkin2014; 05.04.2014 в 14:22.
|
|
|
|
06.04.2014, 12:15
|
|
|
Прописка
Регистрация: 06.05.2008
Адрес: Пятигорск
Сообщений: 222
Сказал спасибо: 11
Сказали Спасибо 17 раз(а) в 13 сообщении(ях)
|
Re: Алгоритм расчета потребляемой мощности
Сообщение от Yurkin2014
|
|
Ваше разбиение на месяцы мне не нравится. Как это будет выглядеть, если я начну регистрацию энергии 5 апреля, потом с 10 по16 апреля будет прибор выключен, затем снова включу запись? Придется, помимо месяца и года, где-то еще и день писать. Получается большой расход памяти.
|
Тут проблем не вижу. Все равно делать часы и датор добавить не сложно. По FFh находится месяц к адресу +2 байта +день, если байт =FFh, то дата =1, перейти на следующий месяц, иначе записать мощность. С февралем сложнее.
Сообщение от Yurkin2014
|
|
Далее. Зачем Вы все время хотите что-то делить на 60? Типа, средняя мощность за текущий час? А Х0 это средняя мощность за минуту? Чтобы ее получить, надо сложить 60 значений мощности за каждую секунду, а потом поделить снова на 60? А чтобы получить энергию не забыть среднее за час умножить на 3600? Сложный и запутанный метод, требующий использовать операцию умножения и деления, для 8-битных процессоров тяжело будет.
|
Хочешь сказать, что если складывать 60 минутных значений мощности, а потом разделить на 60 я не получу Вт*ч, а получу среднее Вт*мин?
|
|
|
|
06.04.2014, 12:39
|
|
|
Прописка
Регистрация: 06.05.2008
Адрес: Пятигорск
Сообщений: 222
Сказал спасибо: 11
Сказали Спасибо 17 раз(а) в 13 сообщении(ях)
|
Re: Алгоритм расчета потребляемой мощности
Сообщение от Yurkin2014
|
|
Хотите за последний час?
|
А вот дальше нифига не понял. Распиши подробно, как это умеешь на сером фоне.
|
|
|
|
06.04.2014, 12:45
|
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
|
Re: Алгоритм расчета потребляемой мощности
Сообщение от wlad773
|
|
Хочешь сказать, что если складывать 60 минутных значений мощности, а потом разделить на 60 я не получу Вт*ч, а получу среднее Вт*мин?
|
Разберитесь в понятиях и единицах мощности и энергии, а потом в хотелках.
Для записи и считывания удобней всего флэш-карта. Да и анализировать при желании можно много чего - писать-то можно не стесняться, хоть посекундно.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
07.04.2014, 00:14
|
|
|
Заблокирован
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
|
Re: Алгоритм расчета потребляемой мощности
Сообщение от wlad773
|
|
складывать 60 минутных значений мощности, а потом разделить на 60
|
Я понял наконец Вашу идею. Да, всё правильно делаете. Если сложить 60 значений мощности, а потом разделить на 60, то получится средняя мощность за час. Что есть энергия, полученная за час в Вт-часах.
То же самое, если складывать каждую секунду, а потом разделить на 3600.
Так и делайте. Сначала занулите все переменные Х0 .. Х59. Потом каждую минуту можно обновлять соответствующий Х измеренным значением, складывать все элементы и делить на 60. И пусть Вас не смущает, что сначала все элементы равны 0. После первой минуты получится небольшая величина Х0/60, все остальные ведь нули. При постоянной мощности, постепенно эти действия будут давать всё большее значение, пока не устаканятся на какой-то величине.
Это всё равно, как ехать на автомобиле и измерять пройденный путь за последний час. Типа, начали двигаться и едем со скоростью 60 км/час, и через минуту удивляться, чтой-то так мало проехали на последний час, всего-то километр ...
Последний раз редактировалось Yurkin2014; 07.04.2014 в 00:34.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:29.
|
|