Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методичка (МПС)

.pdf
Скачиваний:
15
Добавлен:
04.06.2015
Размер:
1.2 Mб
Скачать

& ! , " 01, ! ,

& " 01 & PORTB.

5. ) " $" '

$ " 01

timer1_compa_isr(void):

{

CLI();

PORTB=step; if((PINA&0x04)==0x04)

{

step<<=1;

if(step==0x10) {step=0x01;OCR1A=delay;}

}

else

{

step>>=1;

if(step==0x00) {step=0x08;OCR1A=delay;}

}

SEI();

}

" $ $ ' $

% , %

# ' (PORTB=step).

" & $

& , % &

$ !$ $ . 6 «3$" $&» %

& % &

«+ &» & $ & & « / » %

« ». " $

А1, В1, А1, В1, % " .

51

+ ' - 5. ' ' )

5-" '

/ " '

* & % 3*)-6)0, & &

.

# ) '

1.* & " " " !-&$ $ $

$ ;

2.( & «3-& "

&».

3.* & $ $

!-&$ .

# '

+ & $ $

" # !-& #& $

! . + # !-

&$ $ % &:

& $ %;

& $ ;

" , , ;

$ $ $ % ;

$ ,

, , .

6 $ , & $

, , & " !-& "

& ( . 1). ( ("),

$& $& .

+ # 3*):

;

.

) % & "

% 4, 1

# " % & 2 = 0 … 1,0. 0

$ % . 6

&$ % 3*) 2,

3 # " % &, $

%.

52

1

3

2

4

. 1. + $ !-&$

) 4 1… 4. ) 1 4 ' 2 3.

& % 2 = 0,5 %

, % 2 = 1 – & % &,

% 2 = 0,5 – & & %.

& «3-& "

3*)-6)0

%. ! " " .2.

. 2. ! " «3-& " &»

53

, " %:

& «+ &» %;

$& $ &

&$ $ $ Y;

" # % "

$ . ( % #&

«n/U»;

" !-&$ ,

% # 1, 1, +1, D1 A2, B2, C2, D2 "

, % "

X1, X2, X3, X4. 2

VT1, B2 – VT2, +2 – VT3,

D1 – VT4;

X5, X6, $ %

$& $ ;

& « / » % . % « .»

& # $ $ , % « .» $ &

« »;

«)», % "

% ;

«+», % " # #

& % ;

& « /,», # # " $

% % ;

$ $

% ;

«#», " " "

" .

5 3 ) ' 5-

" ) '

! $ " &

# $ $ %

$ 4 = (5Я).

6 :

QF1

& X5 X6 "

$ $ . 0 % & " 2, 2, +2, D2 # X1, X2, X3, X4;

$ & "

% " ;

& % $ QF1

& & «+ &» «3-

54

& " &». ) % % $&

# " " ;

& " % ,

$ $

;

& $ ! ( «)») ,

$ , , '

& " . 1;

&

$ " % " , &

% «+».

0. 1

5Я,

4,

/

2

( & $ $ , &

% & $ % , %

& % %

& " % &. & .1.

55

+ ' - 6. # ! 1 ! 5-

" ', ' 67 ) " )

/ " '

( & «3-& "

& – $& $ »

% .

# ) '

1.* & " "

$" $ " $ %

3*.

2.& % " $ $

" 3*)-6)0, & $ .

3.& % " $ $

" 3*)-6)0, & $ .

3., & & $

$ $ 3*)-6)0

.

# '

" " ' "

$ $

!-&$

.

#$ $ & &

& « » ATmega32.

6 $ , & «3-& "

$ " , !$

#$ ,

«+ &» « / » % « ».

$ VT1…VT4 &

# " DD1.

+ VT1 A1,

VT2 B1,

VT3 C1, VT4

D1.

)

QF1 &

X5 X6 " $ $

. 0 % & " 2, 2, +2, D2 #

X1, X2, X3, X4.

56

) ) 5-"

'

6 $ , & $

, , & " !-& "

& ( . 1). ( ("),

$& $& .

) % & "

% 4, 1

# " % & 2 = 0 … 1,0.

0 $ %

. 6 &$ % 3*)

2, 3 # " % &,

$ % & .

1

3

2

4

. 1. + $ !-&$

+ $ $ $ , #$

RP1 « », % &

.

, # $ #& $

.

! % "

$ $ ' " .

# 1. & !-&

$ % . , % & $

, $ RP1

.

//------------------------------------------------------------------

//Входы:

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

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

