- Основы сигнала ШИМ
- Настройка оборудования и требования
- Схема для регулировки яркости светодиодов микроконтроллера Nuvoton N76E003
- Контакты PWM на микроконтроллере N76E003 Nuvoton
- Регистры и функции ШИМ в микроконтроллере N76E003 Nuvoton
- Режимы работы ШИМ в микроконтроллере Nuvoton N6E003
- Программирование Nuvoton N76E003 для PWM
- Прошивка кода и проверка вывода
Широтно-импульсная модуляция (ШИМ) - широко используемый метод в микроконтроллерах для создания непрерывного импульсного сигнала с определенной частотой и рабочим циклом. Короче говоря, ШИМ - это изменение ширины импульса при постоянной частоте.
Сигнал PWM в основном используется для управления серводвигателем или яркостью светодиода. Кроме того, поскольку микроконтроллеры могут обеспечивать только логический 1 (высокий) или логический 0 (низкий) на своих выходных контактах, он не может обеспечивать изменяющееся аналоговое напряжение, если не используется ЦАП или цифро-аналоговый преобразователь. В таком случае микроконтроллер может быть запрограммирован на вывод ШИМ с переменным рабочим циклом, который затем может быть преобразован в изменяющееся аналоговое напряжение. Ранее мы использовали периферийное устройство PWM и во многих других микроконтроллерах.
- ARM7-LPC2148 PWM Учебное пособие: Управление яркостью светодиода
- Широтно-импульсная модуляция (ШИМ) с использованием MSP430G2: управление яркостью светодиода
- Генерация ШИМ с использованием микроконтроллера PIC с MPLAB и XC8
- Широтно-импульсная модуляция (PWM) в STM32F103C8: управление скоростью вентилятора постоянного тока
- Генерация сигналов ШИМ на выводах GPIO микроконтроллера PIC
- Учебное пособие по Raspberry Pi PWM
- Учебное пособие по ШИМ с ESP32
В этом руководстве мы подключим светодиод, который будет управляться с помощью этого ШИМ-сигнала от блока микроконтроллера N76E003. Мы оценим, какое оборудование нам требуется и как нам следует программировать наш микроконтроллер. Перед этим давайте разберемся с некоторыми основами сигнала ШИМ.
Основы сигнала ШИМ
На изображении ниже показан постоянный сигнал ШИМ.
Изображение выше - это не что иное, как постоянный прямоугольный сигнал с одинаковым временем включения и тем же временем выключения. Предположим, общий период сигнала составляет 1 секунду. Таким образом, время включения и выключения составляет 500 мс. Если к этому сигналу подключен светодиод, он загорится на 500 мс и погаснет на 500 мс. Следовательно, в перспективе светодиод будет гореть с половиной фактической яркости, если он будет включен на прямой сигнал 5 В без какого-либо времени выключения.
Теперь, как показано на изображении выше, при изменении рабочего цикла светодиод загорится с 25% фактической яркости, используя тот же принцип, что и обсуждался ранее. Если вы хотите узнать больше и узнать о широтно-импульсной модуляции (ШИМ), вы можете прочитать связанную статью.
Настройка оборудования и требования
Поскольку требование этого проекта - управление светодиодами с помощью ШИМ. Светодиод должен быть подключен к N76E003. Поскольку на плате разработки N76E003 имеется светодиод, он будет использоваться в этом проекте. Никаких других компонентов не требуется.
Не говоря уже о том, что нам нужна отладочная плата на базе микроконтроллера N76E003, а также программатор Nu-Link. Если программатор не используется в качестве источника питания, может потребоваться дополнительный блок питания на 5 В.
Схема для регулировки яркости светодиодов микроконтроллера Nuvoton N76E003
Как видно на схеме ниже, тестовый светодиод находится внутри платы разработки и подключен к порту 1.4. В крайнем левом углу показано подключение интерфейса программирования.
Контакты PWM на микроконтроллере N76E003 Nuvoton
N76E003 имеет 20 контактов, 10 из которых могут использоваться в качестве ШИМ. На изображениях ниже показаны контакты ШИМ, выделенные в красном квадрате.
Как мы видим, выделенные выводы ШИМ могут использоваться и для других целей. Однако это другое назначение выводов не будет доступно, если выводы настроены для вывода ШИМ. Контакт 1.4, который используется в качестве выходного контакта ШИМ, потеряет остальные функции. Но это не проблема, поскольку для этого проекта не требуется других функций.
Причина выбора контакта 1.4 в качестве выходного контакта заключается в том, что встроенный тестовый светодиод подключен к этому контакту на плате разработки, поэтому нам не требуются внешние светодиоды. Однако в этом микроконтроллере из 20 контактов 10 контактов могут использоваться в качестве выходного контакта ШИМ, а любые другие контакты ШИМ могут использоваться для целей, связанных с выходом.
Регистры и функции ШИМ в микроконтроллере N76E003 Nuvoton
N76E003 использует системные часы или переполнение Таймера 1, деленное на тактовую частоту ШИМ, с возможностью выбора предделителя от 1/1 до 1/128. Период ШИМ может быть установлен с помощью 16-битного регистра периода PWMPH и регистра PWMPL.
Микроконтроллер имеет шесть отдельных регистров ШИМ, которые генерируют шесть сигналов ШИМ, называемых PG0, PG1, PG2, PG3, PG4 и PG5. Однако период одинаков для каждого канала ШИМ, потому что они используют один и тот же 16-разрядный счетчик периода, но рабочий цикл каждого ШИМ может отличаться от других, поскольку каждый ШИМ использует свой 16-разрядный регистр рабочего цикла, названный как {PWM0H, PWM0L}, {PWM1H, PWM1L}, {PWM2H, PWM2L}, {PWM3H, PWM3L}, {PWM4H, PWM4L} и {PWM5H, PWM5L}. Таким образом, в N76E003 шесть выходов ШИМ могут генерироваться независимо с различными рабочими циклами.
В отличие от других микроконтроллеров, включение ШИМ не приводит к автоматической установке контактов ввода-вывода на их выход ШИМ. Таким образом, пользователю необходимо настроить режим вывода ввода / вывода.
Итак, что бы ни требовалось для приложения, первым шагом является определение или выбор одного, двух или даже более двух выводов ввода-вывода в качестве вывода ШИМ. После выбора одного из них, выводы ввода / вывода должны быть установлены как двухтактный или квазидвунаправленный для генерации сигнала ШИМ. Это можно выбрать с помощью регистров PxM1 и PxM2. Эти два регистра устанавливают режимы ввода / вывода, где x означает номер порта (например, для порта P1.0 регистр будет P1M1 и P1M2, для P3.0 это будет P3M1 и P3M2 и т. Д.)
Конфигурацию можно увидеть на изображении ниже -
Затем следующим шагом будет включение ШИМ на этом конкретном выводе (ах) ввода / вывода. Для этого пользователю необходимо установить регистры PIOCON0 или PIOCON1. Регистр зависит от отображения контактов, поскольку PIOCON0 и PIOCON1 управляют разными контактами в зависимости от сигналов ШИМ. Конфигурацию этих двух регистров можно увидеть на изображении ниже.
Как мы видим, указанный выше регистр управляет 6 конфигурациями. В остальном используйте регистр PIOCON1.
Таким образом, указанный выше регистр контролирует остальные 4 конфигурации.
Режимы работы ШИМ в микроконтроллере Nuvoton N6E003
Следующим шагом будет выбор режимов работы ШИМ. Каждый ШИМ поддерживает три режима работы - независимый, синхронный и режим включения мертвого времени.
Независимый режим обеспечивает решение, при котором шесть сигналов ШИМ могут генерироваться независимо. Это требуется максимум раз, когда необходимо включить и контролировать операции, связанные со светодиодами или зуммеры.
В синхронном режиме устанавливает PG1 / 3/5 в том же выходе ШИМ-в фазе, так же, как pg0 / 2/4, где PG0 / 2/4 обеспечивает независимые выходные сигналы ШИМ. В основном это требуется для управления трехфазными двигателями.
Режим вставки мертвого времени немного сложен и применяется в реальных двигателях, особенно в промышленных приложениях. В таких приложениях дополнительный выход PWM должен быть вставлен «мертвого времени», чтобы предотвратить повреждение устройств переключения мощности, таких как GPIB. Конфигурации установлены в этом режиме таким образом, что PG0 / 2/4 обеспечивает выходные сигналы ШИМ таким же образом, как и независимый режим, но PG1 / 3/5 обеспечивает выход «сдвинутых по фазе сигналов ШИМ» для PG0 / 2/4 соответственно. и игнорировать регистр дежурства PG1 / 3/5.
Выше трех режимов можно выбрать, используя конфигурацию регистра ниже:
Следующая конфигурация - это выбор типов ШИМ с помощью регистра PWMCON1.
Итак, как мы видим, доступны два типа ШИМ, которые можно выбрать с помощью указанного выше регистра. При выравнивании по фронту 16-битный счетчик использует операцию однократного наклона, отсчитывая от 0000H до установленного значения {PWMPH, PWMPL}, а затем начиная с 0000H. Форма выходного сигнала выровнена по левому краю.
Но в режиме с выравниванием по центру 16-битный счетчик использует операцию двойного наклона, считая от 0000H до {PWMPH, PWMPL}, а затем снова переходит от {PWMPH, PWMPL} к 0000H путем обратного отсчета. Выход выровнен по центру, и это полезно для генерации неперекрывающихся сигналов. Теперь, наконец, операции управления ШИМ, которые можно проверить в следующих регистрах:
Чтобы установить источник синхронизации, используйте регистр управления синхронизацией CKCON.
Выходной сигнал ШИМ также можно замаскировать с помощью регистра PMEN. Используя этот регистр, пользователь может замаскировать выходной сигнал 0 или 1.
Далее идет регистр управления ШИМ-
Вышеупомянутый регистр полезен для запуска ШИМ, загрузки нового периода и рабочей нагрузки, управления флагом ШИМ и очистки счетчика ШИМ.
Соответствующие битовые конфигурации показаны ниже:
Чтобы установить делитель тактовой частоты, используйте регистр PWMCON1 для делителя тактовой частоты ШИМ. Пятый бит используется для группового ШИМ с включенным групповым режимом и обеспечивает одинаковый рабочий цикл для первых трех пар ШИМ.
Программирование Nuvoton N76E003 для PWM
Кодирование простое, и полный код, используемый в этом руководстве, можно найти внизу этой страницы. Светодиод подключается к выводу P1.4. Таким образом, вывод P1.4 необходимо использовать для вывода ШИМ.
В основной программе настройки выполняются в соответствующем порядке. В приведенных ниже строках кодов устанавливается ШИМ и настраивается вывод P1.4 как выход ШИМ.
P14_PushPull_Mode;
Это используется для установки контакта P1.4 в двухтактный режим. Это определено в библиотеке Function_define.h как-
#define P14_PushPull_Mode P1M1 & = ~ SET_BIT4; P1M2- = SET_BIT4 PWM1_P14_OUTPUT_ENABLE;
Следующие строки используются для включения ШИМ на выводе P1.4. Это также определено в библиотеке Function_define.h как-
#define PWM1_P14_OUTPUT_ENABLE BIT_TMP = EA; EA = 0; TA = 0xAA; TA = 0x55; SFRS- = 0x01; PIOCON1- = 0x02; TA = 0xAA; TA = 0x55; SFRS & = 0xFE; EA = BIT_TMP //P1.4 как Включение выхода PWM1 PWM_IMDEPENDENT_MODE;
Приведенный ниже код используется для установки ШИМ в независимый режим. В библиотеке Function_define.h он определяется как:
#define PWM_IMDEPENDENT_MODE PWMCON1 & = 0x3F PWM_EDGE_TYPE;
Затем мы должны установить выход PWM типа EDGE. В библиотеке Function_define.h он определяется как:
#define PWM_EDGE_TYPE PWMCON1 & = ~ SET_BIT4 set_CLRPWM;
Затем мы должны очистить значение счетчика ШИМ, которое доступно в библиотеке SFR_Macro.h -
#define set_CLRPWM CLRPWM = 1
После этого в качестве тактовых импульсов Fsys выбирается тактовая частота ШИМ, а коэффициент деления равен 64.
PWM_CLOCK_FSYS; PWM_CLOCK_DIV_64;
Оба определены как:
#define PWM_CLOCK_FSYS CKCON & = 0xBF #define PWM_CLOCK_DIV_64 PWMCON1- = 0x06; PWMCON1 & = 0xFE PWM_OUTPUT_ALL_NORMAL;
Следующая строка кода используется для маскировки выходного сигнала ШИМ с помощью 0, определенного как:
#define PWM_OUTPUT_ALL_NORMAL PNP = 0x00 set_PWM_period (1023);
Затем мы должны установить время периода сигнала ШИМ. Эта функция устанавливает период в регистрах PWMPL и PWMPH. Поскольку это 16-битный регистр, функция использует метод битового сдвига для установки периода ШИМ.
void set_PWM_period (значение типа int без знака) { PWMPL = (значение & 0x00FF); PWMPH = ((значение & 0xFF00) >> 8); }
Однако, кроме 1023 и 8-битного периода, пользователи также могут использовать другие значения. Увеличение периода приводит к плавному затемнению или выцветанию.
set_PWMRUN;
Это запустит ШИМ, который определен в библиотеке SFR_Macro.h как-
#define set_PWMRUN PWMRUN = 1
Затем в цикле while светодиод включается и постоянно гаснет.
while (1) { for (значение = 0; значение <1024; значение + = 10) { set_PWM1 (значение); Timer1_Delay10ms (3); } for (значение = 1023; значение> 0; значение - = 10) { set_PWM1 (значение); Timer1_Delay10ms (2); } } }
Рабочий цикл устанавливается функцией set_PWM1 ();, которая устанавливает рабочий цикл в регистрах PWM1L и PWM1H.
void set_PWM1 (значение типа int без знака) { PWM1L = (значение & 0x00FF); PWM1H = ((значение & 0xFF00) >> 8); set_LOAD; }
Прошивка кода и проверка вывода
Как только код будет готов, просто скомпилируйте его и загрузите в контроллер. Если вы новичок в этой среде, ознакомьтесь с руководством по началу работы с Nuvoton N76E003, чтобы изучить основы. Как видно из результата ниже, код вернул 0 предупреждений и 0 ошибок и мигал с использованием метода мигания по умолчанию Keil. Приложение начинает работать.
Перестройка началась: Проект: PWM Rebuild цели 'Target 1' монтажник STARTUP.A51… компиляция main.c… компиляция Delay.c… связывающая… Программа Размер: данные = 35,1 XDATA = 0 кода = 709, создающих шестнадцатеричный файл из ". \ Objects \ pwm"… ". \ Objects \ pwm" - 0 ошибок, 0 предупреждений. Истекшее время сборки: 00:00:05
Оборудование подключено к источнику питания, и оно работало, как ожидалось. То есть яркость встроенного светодиода уменьшается, а затем увеличивается, указывая на изменение рабочего цикла ШИМ.
Полную работу этого руководства можно также найти в видео по ссылке ниже. Надеюсь, вам понравилось это руководство и вы узнали что-то полезное, если у вас есть какие-либо вопросы, оставьте их в разделе комментариев или вы можете использовать наши форумы для других технических вопросов.