Машинка на ДУ управлении своими руками — Вперёд-назад (PIC)!

На этом уроке мы вспомним как управляются биполярные транзисторы, рассмотрим особенности применения в верхнем плече транзисторов обратной проводимости, упростим схему H-моста, соберём макет и испытаем его.

Упростим H-мост до схемы…

Управлять будем следующим способом: точка «А» включает вращение в направлении FORWARD , в точку «D» поступает ШИМ последовательность первого канала ШИМ. Соответственно, точка «B» включает вращение в направлении BACKWARD, точка «D» — второй канал ШИМ.

Пишем программу. Добавляем новый файл «H-bridge.c» с процедурами управления двигателем:

 void forward(void);     // Движение вперёд void backward(void);    // Движение назад

После инициализации…

 void initPORTs();      // Инициализация портов void initTIMERs();     // Инициализация таймеров void initCCPs();       // Инициализация CCP-модулей void initADC();        // Инициализация АЦП 

…в основном цикле проверяем статус кнопки заднего хода…

 if (PORTCbits.RC4 == 1) backward(); else forward();

…опрашиваем ручку газа…

 GO_DONE = 1;   // Запуск преобразования АЦП

…загружаем значения мощности в регистры первого и второго канала ШИМ…

 CCPR1L = ADRESH;   // Загружаем значение скважности CCPR2L = ADRESH; 

Особенности управления H-мостом с двухканальным ШИМ:

Переключение каналов производится включением и выключением модуле   й CPP1 и CPP2:

 CCP2M2 = 1;     // Включить PWM_FORWARD CCP2M3 = 1;  CCP1M2 = 1;     // Включить PWM_BACKWARD CCP1M3 = 1;  

Во избежание короткого замыкания при выключении канала ШИМ необходимо гарантированно обеспечить низкий уровень на линии ШИМ!

 PORTCbits.RC2 = 0;  // PWM_BACKWARD, press line to ground PORTCbits.RC1 = 0;  // PWM_FORWARD, press line to ground 

Проект с исходным кодом и симуляция в Proteus во вложении.