//PA2 – разрешение на работу преобразователя //Выходы:

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

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

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

57

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

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

#include <iom32v.h> #include <macros.h>

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

unsigned char adc_result=0;

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

void port_init(void)

 

{

 

 

PORTA

= 0xFE;

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

DDRA

= 0x00;

 

PORTB

= 0xF0;

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

DDRB

= 0x0F;

 

PORTC

= 0xFF;

 

DDRC

= 0x00;

 

PORTD

= 0xFF;

 

DDRD

= 0x00;

 

}

 

 

//Функция инициализации таймера T0:

void timer0_init(void)

{

TCCR0 = 0x00;

TCNT0 = 0x00;

OCR0 = 0x00;

TCCR0 = 0x00;

}

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

void adc_init(void)

 

{

 

ADCSRA = 0x00;

 

ADMUX = 0x60;

//АЦП инициализируется на работу с входом ADC0

ADCSRA = 0x00;

 

ADCSRA = 0xCF;

//АЦП запускается в одиночном режиме

}

//с предделителем 128

//Подпрограмма обработки прерывания готовности АЦП:

#pragma interrupt_handler adc_isr:iv_ADC

 

void adc_isr(void)

 

 

{

 

 

CLI();

//Запрет всех прерываний

adc_result=ADCH;

//Считывание результата преобразования АЦП

if(adc_result<=5)

adc_result=5;

//Минимальная скважность

else if(adc_result>=250)

adc_result=250;

//Максимальная скважность

58

OCR0=adc_result;

//Выдача результата на ШИМ таймера Т0

ADCSRA|=0x40;

//Перезапуск

АЦП

SEI();

//Разрешение

всех прерываний

}

 

 

//Подпрограмма обработки прерывания по совпадению таймера Т0:

#pragma interrupt_handler timer0_comp_isr:iv_TIM0_COMP void timer0_comp_isr(void)

{

 

CLI();

//Запрет всех прерываний

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

//При движении «Вперед»

{

 

PORTB=0x08;

//включается транзистор VT4

}

 

else

//При движении «Назад»

{

 

PORTB=0x02;

//Включается транзистор VT2

}

 

SEI();

//Разрешение всех прерываний

}

 

//Подпрограмма обработки прерывания по переполнению таймера Т0:

#pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF void timer0_ovf_isr(void)

{

 

CLI();

//Запрет всех прерываний

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

//При движении «Вперед»

{

 

PORTB=0x09;

//Включаются транзисторы VT1 и VT4

}

 

else

//При движении «Назад»

{

 

PORTB=0x06;

//Включаются транзисторы VT2 и VT3

}

 

SEI();

//Разрешение всех прерываний

}

 

//Функция инициализации периферийных устройств контроллера: void init_devices(void)

{

 

 

CLI();

 

//Запрет всех прерываний

port_init();

//Вызов функции инициализации портов

timer0_init();

//Вызов функции инициализации таймера Т0

adc_init();

//Вызов функции инициализации АЦП

MCUCR

= 0x00;

 

GICR

= 0x00;

//Запрет всех внешних прерываний

TIMSK = 0x03;

//Разрешение прерываний по совпадению и

 

 

//переполнению таймера Т0

SEI();

 

//Разрешение всех прерываний

}

 

 

59

//Главная функция программы: void main(void)

{

 

init_devices();

//Вызов функции инициализации устройств контроллера

while(1)

//Бесконечный цикл

{

 

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

//При подаче сигнала разрешения

{

 

TCCR0=0x4B;

//Запускается таймер Т0 в режиме ШИМ

}

 

else

//При снятии сигнала разрешения

{

 

TCCR0=0x00;

//Таймер Т0 останавливается

TCNT0=0x00;

 

PORTB=0x00;

//управляющие импульсы снимаются

}

 

}

 

}

 

//------------------------------------------------------------------

 

$ .

1. + ,

$ $& :

#include <iom32v.h> #include <macros.h>

unsigned char adc_result=0;

2. ) $ $" ' main (),

" ' ' " "

init_devices():

CLI(); port_init(); timer0_init(); adc_init(); MCUCR = 0x00; GICR = 0x00; TIMSK = 0x03; SEI();

3. ; ' " " &

' / , " 00 8):

void port_init(void)

{

PORTA = 0xFE; DDRA = 0x00; PORTB = 0xF0; DDRB = 0x0F; PORTC = 0xFF; DDRC = 0x00; PORTD = 0xFF; DDRD = 0x00;

60