Печать

Универсальный ШИМ контроллер на PIC16F628 + LCD

Опубликовано . Опубликовано в Устройства на PIC

Рейтинг:   / 7
ПлохоОтлично 
Универсальный ШИМ контроллер на PIC16F628

Представленный в статье ШИМ контроллер подходит для очень широкого спектра применения. Основным элементом управления, используемым для настройки контроллера является поворотный энкодер. Также есть переключатель для выбора режимов работы: «Выключено», «ШИМ» и «Полная мощность». Текущие настройки системы отображаются на стандартном ЖК-дисплее(HD44780) с двумя рядами из шестнадцати символов.

Основа схемы это микроконтроллер PIC16F628 (также может быть использован PIC16F628A). Выходной каскад, состоящий из двух силовых полевых транзисторов IRF9540 которые соединены параллельно, и сдвоенных диодов BYW32, позволяет легко управлять двигателями  постоянного тока с напряжением до 24В и номинальными токами до 10А. Схема способна работать при более высоких токах, но тогда особое внимание должно быть уделено площади поперечного сечения проводников и дорожкам на плате, к которым можно припаять провода параллельно с ними.

Универсальный ШИМ контроллер на PIC16F628 + LCD

Полезная функция в данном приборе является - «Функция повышения» (Boost), которая помогает надежно запускать двигателя постоянного тока. При запуске выход включен на полную мощность на определенный промежуток времени, не зависимо от настроек ШИМ.

По соображениям безопасности, при включении контроллера необходимо установить переключатель в положение "Выключено", а затем в положение "ШИМ" или "Полная мощность". Это означает, что подключенный к контроллеру двигатель не запустится при восстановлении подачи питания.

В рабочем режиме на дисплее отображаются частота ШИМ(kHz) и коэффициент заполнения импульса ШИМ (Скважность) в процентах. Скважность можно регулировать поворачивая ручку энкодера.

Режим "Выключено" - переключатель в положении "B", режим "Полная мощность" - положение "А", режим "ШИМ" - переключатель не установлен. Основные параметры могут быть установлены в меню настроек. В это меню можно войти путем установки переключателя режимов в положение "Выключено", и удержания в нажатом состоянии кнопки энкодера в течение нескольких секунд.

Меню включает в себя следующие опции:

Boost: вкл/выкл
Boosttime: 1 секунда / 2 секунды / 5 секунд
Частота ШИМ: 1кHz / 2kHz / 5 кHz
Шаг регулировки ШИМ: 1% / 2% / 5% / 10%

Для выхода из меню выбрать "Выход". Параметр "Шаг регулировки ШИМ" определяет на сколько процентов будет увеличиваться или уменьшаться скважность ШИМ в рабочем режиме. Все настройки сохраняются в EEPROM и не теряются при выключении питания.

Вариант печатной платы

Фото готового устройства. Автор Rozario


Файлы:
Прошивки микроконтроллера pic16f628/628A/rus, макет печатной платы в формате Eagle
Дата 29.01.2012 Размер файла 74.09 KB Закачек 3269

Комментарии  

