Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
ЧТО ТАКОЕ ШИМ?
ШИМ-СТЕНДЫ ДЛЯ МОДУЛЯЦИИ ШИРИНЫ ИМПУЛЬСА - это метод, с помощью которого изменяется ширина импульса.
Чтобы четко понять эту концепцию, рассмотрите тактовый импульс или любой прямоугольный сигнал, он имеет рабочий цикл 50%, что означает, что период Ton и Toff одинаковы. Общая длительность, в течение которой сигнал был высоким, и продолжительность, в течение которой сигнал был низким, называется общей. временной период.
Для изображения, показанного выше, эта волна имеет рабочий цикл 50%.
Рабочий цикл = (время включения / общее время) * 100
Время включения - время, в течение которого сигнал был высоким
Время выключения - время, в течение которого сигнал был низким. Общее время - Общий период времени импульса (время включения и выключения)
Шаг 1: выбор микроконтроллера
Выбор подходящего микроконтроллера для проекта является важной частью проекта. ШИМ-сигналы могут генерироваться в микроконтроллерах с ШИМ-каналами (регистрами CCP). Для этого проекта я планирую использовать pic16f877. Вы можете скачать ссылку на техническое описание, указанную ниже
Технический паспорт PIC16F877a нажмите здесь
Модуль CCP отвечает за формирование сигнала PWM. CCP1 и CCP2 мультиплексируются с PORTC. PORTC - это двунаправленный порт шириной 8 бит. Соответствующий регистр направления данных - TRISC. Установка бита TRISC (= 1) заставит использовать соответствующий вывод PORTC в качестве входа. Очистка бита TRISC (= 0) сделает соответствующий вывод PORTC выходом.
TRISC = 0; // Очистка этого бита сделает вывод PORTC
Шаг 2: НАСТРОЙКА МОДУЛЯ CCP
CCP - ЗАХВАТ / СРАВНЕНИЕ / ШИМ МОДУЛИ
Каждый модуль Capture / Compare / PWM (CCP) содержит 16-битный регистр, который может работать как:
• 16-битный регистр захвата
• 16-битный регистр сравнения
• Регистр рабочего цикла PWM Master / Slave
Настройте регистр CCP1CON в режим ШИМ
Описание реестра
CCPxCON Этот регистр используется для настройки модуля CCP для операций Capture / Compare / PWM.
CCPRxL Этот регистр содержит 8-мегабитные биты ШИМ, младшие 2 бита будут частью регистра CCPxCON.
TMR2 Счетчик автономной работы, который будет сравниваться с CCPR1L и PR2 для генерации выходного сигнала ШИМ.
Теперь я буду использовать двоичный код для представления битов для настройки регистра CCP1CON.
см. изображение выше.
CCP1CON = 0b00001111;
Вы также можете использовать шестнадцатеричный формат
CCP1CON = 0x0F; // настраиваем регистр CCP1CON для режима ШИМ
Шаг 3: Настройка модуля Timer2 (регистр TMR2)
Timer2 - это 8-битный таймер с предделителем и постделителем. Его можно использовать в качестве временной базы ШИМ для режима ШИМ модуля (ов) CCP. Регистр TMR2 доступен для чтения и записи и очищается при любом сбросе устройства.
Показан регистр T2CON
Предварительное масштабирование и последующее масштабирование будут регулировать выходную частоту сгенерированной волны ШИМ.
Частота = тактовая частота / (4 * предварительный делитель * (PR2-TMR2) * постделитель * счетчик)
Где Tout = 1 / частота
T2CON = 0b00000100;
Это будет генерировать кристалл 2,5 кГц при 1 МГц или 100 кГц при 4 МГц (практически существует ограничение для этой частоты ШИМ, см. Конкретную таблицу данных для более подробной информации)
шестнадцатеричное представление
T2CON = 0x04; // включить T2CON без настройки предварительного масштабирования и пост-масштабирования
Шаг 4: Настройка PR2 (Регистр периода таймера 2)
Модуль Timer2 имеет 8-битный регистр периода PR2. Timer2 увеличивается с 00h до совпадения с PR2, а затем сбрасывается на 00h в следующем цикле приращения. PR2 - это регистр с возможностью чтения и записи. После сброса регистр PR2 инициализируется значением FFh.
Установка соответствующего диапазона для PR2 позволит использовать для изменения рабочего цикла сгенерированной волны ШИМ.
PR2 = 100; // Установите время цикла на 100 для изменения рабочего цикла от 0 до 100
Для простоты я использую PR2 = 100, сделав CCPR1L = 80; Можно достичь 80% рабочего цикла.
Шаг 5. Настройте модуль CCPR1l
Поскольку PR2 = 100, CCPR1l может быть настроен где угодно между 0-100, чтобы получить желаемый рабочий цикл.
Шаг 6: напишите набросок на своей MPLAB X IDE, код указан ниже
#включают
void delay (int a) // функция для генерации задержки {
для (int i = 0; i <a; i ++)
{
для (int j = 0; j <144; j ++);
}
}
пустая функция()
{TRISC = 0; // Очистка этого бита сделает вывод PORTC.
CCP1CON = 0x0F; // настраиваем регистр CCP1CON для режима ШИМ
T2CON = 0x04; // включить T2CON без настройки предварительного масштабирования и пост-масштабирования.
PR2 = 100; // Установите время цикла на 100 для изменения рабочего цикла от 0 до 100
в то время как (1) {
CCPR1L = 75; // сгенерировано 75% задержки рабочего цикла (1);
}
}
Я также немного изменил код, чтобы частота генерируемой волны ШИМ
Этот код смоделирован в Proteus, а выходной сигнал ШИМ показан ниже. Чтобы загрузить его на свои платы разработки pic, используйте #include с подходящими битами конфигурации.
Спасибо