Форум по микроконтроллерам: Управление мощностью в нагрузке - Форум по микроконтроллерам

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Управление мощностью в нагрузке Пропуск периодов напряжения, как один из вариантов управления мощность

#1 Пользователь офлайн   vintik 

  • Завсегдатай
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 503
  • Регистрация: 10 Апрель 11
  • ГородУкраина

Отправлено 02 Сентябрь 2011 - 00:18

Пропуск периодов напряжения, как один из вариантов управления мощностью в нагрузке.
Рассматриваемый алгоритм пожалуй самый быстрый, из тех которые мне попадались.
Подробное описание алгоритма в первоисточнике (дождитесь полной загрузки страницы).
Текст программы представленный ниже, позволяет управлять импульсами с частотой следования до 58кГц (при частоте генератора МК 4МГц).

Прикрепленные файлы

  • Прикрепленный файл  period.rar (906байт)
    Количество загрузок:: 306

Сообщение отредактировал vintik: 02 Сентябрь 2011 - 00:28

0

#2 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 891
  • Регистрация: 15 Февраль 11

Отправлено 02 Сентябрь 2011 - 08:47

Отличный метод ! Никаких бешанных таблиц, на подобии программы в последней статье обмена КЕА. Всё просто и быстро.
Очень схож с методом Брезенхема, обсуждемый в теме Любителям часов и счета, как две капли воды.
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#3 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 891
  • Регистрация: 15 Февраль 11

Отправлено 02 Сентябрь 2011 - 09:53

Можно сделать всё намного проще.
Заводим переменную. В каждом INT-прерывании прибавляем к ней уставку. Проверяем переменную на переполнение, т.е. больше или равно максимального значения. Если переполнения небыло - выключаем управление. Если переполнение было - вычитаем макс. значение и включаем управление.
После вычитания, ошибка останется. И после каждого переполнения она будет сводиться к нулю.

Немного обрисую ситуацию на примере.
Предположим уставка =20%, максимальное значение = 100%
Первый шаг.
К переменной прибавляем 20, получаем 20. Переполнения нет, выключаем нагрузку.
Второй шаг.
Прибавляем ещё 20, получаем 40. Переполнения нет, выключаем нагрузку.
Третий шаг.
Прибавляем ещё 20, получаем 60. Переполнения нет, выключаем нагрузку.
Четвёртый шаг.
Прибавляем ещё 20, получаем 80. Переполнения нет, выключаем нагрузку.
Пятый шаг.
Прибавляем ещё 20, получаем 100. Переполнение есть, включаем нагрузку, вычитаем 100. В переменной остаётся 0.
В итоге, получаем 5 шагов, из них 1 - включено, 4 - выключено. Т.е. 1:5 = 20%

Возьмём другую уставку, например = 60%
Первый шаг.
К переменной прибавляем 60, получаем 60. Переполнения нет, выключаем нагрузку.
Второй шаг.
Прибавляем ещё 60, получаем 120. Переполнение есть, включаем нагрузку, вычитаем 100. В переменной остаётся 20.
Третий шаг.
Прибавляем ещё 60, получаем 80. Переполнения нет, выключаем нагрузку.
Четвёртый шаг.
Прибавляем ещё 60, получаем 140. Переполнение есть, включаем нагрузку, вычитаем 100. В переменной остаётся 40.
Пятый шаг.
Прибавляем ещё 60, получаем 100. Переполнение есть, включаем нагрузку, вычитаем 100. В переменной остаётся 0.
В итоге, получаем 5 шагов, из них 3-включено, 2-выключено. 3:5 = 60%

Я привёл примеры уставок, для которых ошибка своидится к нулю за маленькое кол-во шагов. А так, кол-во шагов будет звисисть от уставки. Т.е. от кратности уставки и максимального значения. Например, для 10% будет 10 шагов, для 50% - 2, для 80% - 5, и т.д.. Кол-во шагов умноженное на уставку будет кратным максимальному значению.
На каждом переполнении, выходной процент будет гулять рядом с уставкой и в итоге, через n-ное колво переполнений, он сравняется с уставкой (ошибка будет = 0).
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#4 Пользователь офлайн   vintik 

  • Завсегдатай
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 503
  • Регистрация: 10 Апрель 11
  • ГородУкраина

Отправлено 02 Сентябрь 2011 - 11:44

Нормальный ход. Тока кажись нет равномерного распределения. Но если код получится короче, то можно по твоему методу пойти. Тут главное быстрота обработки.
Вообще хотел применить для электронного трансформатора. С выхода низковольтной обмотки импульсы поступают на ключ, управляемый по этому алгоритму. Прерывание по спаду, тоесть когда в нагрузку ничего не поступает. В течении этого низкого уровня происходит обработка (решение пропуск или нет высокого). Ключ, переключается при отсутствии напряжения, легкий режим работы. Электронный трансформатор, конечно чуток переделать, чтобы запускался при отсутствии нагрузки.
В общем, в этом направлении хочу применить.
0

#5 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 891
  • Регистрация: 15 Февраль 11

Отправлено 02 Сентябрь 2011 - 16:27

Цитата

Тока кажись нет равномерного распределения.
Всмысле ? Как это понять ? :unsure:
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#6 Пользователь офлайн   vintik 

  • Завсегдатай
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 503
  • Регистрация: 10 Апрель 11
  • ГородУкраина

Отправлено 02 Сентябрь 2011 - 19:18

Не, ошибся. Все работает нормально, и короче, и быстрее программка стала. То что надо, спасибо Alex.

Прикрепленные файлы

  • Прикрепленный файл  period2.rar (682байт)
    Количество загрузок:: 218

Сообщение отредактировал vintik: 02 Сентябрь 2011 - 19:38

0

#7 Пользователь офлайн   vintik 

  • Завсегдатай
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 503
  • Регистрация: 10 Апрель 11
  • ГородУкраина

Отправлено 02 Сентябрь 2011 - 21:09

Чуть почистил, получилось в 1.5 раза быстрее.

Прикрепленные файлы

  • Прикрепленный файл  period3.rar (647байт)
    Количество загрузок:: 253

0

#8 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 891
  • Регистрация: 15 Февраль 11

Отправлено 04 Сентябрь 2011 - 14:13

Если нужна быстрая реакция на прерывание, то можно завести флаг и устанавливать его на будущий вход в ОП. Т.е. вычислять заранее будет вход включен/выключен на следующем прерывании. Тогда программа, при входе в ОП, будет уже знать что нужно делать и , соответсвенно, сразу-же выполнять действия.

Пример с импульсным управлением симистора:
Прикрепленный файл  upr_nagr.rar (68,45К)
Количество загрузок:: 252
Для формирования импульса используется TMR0. При включении нагрузки, на выход подаётся лог. 1 и заводится 0-вой таймер. По прерыванию от таймера выход отключается.
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#9 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 891
  • Регистрация: 15 Февраль 11

Отправлено 04 Сентябрь 2011 - 14:49

Пример с обычным управлением. Не импульсным.
Прикрепленный файл  upr_nagr.rar (67,1К)
Количество загрузок:: 220
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#10 Пользователь офлайн   vintik 

  • Завсегдатай
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 503
  • Регистрация: 10 Апрель 11
  • ГородУкраина

Отправлено 04 Сентябрь 2011 - 22:06

Аlex все здорово и классно работает. Правда проблемы с моим калькулятором (нетбук 10"), не сильно позволил прогнать в протеусе с осцилом. Сильные тормоза. Вообще только вникаю в правильное оформление текстов программ.
Взял за основу твой асм. Немного подкорректировал под свой взгляд на этот вопрос, мне нужно было для прямоугольной формы сигнала. Вот картинка с симулятора. Прикрепленное изображение: main.GIF
в общем даже и не знаю, оба варианта (каждый по своему), нормально симулируются. Как получится в железе не знаю, проверю по возможности. Но за помощь большое спасибо, не часто встречаеш открытые тексты программ. Есть чему поучиться.
Прилепил архив, там два асм фаайла, первый с твоим новым вариантом, а второй по тому алгоритму, что ты раньше подсказал. С синусоидой наверное будет посложнее, там в сетевом напряжении свои приколы, без проверки в железе, думаю может и не получиться. Но пока интересует только меандр.
Да, по картинке, верхний, твой последний, 25% мощи, потом переключение на 50%.
Нижний рисунок, тот что подсказал раньше, тоже 25% и 50%.

Прикрепленные файлы

  • Прикрепленный файл  meandr.rar (18,72К)
    Количество загрузок:: 202

0

#11 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 891
  • Регистрация: 15 Февраль 11

Отправлено 04 Сентябрь 2011 - 22:30

Вот, что получается в протеусе.

20%
Прикрепленное изображение: 20%.JPG

25%
Прикрепленное изображение: 25%.JPG

50%
Прикрепленное изображение: 50%.JPG

60%
Прикрепленное изображение: 60%.JPG

80%
Прикрепленное изображение: 80%.JPG
Не говорите что мне делать, и я не скажу куда Вам идти !
0

#12 Пользователь офлайн   vintik 

  • Завсегдатай
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 503
  • Регистрация: 10 Апрель 11
  • ГородУкраина

Отправлено 05 Сентябрь 2011 - 08:05

Для синуса (50Гц):
В симуляторе все красиво, и реакция практически без задержки. Но в железе не получается равномерно для обеих полуволн +/- отступить о точки перехода через ноль. По тому я делал прерывание по таймеру, и для второй полуволны. То есть, входящий импульс синхро(фронт к примеру), запускает обработку всего периода(для каждой полуволны).
По меандру:
Все нормально, там нужно чтобы ключ(RA2 управление), как бы подготавливал "почву" для свободного прохода импульса RB0. То есть открыться должен перед приходом фронта RB0, а закрыться после спада RB0. В общем то что и происходит. Общее время на обработку всего 23м.ц.
Это даже лучше чем я мог предположить, а если еще и МК взять поновее, и внутренний генератор 30МГц...
0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей