Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работа 3.docx
Скачиваний:
10
Добавлен:
04.06.2015
Размер:
55.49 Кб
Скачать

Void adc_init(void)

{

ADCSRA = 0x00;

ADMUX = 0x60;

ADCSRA = 0x00;

ADCSRA = 0xCF;

}

Таймер Т0 в данной программе работает в качестве источника пилообразного сигнала, для этого он инициализируется в режим быстрого ШИМ установкой в регистре TCCR0 значения 0x4B. В этом случае таймер работает в режиме ШИМ с частотой f = (fclk/64)/256=488Гц.

Аналогово-цифровой преобразователь инициализируется на работу в 8-битном режиме с предделителем частоты clk/128. При готовности результата АЦП формируется прерывание АЦП.

  1. После завершения процедуры инициализации устройств программа попадает в бесконечный цикл while(1) в котором продолжает работать до снятия напряжения питания. В основном цикле формируется управление разрешением на работу преобразователя:

if((PINA&0x0 4)==0x04)

{

TCCR0=0x4B;

}

else

{

TCCR0=0x00;

TCNT0=0x00;

PORTB=0x00;

}

Если разрешение подано, то запускается таймер Т0, а если разрешение снято, то требуется остановить таймер Т0 и обнулить все биты на PORTB.

  1. При готовности результата преобразования АЦП формируется прерывание,

которое вызывает функцию adc_isr () :

CLI();

adc_result=ADCH;

if(adc_result<=5) adc_result=5;

else if(adc_result>=250) adc_result=250;

OCR0=adc_result;

ADCSRA|=0x40;

SEI() ;

Здесь происходит считывание результата преобразования АЦП из регистра ADCH и его ограничение на минимальном и максимальном уровне, которые соответствует

минимальной и максимальной скважности. После этого результат выводится в регистр сравнения таймера ТО OCR0.

6. Таймер ТО формирует в счетном регистре TCNT0 нарастающий пилообразный сигнал с дискретным задним фронтом. Этот сигнал изменяется от нуля до максимального значения 255, при этом происходит сравнение с регистром уставки OCRO. При равенстве TCNT0=OCR0 формируется прерывание по совпадению ТО, а при обнулении регистра TCNT0 формируется прерывание по переполнению ТО. При наступлении прерывания по совпадению Т0 происходит включение транзисторов VT2 или VT4, в зависимости от выбранного направления вращения, и выключение транзисторов VT1 и VT3:

CLI();

if((PINA&0x02)==0x02)

{

PORTB=0x08;

}

else

{

PORTB=0x02;

}

SEI() ;

При наступлении прерывания по переполнению Т0 происходит включение транзисторов VT1 или VT3, в зависимости от направления вращения. Таким образом формируется широтно-импульсное управление транзисторами и формирование напряжения на выходе преобразователя:

CLI();

if((PINA&0x0 2)==0x0 2)

{

PORTB=0x09;

}

else

{

PORTB=0x06;

}

SEI() ;

Так, если в результате преобразования АЦП в регистр OCR0 было записано число 5, то при равенстве TCNT0=OCR0=5 и движении вперед включится транзистор VT4, а при переполнении таймера, то есть при TCNT0=255 происходит включение транзистора VT1, который будет выключен уже при TCNT0=5. Таким образом сформируется скважность выходного напряжения γ=5/256=0.02, и напряжение на выходе преобразователя будет минимально.

Синтез программы симметричного управления широтно-импульсным преобразователем

При симметричном способе управления работают все 4 транзистора К1...К4. При этом транзисторы К1 и К4 работают в противофазе с транзисторами К2 и К3.

В результате при скважности γ=0,5 обеспечивается нулевое напряжение на выходе преобразователя, при скважности γ=1 - максимальное положительное, а при скважности γ=0,5 - максимальное отрицательное напряжение.

Пример 2. Реализовать систему управления широтно-импульсным преобразователем постоянного тока в симметричном режиме управления. Напряжение на выходе преобразователя пропорционально величине сигнала задания, подаваемого на микроконтроллер с выхода потенциометра RP1 модуля микроконтроллера.

//

//Входы:

//PA0 - сигнал задания на ШИП

//PA1 - задание направления вращения

//PA2 - разрешение на работу преобразователя

//Выходы:

//PB0 - управление транзистором VT1 (вход А1)

//PB1 - управление транзистором VT2 (вход B1)

//PB2 - управление транзистором VT3 (вход C1)

//PB3 - управление транзистором VT4 (вход D1)

//Подключение стандартных бибилиотек:

#include <iom32v.h>

#include <macros.h>

//Объявление переменных:

unsigned char adc_result=0;

unsigned char delay=0;

//Функция инициализации портов ввода/вывода:

void port_init(void)

{

PORTA = 0xFE; //Порт А инициализируется на ввод данных

DDRA = 0x00;

PORTB = 0xF0; //Порт В инициализируется на вывод данных

DDRB = 0x0F;

PORTC = 0xFF;

DDRC = 0x00;

PORTD = 0xFF;

DDRD = 0x0 0;

}

//Функция инициализации таймера Т0 в режиме ШИМ:

void timer0_init(void)

{

TCCR0 = 0x00;

TCNT0 = 0x00;

OCR0 = 0x7F; //В таймере Т0 задается среднее значение 127

TCCR0 = 0x00; //Запуск таймера - при записи TCCR0=0x4B

}

//Функция инициализации аналого-цифрового преобразователя: