19.11.2012, 21:11 | #161 |
Администратор
Регистрация: 25.02.2010
Адрес: Латвия, Сигулда
Сообщений: 820
Вес репутации: 10 |
Микроконтроллер может очень сложные программы выполнять. Дай Бог нам их написать.
По поводу лёгких винтов. Тут есть проблема: если винт слишком лёгкий, то механическая прочность его может оказаться недостаточной. Я не могу сказать, что у меня винт лёгкий, однако при усилении ветра от пяти до десяти метров в секунду он разгоняется очень быстро. Где-то примерно за секунду. И чтобы успевать за ним, мне пришлось проводить замеры знака ускорения в каждой положительной полуволне напряжения с генератора, а в отрицательной полуволне проводить коррекцию нагрузки. Если ветряк попадает в точку равенства мощностей, контроллер не даёт ему там застрять. Он его оттуда сталкивает. Поскольку он знает, что если скорость растёт либо стабильна, то нужно увеличить нагрузку. И делать это до тех пор, пока скорость не начнёт снижаться. В идеале должно получаться, что контроллер балансирует на восходящей ветви перед самой вершинкой. По реальным наблюдениям что-то в этом духе происходит. |
19.11.2012, 21:38 | #162 | |||
VIP
Регистрация: 16.05.2012
Адрес: Пермь
Сообщений: 641
Вес репутации: 13 |
Цитата:
Цитата:
Цитата:
|
|||
19.11.2012, 23:02 | #163 |
Администратор
Регистрация: 25.02.2010
Адрес: Латвия, Сигулда
Сообщений: 820
Вес репутации: 10 |
BenGunn, Большинство пишет программы на СИ, некоторые - на Ассемблере. Кому что ближе и понятнее. Для различных МК могут быть и ещё какие-нибудь дополнительные языки. Я вообще, смеха ради, решил попробовать Bascom AVR, на нём и сделал прогу для МК.
Шаг изменения остаётся неизменным. Пока сделал так. Однако меняется скорость реагирования. Она всегда синхронна с частотой генератора, поэтому чем выше частота, тем быстрее происходит реагирование. Алгоритм составлен из нескольких модулей: -измеритель длительности импульса -акселерометр -граничные условия. И ряда подпрограмм: -управление повышением мощности -управление снижением мощности -вывод на дисплей нужных параметров -вычисление скорости вращения винта в RPM. В измерительном модуле в самом начале производится запись предыдущего результата измерений. (Он потребуется акселерометру в дальнейшем.) Затем МК ожидает прихода единички на измерительном входе, а когда она появляется, начинает отсчёт времени, прекращая его при появлении нуля. Теперь мы получили значение длительности импульса. И программа переходит в модуль акселерометра. Там сравнивается предыдущий результат с самым последним измерением, на основании чего МК делает вывод о том, чем занят в данное время винт. Если скорость винта растёт, либо стабильна, МК исполняет п/п управления повышением мощности, делая один шаг, после чего возвращается туда, откуда была вызвана, то есть, в акселерометр. Если же в акселерометре определилось, что скорость падает, то следует переход к п/п управления снижением мощности, там делается шаг назад, после чего идёт проверять граничные условия. Там проверяется, не слишком ли мала скорость винта, и если она ниже установленной, то нагрузку следует снять совсем. Это делается для того, чтобы винт не останавливался при запредельно малом ветре. У меня это соответствует примерно двум метрам в секунду. Параметр можно установить любой - по вкусу. Кроме того, в граничных условиях может содержаться информация о подключении второго канала ШИМ, если скорость вращения винта это позволяет. (У меня пока он не задействован). По завершении модуля граничных условий МК возвращается к началу цикла, тут же переписывает ячейку предыдущего результата и снова измеряет импульс. И так всё время по кольцу... Время от времени МК выкидывает на дисплей данные о скорости вращения и величину длительности импульса. |
20.11.2012, 00:34 | #164 |
VIP
Регистрация: 16.05.2012
Адрес: Пермь
Сообщений: 641
Вес репутации: 13 |
Александр, я все равно не понимаю один момент в вашем алгоритме. Если скорость винта стабильна, то мы нагружаем его. Он начинает тормозить, контроллер это замечает и уменьшает нагрузку. Винт опять раскручивается и т.д. В чем смысл?
|
20.11.2012, 01:48 | #165 |
Администратор
Регистрация: 25.02.2010
Адрес: Латвия, Сигулда
Сообщений: 820
Вес репутации: 10 |
Здесь две причины. Первая обусловлена тем, чтобы не дать системе стабилизироваться. Система всё время должна находиться в поиске, иначе может произойти стабилизация на произвольном участке кривой винта. Если же система раскачивается, то хочет она того, или нет, но ей придётся отыскать точку наибольшей мощности. Вторая причина, это ВРШ. Здесь есть одна особенность. Когда винт стабилизировался аэродинамически, мы должны продолжать наращивать мощность на нём, отслеживая момент, когда скорость винта начнёт снижаться. Это и будет точка максимума. И для разной скорости ветра при одних и тех же оборотах винта она будет существенно отличаться. При условии, что генератор позволяет это. Мой как раз позволяет.
Пусть это никого не смущает. Контроллер замечает малейшее изменение скорости, отличие в длительности импульса в несколько микросекунд уже приводит к изменениям. На глаз это даже не заметно. Когда я только начинал над этим алгоритмом работать, я аккуратно нарисовал его на бумаге, много думал над возможными ошибками, проигрывая возможные ситуации. Вышло довольно сложно и монстрообразно. Затем сел и написал такую же монстрообразную программу в точном соответствии с моими идеями... ...И программа работала коряво. Тогда я немного подумал, выкинул из неё всё, что там было, после чего она заработала. А затем расставил вокруг себя кучу приборов для измерения ветра, мощности и скорости вращения (тахометр в МК я встроил несколько позднее, когда мой электромеханический тахометр, подключенный к ветряку, благополучно дал дуба) и начал отладку программы. После сотой с чем-то там версии всё заработало, как мне было нужно. Или почти так, как мне было нужно. Из чего я сделал вывод, что при аналитическом решении задачи у нас недостаточно данных - мы не знаем реальную динамику винта, которая обусловлена не только его инерционными свойствами, но и взаимодействием с реальным ветром, которое, к сожалению, достоверно нельзя смоделировать, только очень приблизительно и только с целой кучей допущений. Отчасти мне самому было интересно попытаться реализовать алгоритм поиска точки максимума наиболее простыми средствами и я не вижу особых ограничений на то, как это можно достигать. Поэтому и решил попробовать завязать нагрузку непосредственно на винт. Поскольку именно он всё определяет, а мощность генератора - вещь вторичная. Собственно, генератор - это согласующее звено между винтом и нагрузкой. Посредник, так сказать. Ну и не хотелось связываться с измерительными примочками. Если напряжение ещё получается нормально и простыми способами измерить с помощью контроллера, то датчик тока довольно-таки дорогой. |
20.11.2012, 08:30 | #167 | |
VIP
Регистрация: 16.05.2012
Адрес: Пермь
Сообщений: 641
Вес репутации: 13 |
Александр, спасибо вам за подробные ответы.
Цитата:
Т.е. с измерением мощности на нагрузке могут возникнуть проблемы? |
|
20.11.2012, 20:30 | #168 | |
Администратор
Регистрация: 25.02.2010
Адрес: Латвия, Сигулда
Сообщений: 820
Вес репутации: 10 |
Цитата:
Особых проблем нет, покупаем дорогостоящий сенсор тока, затем пишем подпрограмму чтения данных с этого сенсора, затем паяем схему для измерителя напряжения пишем п/п измерения напряжения, затем пишем арифметику, которая всем этим будет пользоваться, после чего начинаем возиться уже с самим алгоритмом поиска максимума... В принципе, ничего особо страшного, возни только намного больше. Пока рановато. Он ещё сыроват. |
|
20.12.2012, 05:52 | #169 |
VIP
Регистрация: 22.06.2011
Адрес: 123
Сообщений: 19
Вес репутации: 0 |
Доброго здоровья! Повторил в BASCOM-е алгоритм Александра - нахождение максимума в зависимости от оборотов. При моделировании в Протеусе све пашет как надо. Но дальше затык. Не могу понять каким образом выщитать мощность, которую отдавать в балласт.
И как подсчитать мощность в КВт*часах? Прийдется цеплять внешние часики от Dallas? Последний раз редактировалось vitalkalm; 20.12.2012 в 08:57. Причина: Новая мысля... |
20.12.2012, 10:25 | #170 | |
VIP
|
не.. покупаем недорогой измерительный шунт под нужный ток и измеряем падение напряжения на нем.
Добавлено через 1 минуту Цитата:
выставляете его на 1 сек. и по сработка снимаете денные с шунта и с канала АЦП следящего за напряжением перемножаете это и кладете в ячейку Х1 при следующей сработке таймера снова проделываете эту операцию и усредняете значение из ячейки Х1 с вновь полученным значением. делаете это в цикле 3600 раз.. после окончания цикла сбрасываете значение из ячейки Х1 в организованную в памяти таблицу мощностей ( это у вас и будет мощность в час) меняете у этой таблицы адрес на след ячейку, сбрасываете в ноль значение Х1 и снова запускаете цикл... в результате у вас будет 1. мгновенная секундная мощность 2. средняя мощность в текущем часе 3. Статистика по отдаче ветряка за некий период времени (определяется размером таблицы) Последний раз редактировалось Tema0; 20.12.2012 в 10:39. |
|