Широтно-Импульсная модуляция

Views: 3511

PIC-контроллеры имеют на своем борту несколько CCP и ECCP модулей которые позволяют удовлетворить практически все варианты по применению ШИМ. В этом примере показано как реализовать простой одноканальный ШИМ и как оперативно управлять длительностью импульса.

Схема платы ИЛЛИССИ-4B где можно получить выход ШИМ.

ILLISSI_PWM_01

Для реализации ШИМ необходимо использовать CCPх модуль и таймер TIMER2(4/6). Блок схема реализации ШИМ.

ILLISSI_PWM_02

Таймер предназначен для задания периода (частоты) работы ШИМ. CCP модуль для задания длительности импульса и формирование на выходе контроллера сигнала ШИМ.

Создание стандартного одноканального ШИМ.

Стандартный режим ШИМ позволяет генерировать Широтно-импульсное модуляцию (ШИМ) на контакте CCPx с разрешением до 10 разрядов. Период, рабочий цикл, и разрешение формируются при использовании следующих регистров:
• Регистр PRx
• Регистр TxCON
• Регистр CCPRxL
• Регистр CCPxCON

Последовательность настройки модуля CCP для формирования ШИМ следующая:

  1. Отключите выходной драйвер контакта CCPx, установив бит TRIS для соответствующего контакта.
  2. Выбрать соответствующий 8-разрядный таймер TimerX, (Timer2, Timer4 или Timer6), чтобы использоваться для генерации ШИМ устанавливая биты CxTSEL <1:0> в регистре Регистр CCPTMRSx.
  3. Загрузить регистр PRx для выбранного TimerX со значением периода ШИМ.
  4. Сконфигурируйте модуль CCP для режима ШИМ загружая в регистр CCPxCON соответствующее значение.
  5. Загрузите регистр CCPRxL и биты DCxB <1:0> регистра CCPxCON, значением рабочего цикла ШИМ.
  6. Соответственно настроить и включить 8-разрядный таймер TimerX: Если предполагается использовать прерывания от таймера – очистите бит флага прерывания TMRxIF в регистрах PIR2 или PIR4. Настройте предделитель (и если необходимо постделитель) таймера TxCON используя биты TxCKPS.
  7. Включить таймер, установив бит TMRxON в регистре TxCON. Активировать выходной контакт ШИМ: Ожидайте, пока будет установлен бит TMRxIF в регистре PIR2 или PIR4, а затем активировать выход ШИМ очистив соответствующий бит в регистре TRIS.

Период сигнала ШИМ можно рассчитать по формуле

PWM Period = [(PRx) + 1] * 4 * TOSC * (TMRx значение предделителя).

где, TOSC=1/Fosc.

Для нашей платы с тактовой 64 мГц мы получим PWM Period = (255+1)*4*(1/64000000)*16 = 0,000256 сек. Или 256 микросекунд. Для расчета можно загрузить файл в формате ME Setting_the_frequency_of_the_timer_TMP2.

Длительность импульса ШИМ можно рассчитать по формуле:

Pulse Width = (CCPRxL:CCPxCON<5:4>)* TOSC * (TMRx Prescale Value)

Примечание: обратите внимание на разрешение ШИМ, для этого необходимо обратиться к техническому описанию используемого контроллера, но хотелось бы сказать, что это актуально если необходимо использовать ШИМ для работы на более высоких частотах.


Программная реализация.

В нашем примере мы получим 10 разрядный ШИМ, это значит, что значение будет меняться в пределах от 0 до 1023 для периода от 0 до 100%. При “0” будет на выходе низкий уровень, при 1023 будет только высокий.

Настройка модуля ECCP1 в стандартном режиме.

 CCP1CON=0b00001100; // настройка модуля в режиме шим
 T2CON=0b01111110; // настройка таймера
 PR2=255; // задание периода ШИМ
 CCPR1L=0; // очистка регистра длительности = 0

Для формирование длительности выберем две переменные основная в которой будем задавать длительность импульса

int pwm_reg; // основной регистр для формирования длительности

Дополнительный для организации обработки данных для загрузки в регистры CCP модуля

char pwm_reg2;  // дополнительный регистр для обработки

Значение ширины импульса должна быть от 0-1023. Для загрузки в модуль CCP необходимо старшие 8 бит значения ШИМ загружать в регистр CCPR1L. Младшие два бита необходимо загрузить в биты 4 и 5 регистра CCP1CON. Один из вариантов как это можно сделать:

 pwm_reg2=pwm_reg<<6;    // 
 pwm_reg2=pwm_reg2>>2;   // 
 CCP1CON &= 0b11001111;  // 
 CCP1CON |= pwm_reg2;    // 
 CCPR1L=pwm_reg>>2;      //

Для тестирования модуля ШИМ будем использовать кнопки управления платы ИЛЛИССИ-4С. Они подключены к выводам Порта B RB4 – RB7.

ILLISSI_PWM_05


Для индикации подключим к выходу CCP1 светодиод, для демонстрации работы ШИМ (это восьмой контакт на вернем дополнительном разъеме).

Демонстрация работы

Кнопка 2 используется для переключения режима демонстрации с ручного на автоматический. Кнопка 3 и 4 для ручного увеличения или уменьшения длительности.


Загрузка демонстрационного проекта.

Версия – 1.1[wpdm_file id=71 template=”link-template-calltoaction3.php”]



Это может быть интересно

  • Цифровой спидометр для автомобиляЦифровой спидометр для автомобиля
    Views: 10319  Универсальность печатной платы ch-c0030pcb позволяет создавать на её основе разнообразные устройства. Одним из таких устройств является электронный спидометр для автомобиля, в котором можно задать два компаратора скорости, например,  для …
  • Toyota Auto Fader – Модуль включения усилителяToyota Auto Fader – Модуль включения усилителя
    Views: 2110 Toyota Auto Fader – Модуль включения усилителя. Часто автолюбители прибегают к замене штатного головного устройства на универсальное мультимедийное, в котором значительно расширены функциональные возможности. Если возникает желание оставить …
  • OLED RET012864E/REX012864JOLED RET012864E/REX012864J
    Views: 1605 RET012864E/REX012864J ОЛЕД индикатор производитель Raystar-Optronics приобретался в http://www.microchip.ua/ к сожалению никакой информации на сайте поставщика нет. Поэтому решил работу с этой версией индикатора на драйвере SSD1305 предоставить на своем сайте. Так как …
  • Проект с использованием MCC часть 12-2Проект с использованием MCC часть 12-2
    Views: 1220 Настало время для изучения шины I2C. Изучать будем на примере работы с индикатором RET012864E. Что изменили со старой схемы: В прошлой теме я затупил и не добавил подтягивающие резисторы …
  • Проект с использованием MCC часть 06Проект с использованием MCC часть 06
    Views: 1493 Изменим схему следующим образом добавим две тактовые кнопки BT1 и BT2. Теперь переключимся на конфигурацию выводов, для этого сделаем двойной клик в окне Ресурсы проекта на Pin Module. …
  • Обновление ESP8266 c ESPFlashDownloadTool_v3.6.3Обновление ESP8266 c ESPFlashDownloadTool_v3.6.3
    Views: 3732 Технология обновления следующая: Загружаем программу со страницы espressif.com. Разархивируем. Где находятся файлы, для прошивки? Заходим в каталоги Подключаем по схеме в статье WiFi ESP8266 (замыкаем BT2, перемычка). Запускаем программу, …
  • TM1650 драйвер LED семисегментного индикатораTM1650 драйвер LED семисегментного индикатора
    Views: 18491 UPDATES 2025/10/10 Китайский производитель Shenzhen Titan Micro Electronics Co., Ltd.  Выпускает широкую линейку драйверов управления светодиодными дисплеями, которые позволяют разгрузить микроконтроллер для основной работы, главная особенность этих драйверов …
  • NS108-5050-16bit от NewstarNS108-5050-16bit от Newstar
    Views: 722 Кто уже использует в своих проектах адресуемые светодиоды хорошо знакомы с такими как WS2812 и им подобные. Эти светодиоды для управления используют однопроводную шину. Из-за этого пропускная способность …
  • Altium Designer first projectAltium Designer first project
    Views: 546 Эта статья подразумевает, что у вас установлен и настроен Altium Designer как описано в статье  Altium Designer my setup system and project structure.  Обратите внимание! Библиотека постоянно обновляется, …
  • Четырех канальный терморегулятор ch-4000Четырех канальный терморегулятор ch-4000
    Views: 3432  Четыре независимых канала регулирования температуры, одновременно можно подключить 16 датчиков температуры DS18B20 с удалением до трехсот метров. Можно для регулировки выбрать любой датчик, подключенный к устройству. Каждый канал может работать …


 

Поделись этим!