В 2006-м году возникло у меня желание освоить ассемблер для PIC микроконтроллеров. Решение осваивть именно PIC-и сформировалось не случайно. Для начала всего лишь 35 команд ассемблера. Запомнить наизусть их можно за несколько дней применяя на практике, при написании собственной программы. Или же просто заучить, пользуясь даташитом на любой из PIC контроллеров. Благо, что часть документации доступна на русском языке. Ну и первая конструкция — само-собой часы. И несложно(во всяком случае в начале мне так казалось) и дома и на работе часам или таймеру применение найти легко. Единственное препятствие, с которым пришлось столкнуться — это отсутствие ясной и последовательно изложенной информации по, непосрественно, способам программирования. В сети много сайтов с микроконтроллерной тематикой, но часто эта информация выложена в виде этакого винигрета, в котором разобраться, имея нулевой опыт в программировании чипов очень трудно. После запуска схемы «первый проект на микроконтроллере» — мигания светодиодом начался судорожный поиск дельной информации. И совершенно случайно, рыская по сети в поисках информации по очередной схеме из журнала «Радио» (частотомер Денисова) вышел на сайт Евгения Корабельникова. Не могу сказать, что на этом мои поиски закончились. Некоторые подходы
придумывал сам, а свой код, он как правило всегда лучше, чем
придуманный кем-то другим. Евгений — Автор с большой буквы, сумел упорядочить и переложить в нормально читаемый текст огромное количество материала, сделав его понятным и доступным, даже для тех, кто никогда раньше с программированием не сталкивался. Если Вам нужен быстрый старт и программирование на ассемблере для PIC контроллеров, то рекомендую сайт Евгения Александровича. http://ikarab.narod.ru
Самоучитель по программированию PIC контроллеров для начинающих(руководство по конструированию устройств на микроконтроллерах)Автор: Корабельников Евгений
Александрович г. Липецк Общие замечания по стратегии «въезда».«Самоучитель…» составлен таким образом, что, в случаях наличия каких-то неясностей, возникающих после прочтения предыдущих разделов, в последующих разделах, они постепенно проясняются за счет дополнительной информации. На первичной стадии «въезда», главное — понять смысл, а все остальное к нему, со временем, приложится.СодержаниеВведение 1. Готовим инструменты. Изготовление программатора и работа с ним. 3. Система команд PIC16F84A. 4. Что такое программа и правила ее составления. Пример создания программы автоколебательного мультивибратора. Директивы. Принципиальная схема мультивибратора 5. Интегрированная среда проектирования MPLAB IDE и работа в ней. 6. Что дальше? 7. Пример создания программы (начало). 8. Пример создания программы (продолжение). 9. Работа в симуляторе. Отладка программы. 10. Как отследить выполнение программы 11. Прерывания. Стек. Пример разработки программы с уходом в прерывания. 12. Организация вычисляемого перехода. Работа с EEPROM памятью данных. 13. Флаги. Работа с флагами. Как работает цифровой компаратор. Перенос и заем. 14. Пример задействования флага С в трехбайтном суммирующем устройстве. Циклический сдвиг. Операция умножения. 15. Введение в принцип построения подпрограммы динамической индикации. Косвенная адресация. 16. Преобразование двоичных чисел в двоично-десятичные. Окончательное формирование текста подпрограммы динамической индикации. 17. Принцип счета. Работа с таймером TMR0. Принцип установки групп команд счета в текст программы. Заключение Скачать
самоучитель Скачать
приложения
|
1
Часть 1 Оглавление
|
| Введение | 3 |
|
|
|
|
|
1. Готовим инструменты | 5 |
|
|
|
| |||
|
|
|
|
|
|
| ||
2. Что такое микроконтроллер и как он работает | 10 |
|
|
| ||||
|
|
|
|
|
| |||
3. Система команд PIC16F84A | 26 |
|
| |||||
|
|
|
|
|
|
|
| |
4. Что такое программа и правила ее составления. Пример создания |
|
|
|
|
|
| ||
| программы автоколебательного мультивибратора. Директивы. | 36 |
|
| ||||
5. Интегрированная среда проектирования MPLAB IDE и работа в ней | 45 |
|
| |||||
|
|
|
|
| ||||
6. Что дальше? | 70 |
|
| |||||
|
|
|
|
| ||||
7. Пример создания программы (начало) | 72 |
|
| |||||
|
|
|
|
| ||||
8. Пример создания программы (продолжение) | 96 |
|
| |||||
|
|
|
|
| ||||
9. Работа в симуляторе. Отладка программы | 107 |
| ||||||
|
|
|
| |||||
10. Как отследить выполнение программы | 121 |
| ||||||
|
|
|
| |||||
11. Прерывания. Стек. Пример разработки программы с уходом в прерывания | 134 |
| ||||||
|
|
|
| |||||
12. Организация вычисляемого перехода. Работа с EEPROM памятью данных | 160 |
| ||||||
|
|
|
| |||||
13. | 182 |
| ||||||
14. Пример задействования флага С в трехбайтном суммирующем устройстве. |
|
|
|
|
|
| ||
|
| Циклический сдвиг. Операция умножения | 200 |
| ||||
15. Введение в принцип построения подпрограммы динамической индикации. |
|
|
|
|
|
| ||
|
| Косвенная адресация | 222 | |||||
|
|
|
|
|
|
|
| |
16. Преобразование двоичных чисел в двоично-десятичные. Окончательное |
|
|
|
|
|
| ||
|
| формирование текста подпрограммы динамической индикации | 243 |
| ||||
17. Принцип счета. Работа с таймером TMR0. |
|
|
|
|
|
| ||
| Принцип установки групп команд счета в текст программы | 262 |
…………………………………………………………………
…………………………………………………………………
Заключение | 277 |
Дополнительная информация | 279 |
Количество страниц: | 287. |
2
Введение
Эпиграф: программист, работающий в ассемблере, должен быть «властелином колец». И еще: банальность это уставшая истина.
(поймете позднее)
В микропроцессорную технику люди приходят по-разному. Лично я, до поры, до времени, не ощущал особой потребности в необходимости заниматься этим, пока, в один прекрасный момент, не понял, что начинаю не соответствовать времени. То, что я наработал «до того», оказалось безнадежно устаревшим, а также «смешно смотрящимся» и на «фоне» современной элементной базы, и на «фоне» тех знаний, которые нужно иметь для того, чтобы работать с ней.
Кроме того, лично для меня, как-то не красиво и не достойно было «питаться объедками с царского стола», если есть возможность «за него сесть на правах полноценного участника трапезы».
Нужно было выбрать: либо «сложить лапки» и перейти в категорию постепенно «вымирающих» (дисквалифицирующихся),
либо заняться этими «страшными и ужасными» микроконтроллерами, которые все более напоминали «в каждой бочке затычку».
«Вымирать» совсем не хотелось, так что выбор был однозначным. И тут началось нечто, что напоминало «передвижение по джунглям».
Информационный «бардак» в этом «секторе» оказался настолько впечатляющим, что «волосы встали дыбом».
А куда деваться? «Отступать-то некуда, позади Москва».
Кстати, точно в таком же положении находятся сейчас многие люди (знаю по письмам), для которых «въезд» в микропроцессорную технику стал не то что какой-то «блажью», а самой натуральной жизненной необходимостью, что вполне понятно, ведь м/контроллеры входят в состав практически любой более или менее современной, малогабаритной (и не только) аппаратуры (а «чем дальше в лес, тем больше дров»…).
Чего я натерпелся, знает только один Господь Бог: помощи никакой и пришлось рассчитывать только на свои силы.
После всех этих «мытарств», возник закономерный вопрос: «Это что же такое получается? Неужели каждый, кто вознамерится «посягнуть» на эти «железяки», должен обязательно «разбивать свой нос в кровь», водя им по «батарее»?
Неужели нельзя без этого обойтись или, по крайней мере, сделать этот процесс не столь болезненным?
Прикинул. ..
А ведь, ей Богу, можно!
Правда, придется «вспахать поле не паханное», но по совокупности причин, смысл в этом есть.
То, что Вы прочитаете в «Самоучителе…», есть итог указанного выше болезненного процесса, преподнесенный «на блюдечке с голубой каемочкой».
Принцип преподнесения информации — максимальная степень «разжеванности», так как «Самоучитель…» предназначен именно для начинающих.
Одна из главных бед начинающих программистов — отсутствие системности в восприятии информации и ее «передозировка», связанная с чрезмерным желанием побыстрее достигнуть желанной цели, без учета объективных факторов.
Такого рода желание, конечно же, похвально, но при отсутствии плановости, четко выраженных приоритетов и способности, на первых порах, сознательно ограничивать объем воспринимаемой информации только самой действительно необходимой, оно играет с человеком злую шутку.
В результате — «бардак» в голове, дезориентация в потоках информации и в худшем случае, сожаление о потраченном времени, хотя, по большому счету, все не так уж и суперсложно, как может показаться на первый взгляд.
Я вовсе не говорю, что это просто. Поработать придется, но и пугаться совсем не стоит, так
3
как «не так страшен черт, как его малюют».
Еще одна беда — недооценка огромного значения знания и умения применения на практике стратегии и тактики «мозгового штурма».
Хотя и любой «мозговой штурм» полезен, но «мозговой штурм» программиста, имеющего хотя бы элементарное представление о его стратегии и тактике, гораздо эффективнее и действеннее, чем «судорожные действия» программиста, который этих представлений не имеет. А ведь работа программиста это «сплошной мозговой штурм»!!!
Мозги есть у всех, а вот со стратегией и тактикой этого «штурма» имеются большущие проблемы. Можно ведь, с дуру, и «пулю схлопотать» (по сценарию типа «геройская смерть программиста»).
Всвоей работе я исхожу из того, что мозги являются не только логической «машиной», но и «вместилищем личности».
Последнее либо явно недооценивается, либо вообще не берется в рассчет авторами подобных моему «творений», что есть огромнейший их просчет, сводящий на нет большую часть усилий.
Такого рода «однобокость», носящая массовый характер, в большинстве случаев, приводит к тому, что информация воспринимается обучаемым как логически изощренное, интенсивное (без чувства меры) и «беспросветное изнасилование автором его (обучаемого) мозгов», с целью «глумления» над низким уровнем его подготовки и прямого или косвенного понижения «микроконтроллерной» самооценки.
Конечно же, во многом, это не соответствует действительности, но что поделаешь, такова естественная, подсознательная, защитная реакция психики нормального человека на большой массив информации, к эффективной работе с которым она не готова.
Для того чтобы понять огромный вред такого подхода к обучению, вспомните про Афганистан или Чечню и про участь тех необстрелянных и психологически неподготовленных ребят, которых «бросили в эту мясорубку».
Я не желаю Вам такой участи, и по этой причине, в «Самоучителе…», предпринята своеобразная попытка постепенного «встраивания» нулей и единиц в личность (их «одухотворения») и формирования некой «идеологии офицера программных воск» («боевого духа», «стержня»), без которой любая «война» (программирование есть чисто мужское и «хулиганское» занятие с названием «война со своей бестолковостью») проигрывается даже не начавшись и которая является главной основой любой эффективной «школы» обучения. Сравнить мне не с чем, и поэтому я работаю на свой страх и риск.
Не судите меня строго, так как я работаю «с нуля» и «психологическим спецом» не являюсь. Надеюсь на то, что другие авторы продолжат эту исключительно важную и «преступно» игнорируемую «психологическую тему». Хочется верить, что при чтении «Самоучителя…», Вы почувствуете, что такое доброжелательное и уважительное отношение к Вашему совсем не легкому труду (по себе знаю), а Ваше подсознание не будет выдавать сигналов SOS об «изуверском изнасиловании мозгов».
Отдельно обращаюсь к «хулиганам», «драчунам» и «задирам» (в обывательском понимании этих слов), «мозговая деятельность» которых явно выражена.
Вам не нужно объяснять, что значит «держать удар», «уклоняться», «давать сдачи», и «фингалы» Вас не смущают. По этой причине, программирование это, в первую очередь, Ваша «вотчина», где Вы можете славно «поохотиться».
Впрограммировании, агрессивность есть достоинство, а не недостаток.
Здесь можно, от души, интеллектуально «помахать кулаками» (ограничений нет), плюс, «посворачивать шеи» многим достойным уважения «врагам» (ограничений нет), от чего, кстати, Вы однозначно получите большое удовольствие.
Итак, информация будет предоставляться в определенной последовательности и по принципу «от простого к сложному».
Прошу придерживаться этой последовательности и не переходить к следующим разделам без уяснения предыдущих. Дело это неторопливое и не требующее суеты.
Все «валить в кучу» не буду, «перенапряг» также постараюсь не создавать. «Самоучитель…» расcчитан на начинающих, но при этом предполагается, что они, как минимум, знают основы цифровой техники.
Выражаю искреннюю признательность тем людям, которые помогли в работе над этим учебником.
4
1. Готовим инструменты
Микроконтроллеры (и вообще все процессоры) изначально понимают только машинные коды, то есть некую совокупность нулей и единиц.
Те, кто представляет себе работу счетчиков, регистров, триггеров и т.д., сразу же поймет природу машинного кода.
Так как, среди электронщиков, таких людей большинство, то на мой взгляд, все они согласятся с такой аксиомой: машинные коды полезны в «малых дозах».
Авот когда начинаются «большие дозы» (сложные устройства с десятками корпусов м/схем), то «мозги начинают дымиться» даже у классных электронщиков, имеющих недюжинные способности.
В этом случае, самое неприятное заключается в том, что по мере роста схемотехнической сложности устройства, эффективность работы электронщика резко «падает».
И в самом деле, сил и средств вкладывается «море», а получается нечто не очень надежное, габаритное, сложное в изготовлении, энергоемкое и дорогое.
Чтобы «одним махом прихлопнуть» все эти проблемы, «яйцеголовые» и придумали сначала «большие» процессоры (то, что применяется в компьютерах), а затем и «маленькие», назвав их микроконтроллерами.
Внутри м/контроллера находится «набор» модулей, каждый из которых многофункционален. Манипулируя весьма не слабыми возможностями этого «набора», можно реализовать миллионы разновидностей устройств.
Естественно, всем этим «хозяйством» нужно как-то «рулить». Эта «рулежка» и есть то, что называется программированием.
Если речь идет о больших «массивах» машинных кодов, то программирования напрямую (в машинных кодах) и врагу не пожелаешь: удовольствия никакого, да, чего доброго, и в «психушку» попасть можно (есть исключения — люди с выдающимися способностями и гении). Для того, чтобы обычные люди могли, без особого «напряга», заниматься составлением программ, придуманы различные языки программирования.
Смысл всех их заключается в замене машинных кодов словами, сокращениями слов, абревеатурами и т. д., то есть тем, что человеком легко и осмысленно воспринимается и чем он может комфортно оперировать при составлении текста программы.
Все эти «удобоваримые приятности», по окончании составления текста программы, переводятся в машинные коды одним «легким движением руки» (мозги программиста не задействуются).
Чтобы это «легкое движение руки» имело место быть, «яйцеголовые» придумали так называемую «интегрированную среду разработки».
Это есть набор программ, в котором программист работает с максимальной степенью комфорта, причем, по всему «массиву» решаемых им задач (включая и составление текста программы, и т. д. и т.п.).
Что, первым делом, нужно сделать, например, русскому, который попал в Англию и собирается там жить?
Выучить английский язык.
При «въезде» в программирование, нужно сделать то же самое (задача даже существенно проще).
«Проматерь» всех языков программирования — ассемблер.
Хотя он и считается самым простым, но слово «простой» относится прежде всего к набору его команд: количество их — минимально необходимое, и тем не менее, вполне достаточное для решения самых сложных задач, но не к комфортному восприятию их человеком.
Команды ассемблера являются либо сокращениями английских слов, либо набором первых букв английских словосочетаний, либо и тем, и другим.
Минимальный «джентльменский» набор ассемблера для ПИКов составляет 35 команд. Реально же, наиболее часто, используются от 10 до 20 команд.
В дальнейшем, настройте себя просто на тупое заучивание (на первых порах) всей этой английской «абракадабры», типа зубрежки (я вообще не имею никакой склонности к иностранным языкам, но ничего, освоил), не такая уж это и сложная задача, заверяю Вас. В дальнейшем, Ваше образное мышление и зрительная память Вам помогут.
Авыучить ассемблер очень даже стоит по причине того, что он, может быть, и не очень
«удобоварим», но именно на этом языке пишутся самые компактные по объему, быстрые и надежные программы, и по этой причине, серьезные программисты, работают
5
преимущественно в ассемблере.
Предупреждение: на этом этапе в ассемблер не лезть! Всему свое время. Пока достаточно общего представления (пусть «в мозгах уляжется»).
Программы для ПИКов составляются преимущественно в ассемблере.
Даже если программа для них и составлена на языке более высокого уровня, то в конечном итоге, интегрированная среда разработки переведёт все в ассемблер.
Об интегрированной среде разработки (проектирования): Она выполняет целый комплекс задач.
В ее специализированном текстовом редакторе, составляется текст программы.
Текст программы нельзя записывать в ПИК, так как он «понимает» только машинные коды. Следовательно, нужно преобразовать текст программы, с языка ассемблер, в машинные коды.
То есть, необходимо так называемое ассемблирование (компилирование) исходного текста программы, которое производится все в той же интегрированной среде разработки.
Вот здесь-то начинающие обычно и путаются: словосочетание «ассемблирование исходного текста программы» означает не перевод исходного текста программы на язык ассемблер (текст программы уже написан на языке ассемблер), а наоборот, преобразование текста программы, написанной на языке ассемблер, в машинные коды, которые сначала соответствующим образом архивируются и помещаются внутрь специального файла с расширением (форматом) .HEX (для удобства хранения и транспортировки машинных кодов), а затем разархивируются из HEX-файла и принимают свой исходный вид в программе, обслуживающей программатор.
С помощью этой программы, машинные коды программы записываются в ПИК. Приведенное выше словосочетание, используемое сплошь и рядом, безусловно, не является удачным.
Обратите на это внимание и всегда имейте ввиду, что оно не отражает смысла происходящего, хотя я и буду употреблять его далее, так как оно является стандартным. Я рассказал только о двух основных функциях интегрированной среды разработки.
Ее возможности ими далеко не исчерпываются.
Интегрированная среда разработки для ПИКов называется MPLAB.
Эта программа (вернее набор программ) создана производителем ПИКов, то есть фирмой
Microchip Technology Inc.
В России, представителем этой фирмы является ООО «Микро-Чип», которое имеет в Интернете свой сайт технической поддержки на русском языке http://www.microchip.ru (кстати, на этом сайте, в разделе «Начинающим», есть ссылка на мой сайт).
6
Лично я пользуюсь версией MPLAB 5.70.40, что и Вам советую.
Это «старый, добрый конь, который борозды не испортит» и возможностей у него «выше крыши».
Главный недостаток этой версии — медленно работает (считает), но для начинающих, «реактивной» скорости и не нужно.
Главное ее преимущество — надежность работы.
Вболее поздних версиях, в той или иной мере, осуществлен обмен скорости на надежность, что иногда не есть хорошо.
Вдальнейшем, я буду ориентироваться на версию 5.70.40.
Примечание: дистрибутив MPLAB версии 5.70.40 (и еще 2 версии) имеется на компактдиске. Закачивать дистрибутив MPLAB нужно в папку с английским названием (папка мои документы или рабочий стол не подойдут), иначе будете иметь проблемы.
Лучше всего организовать ее в папке Program Files диска С.
Программа MPLAB является интегрированной средой разработки для ПИКов и содержит все необходимое как для написания и редактирования программы, так и для создания HEX-файлов, а также и для отладки программы.
Таким образом, необходимость в наличии отдельного текстового редактора для написания программы, отдельной программы — ассемблера для создания HEX-файла и отдельного отладчика программы (симулятора) отпадает, так как в MPLAB все это есть (и даже более того).
Установите MPLAB на свой компьютер, убедитесь, что она встала не «криво» и на время про нее забудьте, так как для того чтобы с ней работать, необходимо основательно подготовиться, чем в дальнейшем мы и будем заниматься.
Следующий шаг — сборка программатора, так как HEX-файл программы, созданный в MPLAB, необходимо «превратить» в машинные коды, которые и будут записываться в ПИК (так называемая «прошивка»).
Ничего проще и надежнее чем программатор PonyProg, я, на первом этапе, предложить не могу, хотя, безусловно, имеются и другие «достойные» программаторы.
Информацию по сборке программатора PonyProg Вы найдете в «Приложении №1».
Следует учесть, что программатор PonyProg лучше всего работает на относительно «медленных» компьютерах старых выпусков, так как, в свое время, программа PonyProg создавалась под них.
При подключении программатора к современным быстродействующим компьютерам с «навороченными» операционными системами, могут возникнуть конфликты типа «нестыковки» программы PonyProg с операционной системой или превышения предельно допустимой скорости обмена данными между компьютером и программируемым ПИКом, то есть программатор может просто не заработать.
7
Это вовсе не есть факт, но такое может быть.
Самое лучшее решение — применение для этих целей компьютера с тактовой частотой до 500мГц и операционной системы Windows95/98.
Лично я сделал так: купил практически «за так» «древнюю старушку», обманул BIOS, пристегнув к родному винчестеру, «помощником», дополнительный винчестер на 8Гб, поставил Windows98 и включил «форсаж».
Получилось «дешево и сердито», и прежде всего по той причине, что при занятии программированием, создании печатных плат, вычерчивании схем и прочих радиолюбительских делах, особой скорости и не требуется, так как все эти занятия неспешны, и особого смысла задействовать под это дело быстродействующие компьютеры нет.
В моей «старушке» стоит почти на 2Гб подобного рода программ, в том числе и довольно-таки «навороченных», и ничего, прекрасно работает.
С тем, что должно быть в наличии обязательно, я надеюсь, понятно, а теперь о полезных «мелочах». Скачайте эти две маленькие, но полезные и удобные программки:
HEX — калькулятор: файл CALC32. rar прилагается (папка «Программы»). Конвертер систем исчисления: файл BCONV32 прилагается (папка «Программы»).
Они настолько просты, что Вы без труда разберетесь, зачем они нужны. Чаще всего требуется конвертер систем исчисления.
08.07.07.
Один из активных участников работы, Петр Высочанский, разработал программу конвертера систем исчисления, которая наиболее адаптирована к практическим нуждам:
Конвертер систем исчисления Петра Высочанского: файл Hex-Dec_Bin.exe прилагается
(папка «Программы»)
8
При открытии, программа конвертера устанавливает английскую раскладку клавиатуры (то, что нужно).
Итак, все что необходимо для занятия программированием PIC контроллеров имеется. Пока, это не более чем красивые и интригующие «штучки» не вполне понятного предназначения.
Можно их на досуге рассмотреть, на что-нибудь понажимать, только, во избежание дальнейших недоразумений, не трогайте настроек по умолчанию.
Переходите к следующему разделу.
«Самоучитель по программированию PIC контроллеров для начинающих» http://ikarab.narod.ru E-mail: [email protected]
9
2. Что такое микроконтроллер, и как он работает
Прежде всего, микроконтроллер это процессор со всеми его «атрибутами», плюс встроенная, энергонезависимая память (программ и данных), что позволяет отказаться от внешней памяти программ и поместить программу в его энергонезависимую память.
Это позволяет создавать очень простые (в схемотехническом отношении) и компактные устройства, выполняющие, тем не менее, достаточно сложные функции.
Иногда даже диву даешься: эта маленькая «штучка» заменяет целую «груду старого железа» (К555 и т.д.).
Любой микроконтроллер, по своим возможностям, конечно же, уступает процессору компьютера, но тем не менее, существует весьма обширный класс устройств, которые преимущественно реализуются именно на микроконтроллерах.
Ив самом деле, компьютер в карман не положишь и от батареек его не запитаешь. Поэтому, во многих случаях, микроконтроллерам просто нет альтернативы. «Сердцем» микроконтроллера является арифметико — логическое устройство (АЛУ).
Проще всего его представить в виде банального калькулятора, кнопками которого управляет программа, написанная на языке ассемблер (то есть, программист).
Если вдуматься, то ничего особо сложного, в механизме управления такого рода калькулятором, нет.
Ив самом деле, если нужно, например, сложить числа А и В, то в тексте программы сначала задаются константы А и В, а затем дается команда «сложить».
Программисту вовсе не обязательно знать, что происходит с нулями и единицами (разве только только для общего развития), ведь калькулятор он на то и калькулятор, чтобы избавить пользователя от «возни» с машинными кодами и прочими «неудобоваримостями». Когда Вы работаете с компьютером, Вам и не нужно детально знать, что происходит в дебрях операционной системы.
Если Вы туда «полезете», то «с ума сойдете», а микроконтроллер, по своей сути, есть тот же самый компьютер, но только простой.
Программисту только нужно детально знать, каким именно образом «приказать железяке» сделать то, что необходимо для достижения задуманного.
Микроконтроллер можно представить себе как некий универсальный «набор» многофункциональных модулей (блоков), «рычаги управления» которыми находятся в руках программиста.
Этих «рычагов» достаточно большое количество, и естественно, их нужно освоить и точно знать, что именно произойдет, если «дернуть» (дать команду на языке ассемблер) за тот или иной «рычаг».
Вот здесь-то уже нужно знать, как «отче наше», каждую деталь и не жалеть на это «узнавание» времени.
Только таким образом пустую «болванку» (незапрограммированый ПИК) можно «заставить» выполнять какие-то «осмысленные» действия, результат большей части которых можно проверить в симуляторе MPLAB (об этом — позднее), даже не записывая программу в ПИК. Итак, необходим переход к «модульному» мышлению.
Любой микроконтроллер можно уподобить детскому конструктору, в состав которого входит множество всяких предметов, манипулируя с которыми, можно получить тот или иной конечный «продукт».
Давайте с ними разберемся и «разложим все по полочкам».
В качестве примера я буду использовать один из самых распространенных PIC контроллеров
PIC16F84A.
Он является как бы «проматерью» более сложных ПИКов, содержит минимальный «набор» модулей и как нельзя лучше подходит для первичного «въезда в м/контроллеры».
Энергонезависимая память.
Начнем с энергонезависимой памяти (память программ и память данных). Информация, заложенная в энергонезависимую память, сохраняется при выключении питания, и поэтому именно в нее записывается программа.
То «место» энергонезависимой памяти, куда записывается программа, называется памятью программ.
Объем памяти программ может быть различен. Для PIC16F84A, он составляет 1024 слова. Это означает, что он предназначен для работы с программами, объем которых не превышает
10
Настройка ПИД-регулятора может оказаться сложной задачей, зная, с чего начать и в каком направлении двигаться. В этой статье будут представлены решения для обоих из них, настройка ПИД-регулятора с нуля и многое другое!
Для начала прочитайте «Объяснение ПИД-регулятора», чтобы узнать, что такое ПИД-регулятор и как он работает. А также страницу PID Simulator для использования живого PID Simulator!
В начале этого поста следует отметить, что для одного и того же устройства может быть много значений. Важно не найти «идеальные» значения, а найти те, которые соответствуют требованиям и обеспечивают желаемый контроль.
Поиск начальных значений PIDСначала убедитесь, что все механически исправно с управляемым устройством. В большинстве случаев люди будут пытаться «настроить» значения PID, чтобы решить проблему, но проблема будет физической, а не автоматической. Как только все будет проверено, мы можем начать программировать!
Пропорциональный Настройка пропорционального усиленияНачните с установки значений интеграла и производной на 0. Затем увеличивайте пропорциональность до тех пор, пока контроллер не станет нестабильным и начнет колебаться.
Регулятор, в котором колебания становятся меньше, считается «устойчивым» регулятором, так как со временем он стабилизируется, а когда колебания начинают увеличиваться, — «неустойчивым» регулятором.
Как только будет найдено пропорциональное значение, вызывающее колебания контроллера, возьмите это значение и разделите его пополам. Это будет начальное значение P .
Пример: на рисунке пропорциональное усиление, вызывающее нестабильность контроллера, равно 1000, поэтому начальное пропорциональное значение будет равно 500.
Интеграл Настройка усиления интегралаКак только пропорциональное значение найдено, мы можем начать настройку интеграла. Всегда начинайте с небольших шагов при настройке ПИД-регулятора и давайте время между каждой регулировкой, чтобы увидеть, как реагирует контроллер.
Увеличивайте интегральное усиление небольшими шагами и с каждой регулировкой изменяйте уставку, чтобы увидеть, как реагирует контроллер.
Целью настройки интегрального значения является достижение адекватного отклика контроллера или времени реакции (после установки начального отклика пропорционального регулятора).
Если контроллер начинает колебаться или становится нестабильным, отрегулируйте значение I в противоположном направлении, пока контроллер снова не станет стабильным. Как только контроллер станет стабильным и будет отвечать желаемо… поздравляю! теперь у вас есть работающий ПИ-контроллер.
В нижней части этой статьи я опубликую видео, в котором показаны эти шаги в автоматизированном симуляторе PID, чтобы предоставить практический пример для тех (таких как я), которые более наглядны.
Для начинающих загрузите приложение PID Simulator из Microsoft Store, чтобы применить эти шаги на практике!
Производная Настройка коэффициента дифференциацииСуществует множество ПИ-регуляторов, и для некоторых приложений требуется только это. Но если ваше приложение может извлечь выгоду из демпфирующего эффекта производной, вам нужно будет найти работающее значение!
Теперь, когда у вас есть стабильный ПИ-регулятор, начните с медленного увеличения значения производной, изменения уставки и предоставления регулятору времени для стабилизации.
Назначение значения D состоит в том, чтобы контролировать скорость линейного изменения значения процесса и предотвращать превышение заданного значения.
Продолжайте изменять уставку и увеличивать производную до тех пор, пока выброс не будет снижен до приемлемого уровня. Если контроллер начинает реагировать отрицательно (неожиданные изменения выходного сигнала, плохое управление или колебания), уменьшайте значение D до тех пор, пока контроллер снова не станет стабильным.
Будьте осторожны при настройке значения производной, так как более высокое значение заманчиво — всем нужен плавный регулятор, не так ли? – но слишком высокая производная начнет отрицательно влиять на результат и «бороться» с тем, что P и I значения пытаются выполнить.
Другая проблема с высоким значением D заключается в том, что если есть шум или искажение обратной связи значения процесса, производная может воспринять это как быстрое изменение скорости линейного изменения и сместить выходной сигнал в нежелательное время.
Подробнее о настройке проверки производной из видео ниже.
Расширенная настройка ПИД-регулятораПосле того, как начальные значения найдены (выполнив шаги, описанные выше), вы можете приступить к изменению уставки и подвергнуть контроллер некоторым симуляциям, чтобы увидеть, как он будет реагировать.
Не существует установленной формулы для расширенной настройки ПИД-регулятора и пошагового процесса, который будет работать в каждом сценарии, но при наличии понимания того, как работает ПИД-регулятор, и достаточной практики это определенно возможно. Чтобы попрактиковаться в настройке ПИД-регулятора, загрузите отличное приложение PID Simulator из магазина Microsoft Store!
Наблюдая за реакцией контроллера, вы поймете, какое значение (или значения) следует изменить.
ПИД-регулятор реагирует недостаточно быстро:Наблюдайте за начальным откликом на выходе ПИД-регулятора. Если начальный отклик быстрый (крутой пик на выходе), но следующие несколько секунд кажутся более медленными, то значение интеграла необходимо отрегулировать. Увеличивайте интегральное усиление до тех пор, пока не будет достигнуто желаемое время реакции, но будьте осторожны, чтобы не стать слишком большим и не вызвать колебания.
Если начальная реакция ПИД-регулятора (немедленная реакция выхода), попробуйте увеличить пропорциональное значение. Обратите внимание, что если пропорциональное усиление увеличивается, проведите несколько тестов контроллера, чтобы увидеть, нужно ли также увеличивать усиление производной, чтобы предотвратить возможный выброс.
ПИД-регулятор зашкаливает:Посмотрите на первоначальную реакцию ПИД-регулятора, если первоначальная реакция слишком высока, то уменьшение пропорционального (или, возможно, интегрального) регулирования может исправить выброс. Однако, если время реакции хорошее, а ПИД-регулятор стабилен, то может потребоваться небольшое увеличение производной, чтобы ослабить перерегулирование.
ПИД-регулятор нестабилен или колеблется:Нестабильный или колеблющийся ПИД-регулятор может быть одним из самых сложных для устранения. Перед регулировкой дважды проверьте, нет ли внешних или физических сил, вызывающих проблему.
Если колебания вызваны мгновенным скачком выходного сигнала до 100 %, затем до 0 % и обратно, вероятно, установлено слишком высокое пропорциональное усиление. Начните с уменьшения коэффициента усиления производной до низкого значения (чтобы убедиться, что он не вызывает нестабильности), затем уменьшайте пропорциональный коэффициент усиления, пока контроллер не станет более стабильным.
Если выходной сигнал не достигает мгновенного пика, а кажется, что он выше или ниже, то интегральное значение, вероятно, слишком велико. Уменьшайте интегральное усиление, пока контроллер не станет стабильным.
Если ничего не помогает, вы можете переустановить значения ПИД-регулятора и настроить ПИД-регулятор с самого начала, как описано выше.
Надеюсь, эта статья вам помогла. Посмотрите интерактивный видеоролик ниже!
Посмотрите это видео о том, как настроить ПИД-регулятор. Чтобы попрактиковаться в контурах ПИД-регулирования, загрузите приложение PID Simulator из магазина Microsoft!В каждый момент времени в простом представлении виден только один набор параметров назначения. Вы используете процесс обучения, чтобы назначить контроллеры каналам и параметрам подключаемых модулей, перемещая контроллер на панели управления. Это отправляет MIDI-сообщение в Logic Pro, тем самым «обучая» его, какой контроллер вы назначаете для выбранного параметра.
В Logic Pro Mixer или в любом окне подключаемого модуля выберите параметр.
Выберите Logic Pro > Control Surfaces > Learn Assignment для [имя параметра].
В качестве альтернативы можно использовать клавиатурную команду «Изучить новое назначение контроллера», чтобы открыть окно «Назначения контроллера» и автоматически активировать режим обучения.
Окно «Назначения контроллера» открывается в простом режиме с активированной кнопкой «Режим обучения». В большинстве случаев название выбранного параметра отображается в поле Параметр.
Переместите аппаратный контроллер, который вы хотите назначить для выбранного параметра, затем нажмите кнопку «Режим обучения», чтобы завершить процесс обучения.
Перемещение контроллера отправляет MIDI-сообщение в Logic Pro, которое появляется в поле «Входное сообщение». Это запоминает назначение контроллера.
Если вы не нажмете кнопку «Режим обучения», режим обучения останется активным, позволяя выполнять дальнейшие назначения.
Чтобы выполнить другое назначение, выберите другой параметр, затем переместите контроллер на панели управления.
Нажмите кнопку «Режим обучения» (или нажмите Command-L), чтобы завершить процесс обучения.
Выберите Logic Pro > Control Surfaces > Learn Assignment для [имя параметра] (или нажмите Command-L), чтобы открыть окно Controller Assignments.
Удерживая нажатой клавишу-модификатор, которую вы хотите использовать (например, Command), выберите параметр, который хотите назначить, перемещая элемент управления.
Нажмите кнопку «Режим обучения», чтобы завершить процесс обучения.
Если Logic Pro получает MIDI-сообщение от устройства, пока вы удерживаете нажатой клавишу-модификатор, кнопка режима обучения деактивируется, когда вы отпускаете клавишу, и процесс обучения завершается. Если вы отпустите клавишу-модификатор до того, как Logic Pro получит MIDI-сообщение, кнопка «Режим обучения» останется активной, поэтому вы все равно сможете переместить контроллер для отправки MIDI-сообщения. В этой ситуации не забудьте нажать кнопку «Режим обучения», когда вы закончите, чтобы завершить процесс обучения.
Logic Pro содержит ярлык, который позволяет легко назначать серию контроллеров для серии схожих параметров. Например, вы можете использовать этот ярлык, чтобы назначить громкость серии фейдеров; для назначения набора ручек или переключателей другим параметрам канальной линейки, таким как панорамирование, соло или отключение звука; или назначить серию контроллеров набору параметров плагина.
В микшере Logic Pro или в любом окне подключаемого модуля выберите параметр.
Выберите Logic Pro > Control Surfaces > Learn Assignment для [имя параметра].
В качестве альтернативы вы можете использовать клавиатурную команду «Изучить новое назначение контроллера», чтобы открыть окно «Назначения контроллера» и активировать режим обучения.
Окно «Назначения контроллера» открывается в простом режиме с активированной кнопкой «Режим обучения». В большинстве случаев название выбранного параметра отображается в поле Параметр.
Назначьте первый контроллер в серии первому параметру. Например, назначьте фейдер 1 для управления громкостью канала 1.