|
|
  |
Неверный результат измерения потреблённой энергии, Не могу найти ошибку |
|
|
|
May 2 2008, 05:25
|

Местный
  
Группа: Свой
Сообщений: 466
Регистрация: 23-07-07
Из: Киев
Пользователь №: 29 297

|
Цитата Угадайте что будет после возврата из этой функции... прерывания будут разрешены ? Верно, прерывания не будут разрешены. Спасибо. Правильнее будет так: #asm("cli"); EEPROM_read(....); #asm("sei");
|
|
|
|
|
May 6 2008, 11:57
|

Местный
  
Группа: Свой
Сообщений: 466
Регистрация: 23-07-07
Из: Киев
Пользователь №: 29 297

|
Откалибровал таким образом: Так как регулируемого источника питания у меня нет, в качестве постоянного напряжения использовал напряжение блока питания сканера (около 12В, максимальный ток 1.2А). Входной разъём (220В) к сети я не подключал. В качестве нагрузки использовал резистор номиналом 1кОм. Подал +12В на нагрузку и через 78L05 на питание МК (+5В). В итоге на нагрузке у меня +12В, на питании МК и ОУ +5В, на ножке МК Vref - 2.56В. На измерительных каналах - 1,23В(ADC1 - измерение тока) и 1,28В(ADC2 - измерение напряжения). Все напряжения мерял с помощью тестера. Далее померял с помощью МК "нули". Напряжение получилось 1.2749В. Ток получился - 1.2224В (подправил значение тока в программе, так как ранее считал, что оно должно равняться 1.28В). Потом нашёл ещё одну ошибку - при расчёте напряжения нужно домножать на 272, а не на 136 (там как в схеме не обычный делитель). После этого померял ток и напряжение на нагрузке. По напряжению я получил 10.9В (при 12.1В входном), а значение тока получилось ещё точнее(сейчас не помню значения). В итоге могу утверждать, что "нули" выставлены верно (с определённой погрешностью). Снова провёл серию измерений при разной мощности. Вот что получил:
Обновлённая версия программы:
programm.zip ( 73.09 килобайт )
Кол-во скачиваний: 102Результат измерения (то, что получаю в ЕЕPROM) декодирую с помощью этой страницыЕщё лампочка заметно мерцает. Когда устройство ещё ничего не меряло, а просто регулировало мощность - замерных мерцаний не было. Скорее всего мерцания за счёт того, что 200 раз в период меряю значения. Вот так вот. Что делать дальше - не знаю.
|
|
|
|
|
May 6 2008, 18:07
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(Владимир_КПИ @ May 6 2008, 15:57)  Откалибровал таким образом: Калибровка это конечно хорошо, но обычно, если необходимо, это завершающая стадия проекта. Владимир_КПИ, прога которая у Вас написана выглядит ужасающе... Эээ, ну просто там и проэктированием в принципе не пахнет, все написано в стиле "что вижу то и пою..." Количество принципиальных ошибок при проектировании просто зашкаливает, видимо поэтому никто и не может/сможет дать Вам рекомендации что с этим делать... Можно конечно начать дисскусию по конкретным проблемам в Вашем коде, тока это скорее всего будет малорезультативно, если Вы реально хотите разобраться как это все нужно делать - упрощайте задачку(на первое время). В качестве упрощенной задачки могу предложить Вам такое: по одному каналу АЦП(подключенному к просто делителю) считаем скользящее среднее показаний АЦП и раз в секунду пишем его в EEPROM. Тока сделать это нужно так чтобы на время записи(много милисекунд) считывание показаний АЦП не прекращалось... После решения подобной задачки, многие вопросы отпадут, а те которые появятся, ну мы Вам с ними попробуем помочь. Удачи!
|
|
|
|
|
May 7 2008, 04:57
|

Местный
  
Группа: Свой
Сообщений: 466
Регистрация: 23-07-07
Из: Киев
Пользователь №: 29 297

|
Цитата по одному каналу АЦП(подключенному к просто делителю) считаем скользящее среднее показаний АЦП и раз в секунду пишем его в EEPROM. Насколько я понял, необходимо постоянно измерять напряжение на канале ADC2 (измерение напряжения нагрузки). Но с какой частотой? И что такое "скользящее среднее показаний АЦП"? Если это среднее значение, то оно будет приблизительно равно 0. Сейчас у меня в программе частота измерения 200 раз за период. Может быть это много и из-за этого у меня проблемы. Возможно время измерения постоянно перекрывается с каким-то другим временем. И может из-за этого и мерцает лампочка... Запись в EEPROM занимает 8.5мс (согласно документации). То есть почти полупериод. Цитата Тока сделать это нужно так чтобы на время записи(много милисекунд) считывание показаний АЦП не прекращалось Как такое возможно? Если я пишу в EEPROM, я никак в это же время не могу делать что-то другое.
|
|
|
|
|
May 7 2008, 05:12
|
Знающий
   
Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32