+1 #21 rozario 30.12.2013 20:00
Цитирую rozario:
[quote name="rozario"]Спасиба вроде протеус показывает всё в работе.
Прошил пока биты на 4Мгц. На индикаторе вроде все надписи есть. Частотомером смотрю частота в два раза выше чем на экране 250Гц, 500Гц, 1250Гц. Значит всё в норме. У нас в магазине есть только кврц на 2,048мГц. Попробую этот.
Окончательно проверю когда квац куплю.
Но это наверно уже после нового года. :-)
Ищё раз спасиба и С НОВЫМ ГОДОМ!
Сообщить модератору
+1 #22 rozario 10.01.2014 17:59
Подключил кварц на 2,048мГц.
Запустил, частотомер показал 128Гц 256Гц
640Гц.
Вместо 125Гц 250Гц и 625Гц
Это наверно через такой кварц.
Ну , а так всё в норме.Только никак не могу понять какие биты конфигурации выставлять? Пользуюсь IC-Prog там после загрузки ( hex )файла показывает только
конфигурацию осциллятора (XT ),а биты конфигурации пустые. В исходнике прописано:
#fuses XT, NOWDT, PROTECT, MCLR
Што означает PROTECT и NOWDT? в IC-Prog такого нету.
Какие галочки мне поставить в IC-Prog ?
Сообщить модератору
+1 #23 rostik08 16.01.2014 17:26
Уважаеый Admin! rozario поднял еще один вопрос, я присоединяюсь. Я использовал энкодер от автомобильной магнитолы, и работает он слегка не адекватно. Если ручку вращать быстро, показания не меняются, если медленно, то скважность можно менять, хотя и числа прыгают. Вот немогу сказать на сколько он позиций. У rozario проблема похожая.
Если надо править в прощивке, то подскажите где?
Сообщить модератору
+1 #24 AntonChip 16.01.2014 17:45
Проблему с энкодером заметил, пробовал 12 и 24 имп/об энкодеры, оба работают плохо, 12-ти немного получше, проблему буду решать, все упирается в нехватку времени. Я думаю начинать обработчика прерывания void rotary(){}
Сообщить модератору
+1 #25 rostik08 16.01.2014 17:50
хорошо, спасибо!, будем ждать!
Сообщить модератору
+1 #26 AntonChip 16.01.2014 22:12
Файл pwm_control_enc 24.hex в архиве, проверяйте(Для энкодера 24имп/об).
Также к выводам А и В энкодера необходимо подключить кондеры по 10nF на общий минус
Сообщить модератору
+1 #27 rostik08 16.01.2014 23:48
Оооо! Спасибище!!! будем проверять
Сообщить модератору
0 #28 rozario 18.01.2014 15:32
{Также к выводам А и В энкодера необходимо подключить кондеры по 10nF на общий минус} В эти точки я изначально поставил SMD кондёры 10nF и ешё на кнопку энкодера. Энкодеры это любят.

admin. Огромное спасиба вам за ваши труды!!!
Прошивку вашу протестил и она стала получше , только скорости немного не хватает. Я щитаю нужным исправить все версии прошивок под энкодер (24-импульсный ) ,потому как, это самые распростанённые . Сколько я облазил точек с радио компонентами, ни у кого не нашёл ничего подобного на 12-импульсов.
Плата эксперементальн ая в сборе, буду ждать ваших новых решений для усовершенствова ния и доводки этого устройства.
В схему я ввёл некоторые изменения.
Избавилса от дефицитной микросхемы mc34151 и заменил этот узел двумя трнзисторами кт502 и кт503 эмиттерами на затворы IRL540. На затворах добавил стабиллитроны встречного подключения 10вольт на общий провод. Вводное отдельное питание на выходные ключи позволило в широких пределах именять питающее напряжение нагрузки. Сама плата управления запитывается от отдельного импульсного модуля питания на 12 вольт , что предотвращает сетевые пульсации и скачки напряжения от подключённой нагрузки.
По выходу полевиков добавил варистор для зглаживания пульсаций.
Ну так вроде всё.
rozario.
Сообщить модератору
0 #29 Александр-eha 20.02.2015 13:57
В данной схеме ШИМ изменяется энкодером, а если к выводам 2-3 подключить потенциометр, то будет пропорционально токовое управление? И энкодер не нужен?
Сообщить модератору
0 #30 AntonChip 20.02.2015 14:58
Цитирую Александр-eha:
В данной схеме ШИМ изменяется энкодером, а если к выводам 2-3 подключить потенциометр, то будет пропорционально токовое управление? И энкодер не нужен?

