Содержание
- Что такое dspic30f и dspic33f?
- Пример кода ШИМ для dspic30f и dspic33f
- Важные регистры, используемые для инициализации ШИМ в dspic
- 1: Выберите режим работы ШИМ
- 2: Рассчитайте базовый период ШИМ
- 3: Рассчитайте значение рабочего цикла
- ШИМ в режиме обратного отсчета
- ШИМ в бесплатном режиме
- Вставка мертвого времени в dspic
- ШИМ-прерывание в dspic30f и dspic33f
- Постскейлер прерывания PWM
- Вопросы и Ответы
Автор завершил свой последний год инженерного проекта с микроконтроллерами dsPic, получив обширное представление об этих устройствах.
Что такое dspic30f и dspic33f?
Микроконтроллеры серий dspic30f и dspic33f представляют собой усовершенствованные 16-разрядные процессоры от Microchip, которые можно использовать для различных приложений ШИМ. Это пошаговое руководство научит вас настраивать модули ШИМ в dspic для получения желаемого вывода ШИМ.
Этот пример кода можно использовать для инициализации всех регистров и битов конфигурации, необходимых для получения желаемого выходного сигнала ШИМ.
Пример кода ШИМ для dspic30f и dspic33f
void PWM_Init (void) {TRISE = 0x00; // убедитесь, что выводы ШИМ установлены как выходы PORTE = 0x00; // очищаем выходы PTCONbits.PTOPS = 1; // ШИМ таймер пост-масштабирования PTCONbits.PTCKPS = 0; // Предварительное масштабирование таймера ШИМ PTCONbits.PTMOD = 2; // ШИМ постоянно работает в режиме «вверх-вниз» PTMR = 0; // Значение счетчика ШИМ, начало с 0 PTPER = 19999; // Базовый период ШИМ PWMCON1bits.PMOD3 = 0; // ШИМ в дополнительном режиме PWMCON1bits.PMOD2 = 0; // ШИМ в дополнительном режиме PWMCON1bits.PMOD1 = 0; // ШИМ в дополнительном режиме PWMCON1bits.PEN3H = 1; // Вывод высокого уровня PWM включен PWMCON1bits.PEN2H = 1; // Вывод высокого уровня PWM включен PWMCON1bits.PEN1H = 1; // Вывод высокого уровня PWM включен PWMCON1bits.PEN3L = 1; // Вывод низкого уровня ШИМ включен (управление направлением позже?) PWMCON1bits.PEN2L = 1; // Вывод низкого уровня ШИМ включен (управление направлением позже?) PWMCON1bits.PEN1L = 1; // Вывод низкого уровня ШИМ включен (управление направлением позже?) // PWMCON2 = 0x0000; // информация об обновлении ШИМ DTCON1bits.DTAPS = 0; // Устройство предварительного масштабирования мертвого времени DTCON1bits.DTA = 59; // Значение DeadTime для 4 мкс. // FLTACON = 0x0000; // Ошибка A Control // OVDCON = 0x0000; // Отмена управляющей информации // Рабочий цикл имеет максимальное значение 2xPeriod, поскольку выход // может измениться при нарастании или спаде Tcy PDC1 = 19999; // Регистр рабочего цикла ШИМ №1 (11 бит) PDC2 = 19999; // Регистр рабочего цикла ШИМ №2 (11 бит) PDC3 = 19999; // Регистр рабочего цикла ШИМ №3 (11 бит) PTCONbits.PTEN = 1; // Включить базу времени PWM! }
Важные регистры, используемые для инициализации ШИМ в dspic
регистр | Функция |
---|---|
PTPER | Регистр периода времени ШИМ содержит значение временной базы. |
PDC | Регистр рабочего цикла ШИМ хранит значение рабочего цикла. |
PTCON | Регистры конфигурации ШИМ имеют биты конфигурации. |
PTCON1 | Регистры конфигурации ШИМ имеют биты конфигурации. |
DTCON1 | Регистр конфигурации мертвого времени. |
ПТМР | Обычно это значение равно нулю. |
1: Выберите режим работы ШИМ
Это делается с помощью битов конфигурации PTMOD в регистре PTCON, как показано в строке 8 нашего кода.
PTMOD | Режим |
---|---|
11 | Непрерывный режим Up / Down с прерываниями для двойного обновления PWM |
10 | Режим непрерывного счета вверх / вниз |
01 | Режим одиночного события |
00 | Автономный режим |
2: Рассчитайте базовый период ШИМ
Базовый период PWM можно рассчитать с помощью формулы, приведенной ниже:
Где:
1 / Tcy = 4 / (Частота генератора * PLLx)
Давайте рассчитаем это для периода времени 1 мс. Частота генератора - 10 МГц, ФАПЧ - x8.
Решение для PTPER дает значение 19 999, которое затем загружается в регистр PTPER в строке 12.
- PTPER может быть загружен с максимальным значением 32 768.
- Если рассчитанное значение больше этого, то следует отрегулировать предварительный делитель.
3: Рассчитайте значение рабочего цикла
Значение рабочего цикла рассчитывается по той же формуле, что и для расчета значения временной развертки (PTPER), за исключением того, что вместо базового периода времени сохраняется требуемое максимальное время импульса. После решения для PTPER ответ:
- Умножить на 2 и
- Загружается в регистр PDC, как показано в строке 35.
В этом примере для 50% рабочего цикла 0,5 мс сохраняется вместо 1 мс в приведенной выше формуле. Решение для PTPER дает 9 999. Значение, загруженное в регистр PDC, - 19 999.
Выход ШИМ, полученный с этой конфигурацией, показан ниже:
ШИМ в режиме обратного отсчета
Режим счета вверх-вниз дает ШИМ, который выровнен по центру. Это особенно полезно в приложениях с векторным управлением.
- В этом режиме развертка времени ШИМ вдвое больше, чем рассчитанная для автономного режима. Например, PTPER = 19,999 даст период 2 мс, а не 1 мс.
- То же самое и со значениями рабочего цикла в регистрах PDC.
ШИМ в бесплатном режиме
Бесплатный режим - уникальная особенность серий dspic30f и dspic33f. Это позволяет нам настроить два канала ШИМ в дополнительном режиме так, чтобы выходной сигнал одного канала был точно противоположен выходному сигналу другого канала.
Чтобы настроить это,
- Бит PMOD в регистре PTCON1 необходимо записать с нулем, как указано в строках 14–16.
PMOD | Режим |
---|---|
0 | Бесплатный режим |
1 | Независимый режим |
- Бит разрешения высокого уровня ШИМ или PENxH и соответствующий бит низкого разрешения ШИМ PENxL должны быть записаны с единицей, как указано в строках 17–22.
Вставка мертвого времени в dspic
Когда ШИМ настроен в дополнительном режиме, мертвое время может быть легко вставлено между двумя дополнительными каналами, настроив регистр DTCON1.
- Бит DTAPS используется для выбора предделителя мертвого времени.
- В DTA загружается 6-битовое целое число, чтобы определить продолжительность вставляемого мертвого времени. Его можно рассчитать по той же формуле расчета значения PTPER, приведенной выше.
- Поскольку это всего лишь 6-битное значение, оно не может быть больше 64. Если после расчета появляется большее значение, необходимо настроить предварительный делитель.
- Строка 27 показывает значение 59, рассчитанное для 4 микросекунд, при этом предварительный делитель остается на нуле.
ШИМ-прерывание в dspic30f и dspic33f
Прерывание PWM доступно в dspic30f и dspic33f, которое может запускаться в различных местах во время цикла PWM.
Режим | Точка срабатывания прерывания |
---|---|
Режим непрерывного счета вверх-вниз с прерываниями для двойного обновления | В начале и в конце каждого цикла ШИМ. Постскейлер в этом режиме не действует. |
Непрерывный режим подсчета вверх-вниз | В начале каждого цикла ШИМ. |
Режим одиночного события | В конце каждого цикла ШИМ. (Когда происходит сравнение между PTPER и PTMR.) Пост-скейлер не действует в этом режиме. |
Автономный режим | В конце каждого цикла ШИМ. (Когда происходит сравнение между PTPER и PTMR) |
Чтобы разрешить прерывание PWM, бит PWMIE в регистре IEC2 должен быть установлен в 1.
void Interrupt_Init (void) {IEC2bits.PWMIE = 1; }
Ниже приведен стандартный код функции прерывания ШИМ, которая будет вызываться при срабатывании прерывания.
void __attribute __ ((interrupt, auto_psv)) _PWMInterrupt (void) {// здесь ваш код IFS2bits.PWMIF = 0; }
Более подробную информацию о прерываниях можно найти в этом подробном руководстве: Как использовать прерывания в микроконтроллерах Pic.
Постскейлер прерывания PWM
Постскейлер может использоваться для уменьшения частоты срабатывания прерывания. Например, он может быть настроен на запуск после каждых 1, 2, 4 или 8 циклов ШИМ, в зависимости от битов PTOPS в регистре PTCON, как показано в строке 6 нашего ссылочного кода.
Эта статья точна и правдива, насколько известно автору. Контент предназначен только для информационных или развлекательных целей и не заменяет личного или профессионального совета по деловым, финансовым, юридическим или техническим вопросам.
Вопросы и Ответы
Вопрос: Я пытаюсь получить дополнительный режим для одного вывода ШИМ, используя эталонную программу, dspic30f4011 и Pickit 3. Единственное, что я включил, это биты конфигурации для внутреннего выбора частоты и c-компилятора, но не могу получить никакого вывода на ШИМ1 булавки?
Отвечать: Иногда, когда вы меняете биты конфигурации, микроконтроллер перестает работать, и я имею в виду, когда осциллятор работает некорректно, ваш код не начинает выполняться.
Итак, чтобы подтвердить, что ваш контроллер выбрал правильную конфигурацию генератора, вы должны включить мигающий светодиодный код во все ваши коды, чтобы подтвердить, что контроллер включен и работает.