|
Цитата(Владимир_КПИ @ May 7 2008, 08:57)  Как такое возможно? Если я пишу в EEPROM, я никак в это же время не могу делать что-то другое. почему бы нет? есть флаг готовности EEPROM, есть прерывание по завершению записи в EEPROM.
--------------------
Главная линия этого опуса ясна мне насквозь!
|
|
|
|
|
May 7 2008, 07:26
|

Местный
  
Группа: Свой
Сообщений: 466
Регистрация: 23-07-07
Из: Киев
Пользователь №: 29 297

|
Цитата почему бы нет? есть флаг готовности EEPROM, есть прерывание по завершению записи в EEPROM. Запись будет происходить почти полупериод. За это время нужно провести минимум десяток измерений. Прерывать запись нельзя. Можно измерить одно значение и ждать пока закончиться запись и по завершению записи сохранить результат. Но только 1 результат измерения, а не несколько.
|
|
|
|
|
May 7 2008, 09:22
|

извечный пессимист
    
Группа: Свой
Сообщений: 1 113
Регистрация: 9-10-06
Из: Днепропетровск
Пользователь №: 21 125

|
Цитата(Владимир_КПИ @ May 7 2008, 13:57)  Скользящее среднее - это среднее арифметическое? Смысл записи в EEPROM - сохранение результата в случае выключения питания. Запись будет происходить лишь при понижении питании ниже, например, 4В. А так всё будет храниться в ОЗУ. Да среднее, только оно считается для каждого отсчета, а не для скажем 8. Ну так и записывайте в ЕЕПРОМ, только в случае пропадания питания, это легко отлавливать. Цитата Сейчас я пишу в EEPROM, чтобы узнать, правильно ли всё подсчитывается. По поводу кольцевого буфера - мозможна ли независимая работа АЦП и самого МК? То есть АЦП себе меряет и сохраняет результат, а в этот же момент времени происходит запись в EEPROM. Помню читал, что у АЦП существуют 2 режима работы - одиночное измерение и непрерывное. Вы имеете ввиду непрерывный режим измерения АЦП? Да возможно, запускайте АЦП в режиме непрерывного преобразования, а в прерывании считайте результат, потом при достижении нужного числа осчетов, выставляйте флаг и уже в фоновой программе производите вычисление мощности.
--------------------
Slaves are those of this world Given freedom to lay chains upon The Master The wolf is no longer free Release the chains and come for me
|
|
|
|
|
May 7 2008, 09:31
|

Местный
  
Группа: Свой
Сообщений: 466
Регистрация: 23-07-07
Из: Киев
Пользователь №: 29 297

|
Цитата Да среднее, только оно считается для каждого отсчета, а не для скажем 8. Не могу понять как это? У меня есть непрерывний меняющийся сигнал напряжения. И я должен периодически измерять мгновенные значения. С какой частотой? И что дальше с ними делать?
|
|
|
|
|
May 7 2008, 11:59
|

Местный
  
Группа: Свой
Сообщений: 466
Регистрация: 23-07-07
Из: Киев
Пользователь №: 29 297

|
Всё-таки я попробовал измерять мгновенные значения не 200 раз за период, а 20 и 40 раз за период. Вот что получил:
Из результатов видно, что при измерении 20 раз за период результат измерения мощности максимально приближён к истинному результату. Ещё реже проводить измерения нет смысла, так как погрешность будет слишком велика(>10%). К тому же лампочка перестала мерцать при измерении 20 раз за период(1кГц). То есть получается, что если слишком часто мерять значения тока и напряжения - что-то происходит, что приводит к мерцанию лампочки и искажению результата. Теперь нужно понять, почему так происходит.
|
|
|
|
|
May 7 2008, 12:14
|

Местный
  
Группа: Свой
Сообщений: 482
Регистрация: 5-07-05
Из: Санкт-Петербург
Пользователь №: 6 528

|
Цитата(Владимир_КПИ @ May 7 2008, 15:59)  Теперь нужно понять, почему так происходит. Ещё не надоело фигнёй страдать? Начните с малого, как Вам советовали.
--------------------
Для связи email: info собака qbit.su
|
|
|
|
|
May 7 2008, 13:18
|

Местный
  
Группа: Свой
Сообщений: 466
Регистрация: 23-07-07
Из: Киев
Пользователь №: 29 297

|
Цитата Начните с малого, как Вам советовали. Я не понял сути, что мне нужно делать.
|
|
|
|
|
May 7 2008, 14:10
|
Знающий
   
Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640

|
Цитата(Владимир_КПИ @ May 7 2008, 17:18)  Я не понял сути, что мне нужно делать. 1. Почитайте теорию. Хотя-бы соседнюю тему про измерение RMS. 2. Разберитесь с временами. Узнайте чем занимается процессор в каждый момент времени. На что времени уходит больше всего и т.д. Вы пишите на C, поэтому это вам далеко не очевидно. Поставте на неспользуемые выходы процессора светодиоды и, например, в каждой задаче включайте свой и выключайте остальные (кроме обработчиков прерываний). Можно и без светодиодов - осциллографом. Но светодиоды нагляднее. Вообще светодиод очень мощное средство отладки, а у вас на схеме ни одного! 3. Задавайте конкретные вопросы.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|