//------------------------------------------------------------------------
#include <iolpc2129,h> // подключение стандартных заголовков и определений #include "hardware.h" // подключение специальных заголовков и определений tinclude "pwm.h" // подключение специальных заголовков и определений
volatile extern U8 flagn_knO, flagn_knl, flagn_kn2, flagn_kn3; static U8 ledl_old_state=0;
static U32 T_PWM; // 1/8 периода PWM в периодах pclk
//------------------------------------------------------------------------
void main(void)
{
CPUinitO; //инициализация системы
_disable_interrupt(); //запрет прерываний
INTERRUPTSinit(); //инициализация прерываний
TIMEROinitstart(); //инициализация ТО
_enable_interrupt(); //разрешение прерываний
delay(1000000); //задержка на сброс ЖКИ
lcd_init(); //инициализация ЖКИ
delay(1000000); //
lcd_clear(); //очистка экрана ЖКИ
PWMinitf); //инициализация модуля PWM
T_PWM = 1;
PWMset(8*T_PWM); //задание параметров PWM в каналах 2 и 4 *
A_LEDl_OFF; //Погасить светодиоды 1, 2
A_LED2_OFF; )
while(1) //Начало основного цикла
{
//преобразование в десятичное представление и индикация //периода PWM в периодах pclk PWMt_ind(8*T_PWM);
if (flagn_kn0==l) //нажималась ли кнопка 0 {
flagn_kn0=0; //да, сбросить флаг нажатия
T_PWM++;
if (T_PWM > 9999999) T_PWM = 1;
PWMset(8*T_PWM); //задание параметров PWM в каналах 2 и 4 }
if (flagn_knl==l) //нажималась ли кнопка 1 {
flagn_knl=0; //да, сбросить флаг нажатия
T_PWM--;
if (T_PWM == 0) T_PWM = 1;
PWMset(8*T_PWM); //задание параметров PWM в каналах 2 и 4 }
if (flagn_kn2==l) //нажималась ли кнопка 3
304 {
flagn_kn2=0; //да, сбросить флаг нажатия
if (ledl_old_state==OFF) {
ledl_old_state=ON; PWMset(8*T_PWM);
PWMstart(); //включение модуля PWM
//задание параметров PWM в каналах 2 и 4 A_LED1_0N; //зажечь светодиод 1 }
else
{
ledl_old_state=OFF;
//задание нулевых параметров PWM в каналах 2 и 4
PWMset(0);
PWMstopf); //отключение модуля PWM A_LED1_0FF; //погасить светодиод 1 }
}
} }
//------------------------------------------------------------------------
Программа позволяет организовать одновременную генерацию двух импульсных последовательностей, сдвинутых по фазе на 90°. Скважность импульсов в последовательностях подобрана таким образом, чтобы между импульсами из разных последовательностей гарантированно не было взаимного перекрытия. Последнее может оказаться важным, при использовании данной программы, например, в качестве задающего генератора в импульсном источнике питания с двумя ключевыми элементами. Отсутствие перекрытий позволяет избежать возникновения сквозного тока через силовые ключи. Временные диаграммы, иллюстрирующие параметры генерируемых программой импульсных последовательностей, изображены на Рис. 33.4. Временной интервал T_PWM, значение которого отсчитывается в периодах pclk, используется в программе в качестве базового для построения импульсных последовательностей. Период импульсов в каждой последовательности всегда равен восьми интервалам T_PWM. Программа использует для своей работы выходы каналов PWM 2 и 4, в каждом из которых производится управление двойным перепадом.
| НА ГЛАВНУЮ | | ЧТО ТАКОЕ PIC ? | | ПРОГРАММАТОР | | ПРОЕКТЫ | | СТАТЬИ | | ССЫЛКИ | | КАРТА САЙТА |