Принцип управления энкодером и резистором разный, вместо энкодера резистор не поставить, если только менять программу контроллера
Сообщить модератору
0 #31 Александр-eha 20.02.2015 23:14
Спасибо, мне так и подумалось, будем дальше мучиться.
Сообщить модератору
0 #32 tema-koroliov 27.07.2015 18:53
Ребята! Проект просто супер! Всё так продуманно, под все программы всё работает. и протеус и всё остальное. Я его собрал работает, неcмотря на то, что у меня под рукой оказался дисплей не совсем тот p1620, в русской версии крокозяблы показывает, но это мелочи. Ребята, подскажите какой использовали компилятор. мне хотелось бы это устройство адаптировать под себя, а я не могу найти компилятор под PicC. На ваши исходними матерится, а я только начинаю разбираться с программировани ем микроконтроллер ов.
Сообщить модератору
0 #33 tema-koroliov 27.07.2015 18:57
Подскажите, пожалуйста, потянет ли этот МК частоту 15-25 КГц? Я начал крутить периоды в Data.pwm_f частоту до 17 КГц поднял, но всё так пляшет ужасно. (версия 125_250_625 с кварцем 12 МГц). Подскажите, пожалуйста новичку куда смотреть.
Сообщить модератору
0 #34 scorpionlion 12.09.2015 10:47
собрал это устройство, с небольшими изменениями, под свой проект. Есть необходимость инвертировать ШИМ сигнал - т.е. на дисплее видим 30%, а на выходе 70%. Можно ли меню доработать и включить пункт инверсии? Сам я еще слабоват в этом деле.
Сообщить модератору
0 #35 AntonChip 12.09.2015 17:21
Цитирую scorpionlion:
собрал это устройство, с небольшими изменениями, под свой проект. Есть необходимость инвертировать ШИМ сигнал - т.е. на дисплее видим 30%, а на выходе 70%. Можно ли меню доработать и включить пункт инверсии? Сам я еще слабоват в этом деле.

На выход поставить 74HC00 или 74HC04
Сообщить модератору
0 #36 scorpionlion 12.09.2015 19:40
Цитирую AntonChip:
Цитирую scorpionlion:
собрал это устройство, с небольшими изменениями, под свой проект. Есть необходимость инвертировать ШИМ сигнал - т.е. на дисплее видим 30%, а на выходе 70%. Можно ли меню доработать и включить пункт инверсии? Сам я еще слабоват в этом деле.

На выход поставить 74HC00 или 74HC04

это не удобно - переключать джамперами, нужно оба варианта
Сообщить модератору
0 #37 tema-koroliov 30.03.2016 10:38
Цитирую scorpionlion:
собрал это устройство, с небольшими изменениями, под свой проект. Есть необходимость инвертировать ШИМ сигнал - т.е. на дисплее видим 30%, а на выходе 70%. Можно ли меню доработать и включить пункт инверсии? Сам я еще слабоват в этом деле.



scorpionlion, если ещё есть потребность, пиши, попробуй помочь разобраться. .
Разработчикам ещё раз спасибо, на базе этого кода собрал уже пару устройств и сейчас занимаюсь третьим.
Сообщить модератору
0 #38 tema-koroliov 30.03.2016 11:03
Цитирую AntonChip:
Кстати, всё никак не могу понять как изменить код, чтобы вместо енкодера работали кнопки. Изменил

Код:
void rotary(){
delay_us(150);
if(input(PIN_B0) == 0)
{
delay_us(150);
if(input(PIN_B1) == 0)
{
Enkoder = 0;
}
else
{
Enkoder = 2;
}
}
clear_interrupt(int_ext);
return;
}

на
Код:
void rotary(){
delay_us(150);
if(input(PIN_B0) == 0) Enkoder = 2;

delay_us(150);
if(input(PIN_B1) == 0) Enkoder = 0;

clear_interrupt(int_ext);
return;
}

И ничего не изменилось. Где ещё копать?
Сообщить модератору
0 #39 AntonChip 01.04.2016 08:06
Состояние кнопок нужно проверять в главном цикле или по прерыванию таймера
Сообщить модератору
0 #40 tema-koroliov 04.04.2016 20:35
Цитирую AntonChip:
Состояние кнопок нужно проверять в главном цикле или по прерыванию таймера

Извините, но не могли вы тыкнуть пальцем где именно привязка int_ext к PIN_B0? прописал к нажатиям отображение текста, при нажатии RB0 выводится сообщение RB0, при нажатии RB1 - ничего, если удерживать RB1 и нажать RB0 показывает сообщение RB0 потом RB1. Это что за бред? архитектура МК? Нигде больше в тексте нет упоминания PIN_B1 или PIN_B0... Может прописать какой то другое прерывание?
Сообщить модератору

Рекомендуем посмотреть