Выпуск #4/2019
Л. Ди Джасио
Как с помощью независимой от ядра периферии микроконтроллеров PIC синтезировать новую функцию
Как с помощью независимой от ядра периферии микроконтроллеров PIC синтезировать новую функцию
Просмотры: 1634
Переназначение выводов микросхемы и независимая от ядра периферия микроконтроллеров PIC позволяют разработчику гибко модифицировать проектное решение. В статье на примере создания ШИМ-функции показано, как без дополнительных внешних компонентов и необходимости изменения топологии печатной платы можно быстро синтезировать новую автономную функцию периферии.
DOI: 10.22184/1992-4178.2019.185.4.68.72
УДК 621.3.049.774
ВАК 05.27.01
DOI: 10.22184/1992-4178.2019.185.4.68.72
УДК 621.3.049.774
ВАК 05.27.01
Теги: core independent peripherals (cip) peripheral pin select (pps) pic microcontroller pinout pwm function выбор вывода периферии микроконтроллер pic независимая от ядра периферия цоколевка выводов шим-функция
Как с помощью независимой от ядра периферии микроконтроллеров PIC синтезировать новую функцию
Л. Ди Джасио
Разработчикам встраиваемых систем доступны разнообразные продукты и решения, позволяющие реализовать все многообразие функций. Однако зачастую выбор оптимального решения в процессе работы над проектом может быть обусловлен необходимостью перехода на другую модель микроконтроллера. Микроконтроллеры PIC от Microchip отличаются такими усовершенствованными функциями, как переназначение выводов микросхемы и независимая от ядра периферия, которые предоставляют разработчику гибкие возможности модификации проектного решения. На примере создания ШИМ-функции рассмотрим, как без дополнительных внешних компонентов и необходимости изменения топологии печатной платы можно быстро синтезировать новую автономную функцию периферии микроконтроллера.
Введение
Программисты встраиваемых систем и программисты компьютерных систем общего назначения различаются тем, что первые имеют дело с невероятным разнообразием аппаратных средств. Они, как летчики-испытатели, тогда как обычные пилоты управляют одним и тем же самолетом зачастую по одному и тому же маршруту. Программисты встраиваемых систем наслаждаются разнообразием машин и конфигураций, которые приходится часто менять в целях оптимизации стоимости, скорости и удобства использования под влиянием рыночного спроса и / или желаний заказчиков. Эта работа не бывает скучной, однако требует от программиста значительных усилий и затрат времени на поиск оптимального решения. С одной стороны, разработчики встраиваемых систем стремятся быстрее опробовать новейшие и передовые продукты. С другой стороны, любые инновации сопровождаются обучением, поэтому программисты и разработчики хотят, чтобы все пользовались одними и теми же компилятором, библиотекой и набором инструментов, с которыми они уже знакомы.
На рынке представлен широчайший выбор микроконтроллеров, разработчикам встраиваемых систем доступно любое количество контактов, разрядов, любая архитектура и практически любая комбинация флеш-памяти и ОЗУ. Конкурентная борьба среди основных поставщиков микроконтроллеров в последние годы была сфокусирована на том, чтобы добавить функций чипу и еще больше расширить матрицу выбора. Сегодня для создания встраиваемых приложений важно, чтобы микроконтроллер был оснащен богатым набором периферии (функций).
Зачастую разработчики приступают к проекту с заданной моделью микроконтроллера, но вскоре понимают, что должны заменить ее другой прямо в середине проекта. И это случается как с ленивыми инженерами, которые вовремя не провели анализ, так и с теми, кто старательно готовился. Чаще это происходит из-за того, что в проекте нужно учитывать множество факторов, как в игре в шахматы. Разработчику может быть трудно прогнозировать, как периферийные функции будут взаимодействовать в приложении или как нужно модифицировать аппаратное решение, когда требования к проекту меняются (как всегда и случается) и впереди маячит срок сдачи проекта.
Смена модели микроконтроллера может оказаться наименьшим из зол, когда близкий аналог есть в том же семействе того же производителя. Сложнее, когда нужная опция недоступна, и вынужденный переход на другое семейство микроконтроллеров часто производит эффект домино, когда меняется цоколевка выводов микросхемы, а возможно, и другие периферийные функции.
Решение – независимая от ядра периферия
Оптимальный способ решения этих проблем – заранее планировать возможность их появления. В новейших семействах микроконтроллеров предусмотрены умные способы расположить в ином порядке выводы для каждой периферийной функции. Причем не изменить функции отдельного вывода, а переназначить выводы всех аналоговых и цифровых функций. Например, предусмотренная в 8-, 16- и 32-разрядных микроконтроллерах Microchip специальная функция Peripheral Pin Select (PPS) обеспечивает возможность использования каждого вывода микросхемы в качестве входа для любого количества устройств периферии (в некоторых моделях до 64 периферийных функций), а любым выходом периферии может быть назначено до 16 выводов микросхемы (в некоторых моделях до 32). Аналоговые входы АЦП можно таким же образом распределить среди большей части выводов микросхемы (например, до 35 из 40 выводов чипа).
Это хорошая страховка от возможной несовместимости выводов при переходе на другие модели, но все же качественно новое решение, реализованное в микроконтроллерах Microchip, – независимая от ядра периферия (Core Independent Peripherals – CIP). Причем основная цель создания CIP – снижение рабочей нагрузки центрального процессора микроконтроллера за счет автоматизации как можно большего количества низкоуровневых и координационных операций, которые обычно требуются периферийным функциям. Однако благодаря доступности дополнительных взаимосвязей и гибким возможностям, CIP – прекрасный способ решения проблемы перехода на другую модель микроконтроллера в середине работы над проектом.
Пример создания новой ШИМ-функции «из ничего»
Рассмотрим случай из практики, когда нужно было спроектировать усовершенствованную версию автомобильного датчика с несколькими таймерами, парой 10-разрядных ШИМ-модулей и аналоговым компаратором. Все эти функции доступны в недорогом 28-выводном микроконтроллере PIC16F1885. Разработчики быстро поняли, что в текущем проектном решении достигнуто ограничение по разрешению, для преодоления которого потребовался 12-разрядный (или более высокой разрядности) ШИМ-регистр. К сожалению, этой опции не было предусмотрено в данной модели микроконтроллера. В аналогичных 8-разрядных микроконтроллерах PIC с совместимым форм-фактором (и цоколевкой выводов) предлагалась слишком маленькая память программ либо намного более богатый набор периферии по более высокой цене. Все, что было нужно разработчикам, – дополнительный ШИМ-регистр с 12-разрядным или более высоким разрешением.
К счастью, ШИМ-функцию легко синтезировать на чипе при наличии некоторого количества конфигурируемых блоков и связующих логических схем. Любая ШИМ-функция может быть создана путем комбинации двух элементов: периодического импульсного сигнала и граничного счетчика. На рис. 1 показано, как можно комбинировать эти два элемента, чтобы получить прямоугольный сигнал с нужным периодом и коэффициентом заполнения (рабочим циклом).
Настройка временной диаграммы
Временную диаграмму можно реализовать с помощью любого стандартного таймера, поскольку он формирует периодический импульсный сигнал нужной частоты (в нашем случае порядка 500 Гц). Для данного приложения в качестве таймера подходит 8-разрядный базовый таймер / счетчик, который может работать совместно с другими функциями (ШИМ и др.). В данном случае использовался модуль Timer2 – 8-разрядный базовый таймер с регистром совпадения. Конфигурирование модуля Timer2 в качестве базового таймера требует инициализации всего пары регистров, как показано на рис. 2.
Традиционный путь разработки такой подпрограммы инициализации потребовал бы детального изучения документации к выбранному микроконтроллеру PIC и тщательной идентификации битовой комбинации для каждого регистра. Процесс может занять длительное время и подвержен ошибкам даже в случае простой периферии. Сегодня доступен более оптимальный путь – использовать MPLAB Code Configurator, быстрый инструмент разработки (плагин), интегрированный в среду MPLAB X IDE, который позволяет генерировать код (например, подпрограмму инициализации, подобную приведенной на рис. 2) с помощью всего нескольких кликов мыши. По сути, этот инструмент часто используется для исследования функций устройств и экспериментов со множеством опций, реализованных в независимой от ядра периферии.
На рис. 3 показаны доступные разработчику блоки и поля ввода диалогового окна MPLAB Code Configurator, с помощью которых можно выбрать все опции модуля Timer2.
Конфигурирование граничного счетчика
Граничный счетчик – немного более сложная функция. После запуска таймер должен досчитать до некоторого граничного значения, сгенерировать импульс и остановиться. Он выполнит сброс и вновь начнет отсчет, только если на вход поступит следующий сигнал запуска. Эту функцию часто называют мультивибратором с повторным запуском, в литературе по микроконтроллерам PIC функция известна как аппаратный граничный таймер (Hardware Limit Timer – HLT).
К сожалению, для реализации 12-разрядной ШИМ-функции (или более высокой разрядности) типовой HLT-таймер, доступный на микроконтроллере PIC, не подойдет. В современных микроконтроллерах PIC HLT-таймеры обеспечивают только 8-разрядные счетчики. Однако другое, менее известное, периферийное устройство может обеспечить нужное разрешение.
Это таймер измерения сигналов (Signal Measurement Timer – SMT), блок-схема которого показана на рис. 4. Если HLT – таймер с одним дополнительным входом запуска / сброса, то SMT – таймер с двумя такими входами. Есть ряд интересных способов комбинирования входов для того, чтобы обеспечить измерения таких параметров сигнала, как время, частота, коэффициент заполнения – отсюда и название функции.
В документации к микроконтроллеру представлен список из 11 режимов измерения, что может напугать неопытного пользователя и сделать SMT самым непонятным и недоиспользованным устройством среди CIP-периферии. Один из этих режимов – режим оконных измерений (Window Measurement Mode) – фактически превращает SMT в HLT. По сути, SMT – это очень крупный HLT-таймер, поскольку содержит 24-разрядный счетчик и регистр периода соответствующего размера. Конфигурирование SMT-таймера (SMT1) аналогичным образом можно значительно упростить благодаря использованию инструмента MCC, как показано на рис. 5.
С помощью нескольких кликов мыши можно автоматически сгенерировать функцию инициализации (рис. 6), аналогичную функции инициализации TMR2 (см. рис. 2).
Конфигурирование S / R-триггера
Для комбинации функций базового таймера и граничного счетчика можно использовать триггер установки / сброса (S / R-триггер). Эта функция, доступная на многих микроконтроллерах PIC, за последние пять лет была интегрирована в качестве одной из восьми функций в конфигурируемые логические ячейки (Configurable Logic Cell – CLC) – один из основных элементов CIP-периферии.
На рис. 7 показано, как эти два сигнала можно подать на входы S / R-триггера, чтобы получить ШИМ-выход (на рисунке представлено диалоговое окно MPLAB Code Configurator для конфигурирования CLC-модулей).
Используется быстрый инструмент разработки (MCC) или конфигурируется периферия вручную, результат один и тот же – компактная функция инициализации, содержащая всего несколько операций присваивания для соответствующих регистров периферии (рис. 8).
Поскольку микроконтроллеры PIC16F188xx в нашем приложении оснащены двумя SMT-модулями, можно было синтезировать не один, а два новых ШИМ-модуля с требуемым удвоенным разрешением.
Дополнительные несколько строк кода завершат конфигурирование новой ШИМ-функции и позволят контролировать ее коэффициент заполнения (рабочий цикл). На рис. 9 показано, как можно реализовать инициализацию периферии путем простого связывания функций инициализации трех используемых устройств периферии. Запуск и остановка нового ШИМ-модуля теперь управляется граничным счетчиком (SMT1), а коэффициент заполнения контролируется 24-разрядным регистром периода SMT. В этой процедуре перед изменением значения коэффициента заполнения был добавлен простой цикл синхронизации, чтобы избежать выбросов на выходе.
Эффективное разрешение ШИМ-модуля
Среди неопытных пользователей распространено ложное представление, что разрешение ШИМ-регистра определяется числом разрядов таймера, управляющего длительностью импульса в состоянии «включено» (коэффициентом заполнения). Согласно этому определению нам нужно было бы создать 24-разрядную ШИМ-функцию, но это не так.
Период и коэффициент заполнения ШИМ-функции – это не полностью независимые величины: как можно было увидеть выше, они контролируются таймерами / счетчиками и связаны с тактовым сигналом периферии микроконтроллера.
Для любого заданного тактового сигнала периферии счетчик, управляющий временем включения, способен досчитать только до значения MaxCount, прежде чем повторится очередной период временной диаграммы. В этой точке ШИМ-регистр достигнет 100%-ного коэффициента заполнения и дополнительные разряды в регистре не будут использоваться. Эффективное разрешение созданной в примере ШИМ-функции определяется по формуле:
MaxCount = Tperiod · Fclock.
В нашем случае для Tperiod = 2,048 мс и тактовой частоты периферии, равной 32 МГц, (SMT-триггер можно синхронизировать от максимальной частоты системного генератора, не ограниченной тактовой частотой команд ЦП, деленной на 4, как для основной части периферии микроконтроллера PIC) MaxCount = 65,356.
Логарифм по основанию 2 от величины MaxCount равен эффективному разрешению ШИМ-функции в битах, которая в данном случае равна 16 битам.
Результат подтверждает, что новый ШИМ-модуль действительно отличается более высоким разрешением, чем стандартные 10-разрядные ШИМ-модули микроконтроллеров PIC, и наша цель даже превышена.
Заключение
Отметим, что речь идет о создании новой эффективной 16-разрядной ШИМ-функции без использования дополнительных внешних компонентов. Мы просто сконфигурировали, соединили и повторно использовали небольшое количество функций, доступных на чипе. Более того, можно заменить созданную функцию в существующем решении без модификации топологии печатной платы, поскольку функция Peripheral Pin Select (PPS) позволяет реализовать новую функцию на любом выводе чипа. К тому же созданный модуль функционирует как полностью автономная функция (свойство CIP), поскольку для поддержки непрерывной ее работы не требуется ресурсов ЦП, за исключением начальной установки и периодической регулировки коэффициента заполнения (рабочего цикла).
ЛИТЕРАТУРА
PIC16F18855 datasheet. – http://www.microchip.com/wwwproducts/en/PIC16F18855
MPLAB Code Configurator. – http://microchip.com/mcc
CIPs: www.microchip.com/cip
Л. Ди Джасио
Разработчикам встраиваемых систем доступны разнообразные продукты и решения, позволяющие реализовать все многообразие функций. Однако зачастую выбор оптимального решения в процессе работы над проектом может быть обусловлен необходимостью перехода на другую модель микроконтроллера. Микроконтроллеры PIC от Microchip отличаются такими усовершенствованными функциями, как переназначение выводов микросхемы и независимая от ядра периферия, которые предоставляют разработчику гибкие возможности модификации проектного решения. На примере создания ШИМ-функции рассмотрим, как без дополнительных внешних компонентов и необходимости изменения топологии печатной платы можно быстро синтезировать новую автономную функцию периферии микроконтроллера.
Введение
Программисты встраиваемых систем и программисты компьютерных систем общего назначения различаются тем, что первые имеют дело с невероятным разнообразием аппаратных средств. Они, как летчики-испытатели, тогда как обычные пилоты управляют одним и тем же самолетом зачастую по одному и тому же маршруту. Программисты встраиваемых систем наслаждаются разнообразием машин и конфигураций, которые приходится часто менять в целях оптимизации стоимости, скорости и удобства использования под влиянием рыночного спроса и / или желаний заказчиков. Эта работа не бывает скучной, однако требует от программиста значительных усилий и затрат времени на поиск оптимального решения. С одной стороны, разработчики встраиваемых систем стремятся быстрее опробовать новейшие и передовые продукты. С другой стороны, любые инновации сопровождаются обучением, поэтому программисты и разработчики хотят, чтобы все пользовались одними и теми же компилятором, библиотекой и набором инструментов, с которыми они уже знакомы.
На рынке представлен широчайший выбор микроконтроллеров, разработчикам встраиваемых систем доступно любое количество контактов, разрядов, любая архитектура и практически любая комбинация флеш-памяти и ОЗУ. Конкурентная борьба среди основных поставщиков микроконтроллеров в последние годы была сфокусирована на том, чтобы добавить функций чипу и еще больше расширить матрицу выбора. Сегодня для создания встраиваемых приложений важно, чтобы микроконтроллер был оснащен богатым набором периферии (функций).
Зачастую разработчики приступают к проекту с заданной моделью микроконтроллера, но вскоре понимают, что должны заменить ее другой прямо в середине проекта. И это случается как с ленивыми инженерами, которые вовремя не провели анализ, так и с теми, кто старательно готовился. Чаще это происходит из-за того, что в проекте нужно учитывать множество факторов, как в игре в шахматы. Разработчику может быть трудно прогнозировать, как периферийные функции будут взаимодействовать в приложении или как нужно модифицировать аппаратное решение, когда требования к проекту меняются (как всегда и случается) и впереди маячит срок сдачи проекта.
Смена модели микроконтроллера может оказаться наименьшим из зол, когда близкий аналог есть в том же семействе того же производителя. Сложнее, когда нужная опция недоступна, и вынужденный переход на другое семейство микроконтроллеров часто производит эффект домино, когда меняется цоколевка выводов микросхемы, а возможно, и другие периферийные функции.
Решение – независимая от ядра периферия
Оптимальный способ решения этих проблем – заранее планировать возможность их появления. В новейших семействах микроконтроллеров предусмотрены умные способы расположить в ином порядке выводы для каждой периферийной функции. Причем не изменить функции отдельного вывода, а переназначить выводы всех аналоговых и цифровых функций. Например, предусмотренная в 8-, 16- и 32-разрядных микроконтроллерах Microchip специальная функция Peripheral Pin Select (PPS) обеспечивает возможность использования каждого вывода микросхемы в качестве входа для любого количества устройств периферии (в некоторых моделях до 64 периферийных функций), а любым выходом периферии может быть назначено до 16 выводов микросхемы (в некоторых моделях до 32). Аналоговые входы АЦП можно таким же образом распределить среди большей части выводов микросхемы (например, до 35 из 40 выводов чипа).
Это хорошая страховка от возможной несовместимости выводов при переходе на другие модели, но все же качественно новое решение, реализованное в микроконтроллерах Microchip, – независимая от ядра периферия (Core Independent Peripherals – CIP). Причем основная цель создания CIP – снижение рабочей нагрузки центрального процессора микроконтроллера за счет автоматизации как можно большего количества низкоуровневых и координационных операций, которые обычно требуются периферийным функциям. Однако благодаря доступности дополнительных взаимосвязей и гибким возможностям, CIP – прекрасный способ решения проблемы перехода на другую модель микроконтроллера в середине работы над проектом.
Пример создания новой ШИМ-функции «из ничего»
Рассмотрим случай из практики, когда нужно было спроектировать усовершенствованную версию автомобильного датчика с несколькими таймерами, парой 10-разрядных ШИМ-модулей и аналоговым компаратором. Все эти функции доступны в недорогом 28-выводном микроконтроллере PIC16F1885. Разработчики быстро поняли, что в текущем проектном решении достигнуто ограничение по разрешению, для преодоления которого потребовался 12-разрядный (или более высокой разрядности) ШИМ-регистр. К сожалению, этой опции не было предусмотрено в данной модели микроконтроллера. В аналогичных 8-разрядных микроконтроллерах PIC с совместимым форм-фактором (и цоколевкой выводов) предлагалась слишком маленькая память программ либо намного более богатый набор периферии по более высокой цене. Все, что было нужно разработчикам, – дополнительный ШИМ-регистр с 12-разрядным или более высоким разрешением.
К счастью, ШИМ-функцию легко синтезировать на чипе при наличии некоторого количества конфигурируемых блоков и связующих логических схем. Любая ШИМ-функция может быть создана путем комбинации двух элементов: периодического импульсного сигнала и граничного счетчика. На рис. 1 показано, как можно комбинировать эти два элемента, чтобы получить прямоугольный сигнал с нужным периодом и коэффициентом заполнения (рабочим циклом).
Настройка временной диаграммы
Временную диаграмму можно реализовать с помощью любого стандартного таймера, поскольку он формирует периодический импульсный сигнал нужной частоты (в нашем случае порядка 500 Гц). Для данного приложения в качестве таймера подходит 8-разрядный базовый таймер / счетчик, который может работать совместно с другими функциями (ШИМ и др.). В данном случае использовался модуль Timer2 – 8-разрядный базовый таймер с регистром совпадения. Конфигурирование модуля Timer2 в качестве базового таймера требует инициализации всего пары регистров, как показано на рис. 2.
Традиционный путь разработки такой подпрограммы инициализации потребовал бы детального изучения документации к выбранному микроконтроллеру PIC и тщательной идентификации битовой комбинации для каждого регистра. Процесс может занять длительное время и подвержен ошибкам даже в случае простой периферии. Сегодня доступен более оптимальный путь – использовать MPLAB Code Configurator, быстрый инструмент разработки (плагин), интегрированный в среду MPLAB X IDE, который позволяет генерировать код (например, подпрограмму инициализации, подобную приведенной на рис. 2) с помощью всего нескольких кликов мыши. По сути, этот инструмент часто используется для исследования функций устройств и экспериментов со множеством опций, реализованных в независимой от ядра периферии.
На рис. 3 показаны доступные разработчику блоки и поля ввода диалогового окна MPLAB Code Configurator, с помощью которых можно выбрать все опции модуля Timer2.
Конфигурирование граничного счетчика
Граничный счетчик – немного более сложная функция. После запуска таймер должен досчитать до некоторого граничного значения, сгенерировать импульс и остановиться. Он выполнит сброс и вновь начнет отсчет, только если на вход поступит следующий сигнал запуска. Эту функцию часто называют мультивибратором с повторным запуском, в литературе по микроконтроллерам PIC функция известна как аппаратный граничный таймер (Hardware Limit Timer – HLT).
К сожалению, для реализации 12-разрядной ШИМ-функции (или более высокой разрядности) типовой HLT-таймер, доступный на микроконтроллере PIC, не подойдет. В современных микроконтроллерах PIC HLT-таймеры обеспечивают только 8-разрядные счетчики. Однако другое, менее известное, периферийное устройство может обеспечить нужное разрешение.
Это таймер измерения сигналов (Signal Measurement Timer – SMT), блок-схема которого показана на рис. 4. Если HLT – таймер с одним дополнительным входом запуска / сброса, то SMT – таймер с двумя такими входами. Есть ряд интересных способов комбинирования входов для того, чтобы обеспечить измерения таких параметров сигнала, как время, частота, коэффициент заполнения – отсюда и название функции.
В документации к микроконтроллеру представлен список из 11 режимов измерения, что может напугать неопытного пользователя и сделать SMT самым непонятным и недоиспользованным устройством среди CIP-периферии. Один из этих режимов – режим оконных измерений (Window Measurement Mode) – фактически превращает SMT в HLT. По сути, SMT – это очень крупный HLT-таймер, поскольку содержит 24-разрядный счетчик и регистр периода соответствующего размера. Конфигурирование SMT-таймера (SMT1) аналогичным образом можно значительно упростить благодаря использованию инструмента MCC, как показано на рис. 5.
С помощью нескольких кликов мыши можно автоматически сгенерировать функцию инициализации (рис. 6), аналогичную функции инициализации TMR2 (см. рис. 2).
Конфигурирование S / R-триггера
Для комбинации функций базового таймера и граничного счетчика можно использовать триггер установки / сброса (S / R-триггер). Эта функция, доступная на многих микроконтроллерах PIC, за последние пять лет была интегрирована в качестве одной из восьми функций в конфигурируемые логические ячейки (Configurable Logic Cell – CLC) – один из основных элементов CIP-периферии.
На рис. 7 показано, как эти два сигнала можно подать на входы S / R-триггера, чтобы получить ШИМ-выход (на рисунке представлено диалоговое окно MPLAB Code Configurator для конфигурирования CLC-модулей).
Используется быстрый инструмент разработки (MCC) или конфигурируется периферия вручную, результат один и тот же – компактная функция инициализации, содержащая всего несколько операций присваивания для соответствующих регистров периферии (рис. 8).
Поскольку микроконтроллеры PIC16F188xx в нашем приложении оснащены двумя SMT-модулями, можно было синтезировать не один, а два новых ШИМ-модуля с требуемым удвоенным разрешением.
Дополнительные несколько строк кода завершат конфигурирование новой ШИМ-функции и позволят контролировать ее коэффициент заполнения (рабочий цикл). На рис. 9 показано, как можно реализовать инициализацию периферии путем простого связывания функций инициализации трех используемых устройств периферии. Запуск и остановка нового ШИМ-модуля теперь управляется граничным счетчиком (SMT1), а коэффициент заполнения контролируется 24-разрядным регистром периода SMT. В этой процедуре перед изменением значения коэффициента заполнения был добавлен простой цикл синхронизации, чтобы избежать выбросов на выходе.
Эффективное разрешение ШИМ-модуля
Среди неопытных пользователей распространено ложное представление, что разрешение ШИМ-регистра определяется числом разрядов таймера, управляющего длительностью импульса в состоянии «включено» (коэффициентом заполнения). Согласно этому определению нам нужно было бы создать 24-разрядную ШИМ-функцию, но это не так.
Период и коэффициент заполнения ШИМ-функции – это не полностью независимые величины: как можно было увидеть выше, они контролируются таймерами / счетчиками и связаны с тактовым сигналом периферии микроконтроллера.
Для любого заданного тактового сигнала периферии счетчик, управляющий временем включения, способен досчитать только до значения MaxCount, прежде чем повторится очередной период временной диаграммы. В этой точке ШИМ-регистр достигнет 100%-ного коэффициента заполнения и дополнительные разряды в регистре не будут использоваться. Эффективное разрешение созданной в примере ШИМ-функции определяется по формуле:
MaxCount = Tperiod · Fclock.
В нашем случае для Tperiod = 2,048 мс и тактовой частоты периферии, равной 32 МГц, (SMT-триггер можно синхронизировать от максимальной частоты системного генератора, не ограниченной тактовой частотой команд ЦП, деленной на 4, как для основной части периферии микроконтроллера PIC) MaxCount = 65,356.
Логарифм по основанию 2 от величины MaxCount равен эффективному разрешению ШИМ-функции в битах, которая в данном случае равна 16 битам.
Результат подтверждает, что новый ШИМ-модуль действительно отличается более высоким разрешением, чем стандартные 10-разрядные ШИМ-модули микроконтроллеров PIC, и наша цель даже превышена.
Заключение
Отметим, что речь идет о создании новой эффективной 16-разрядной ШИМ-функции без использования дополнительных внешних компонентов. Мы просто сконфигурировали, соединили и повторно использовали небольшое количество функций, доступных на чипе. Более того, можно заменить созданную функцию в существующем решении без модификации топологии печатной платы, поскольку функция Peripheral Pin Select (PPS) позволяет реализовать новую функцию на любом выводе чипа. К тому же созданный модуль функционирует как полностью автономная функция (свойство CIP), поскольку для поддержки непрерывной ее работы не требуется ресурсов ЦП, за исключением начальной установки и периодической регулировки коэффициента заполнения (рабочего цикла).
ЛИТЕРАТУРА
PIC16F18855 datasheet. – http://www.microchip.com/wwwproducts/en/PIC16F18855
MPLAB Code Configurator. – http://microchip.com/mcc
CIPs: www.microchip.com/cip
Отзывы читателей