Исходные данные, Электродвигатель постоянного тока: - Программа для управления регулятором скорости вращения двигателя

Устройство предназначено для обеспечения плавной регулировки скорости вращения электродвигателя постоянного тока способом изменения интегрального напряжения, подводимого к его якорной цепи. Изменение напряжения выполнено на основе широтно-импульсного модулятора под управлением микроконтроллера AT90S1200 фирмы Atmel.

Электродвигатель постоянного тока:

Возбуждение постоянными магнитами

Номинальное напряжение якорной цепи 12в

Номинальный ток якорной цепи 1 А

Номинальная мощность 15Вт

Номинальная скорость вращения 1000 об/мин

Изменение скорости вращения двигателя постоянного тока производится способом изменения напряжения, подводимого к его якорной цепи. Изменение напряжения осуществляется экономичным способом широтно-импульсной модуляции. При данном способе обеспечивается максимальный диапазон регулировки выходного интегрального напряжения при ключевом режиме работы выходного транзистора. Ключевой режим транзистора благоприятно сказывается на его температурных режимах работы.

Программа управления регулятором скорости вращения двигателя для АТ90S1200

Используемые регистры:

R23

Регистр организации 3 цикла подпрограммы задержки

R24

Регистр организации 2 цикла подпрограммы задержки

R25

Количество циклов подпрограммы задержки

R26

Дискретность шага при увеличении или уменьшении ШИМ

R27

Регистр для организации мигающего бита

R28

Регистр хранения длительности импульса

R29

Регистр хранения длительности паузы

R30

Зарезервирован как указатель для непосредственной адресации регистрового файла. В программе не используется.

R31

Регистр для конфигурирования аппаратной части контроллера

ORG

000

;

Вектор сброса

Rjmp

Reset

ORG

002

;

Вектор прерывания по переполнению таймера

Inc

R27

;

Добавляем 1 к содержимому регистра r27

Sbrc

R27,0

;

Проверяем на четность младший бит регистра r27

Rjmp

Pause

;

Если четный, то обрабатываем п/прогр pause

Sbrs

R27,0

;

Проверяем на четность младший бит регистра r27

Rjmp

Impulse

;

Если нечетный, то обрабатываем п/прогр impulse

Pause:

Cbi

Portb,3

;

Устанавливаем на выводе РВ3 логич "0"

Out

Tcnt0,r28

;

Загружаем таймер величиной длительности "1"

Rjmp

Exit_timer

;

Выход из прерывания

Impulse:

Sbi

Portb,3

;

Устанавливаем на выводе РВ3 логич "1"

Out

Tcnt0,r29

;

Загружаем таймер величиной длительности "0"

Rjmp

Exit_timer

;

Выход из прерывания

Exit_timer:

Reti

;

Выход из процедуры прерывания

Reset:

Ldi

R31,$18

;

Конфигурируем порт В

Out

Ddrb, r31

;

РВ0,1,2 - как входы. РВ3,4 - как выходы

Ldi

R28,$99

;

Задаем начальное значение длительности импульса = 99

Ldi

R29,$66

;

Задаем начальное значение длительности паузы = 66

Ldi

R31,$17

;

Включаем внутренние подтягивающие резисторы

Out

Portb, r31

;

К входам РВ0, РВ1, РВ2

Ldi

R31,$01

;

Конфигурируем таймер

Out

Tccr0,r31

;

Тактирование от генератора МК без делителя

Ldi

R31,$02

;

Настраиваем прерывание

Out

Timsk, r31

;

Разрешаем прерывание от таймера

Stop:

Cbi

Portb,4

;

Устанавливаем вывод РВ4 в "0". Зажигаем светодиод

Ldi

R27,$0

;

Обнуляаем регистр мигающего бита

Rjmp

Scan1

;

Переход на сканирование клавиатуры

Scan1:

;

Сканирование клавиатуры при включении/отключении

Sbis

Pinb,0

;

Если нажата кнопка ON/OFF (PD0)

Rjmp

Start

;

То переход к старту

Sbis

Pinb,1

;

Если нажата кнопка "+" (PD1)

Rjmp

Start

;

То переход к старту

Sbis

Pinb,2

;

Если нажата кнопка "-" (PD2)

Rjmp

Start

;

То переход к старту

Rjmp

Scan1

;

Если ничего не нажато, то повторяем сканирование

Start:

Sbi

Portb,4

;

Устанавливаем вывод РВ4 в "1". Гасим светодиод

Sbi

Portb,3

;

Устанавливаем на выходе ШИМ "1" (вывод РВ3="1").

Out

Tcnt0,r29

;

Загружаем в таймер начальное значение длительности импульса ШИМ

Sei

;

Разрешаем прерывания

Rcall

Pause_scan

;

Вызов процедуры задержки сканирования клавиатуры

Rjmp

Scan2

;

Переходим к сканированию клавиатуры

Scan2:

Sbis

Pinb,0

;

Если нажата кнопка ON/OFF (PD0)

Rjmp

Off

;

То переход к подпрограмме выключения

Sbis

Pinb,1

;

Если нажата кнопка "+" (PD1)

Rjmp

Plus

;

То переход к подпрограмме увеличения ШИМ

Sbis

Pinb,2

;

Если нажата кнопка "-" (PD2)

Rjmp

Minus

;

То переход к подпрограмме уменьшения ШИМ

Rjmp

Scan2

;

Если ничего не нажато, то повторяем сканирование

Off:

Cli

;

Запрещаем все прерывания

Cbi

Portb,3

;

Устанавливаем на выходе ШИМ (РВ3) логический "0"

Rcall

Pause_scan

;

Вызов процедуры задержки сканирования клавиатуры

Rjmp

Stop

;

Переход к подпрограмме STOP

Plus:

Ldi

R26,$ff

;

Задаем максимальное значение ШИМ = FF

Cpse

R26,r28

;

Проверяем, максимально ли текущее значение регистра r26

Rjmp

Plus1

;

Если нет, то переходим к подпрограмме увеличения ШИМ

Rjmp

Scan2

;

Если да, то переходим к сканированию кнопок

Minus:

Ldi

R26,$33

;

Задаем минимальное значение ШИМ = 33

Cpse

R26,r28

;

Проверяем, минимально ли текущее значение регистра r26

Rjmp

Minus1

;

Если нет, то переходим к подпрограмме уменьшения ШИМ

Rjmp

Scan2

;

Если да, то переходим к сканированию кнопок

Plus1:

Ldi

R26,$33

;

Задаем шаг изменения ШИМ при увеличении или уменьшении

Add

R28,r26

;

Увеличиваем длительность импульса на 1 шаг

Sub

R29,r26

;

Уменьшаем длительность паузы на 1 шаг

Rcall

Pause_scan

;

Вызов процедуры задержки сканирования клавиатуры

Rjmp

Scan2

;

Переход к сканированию кнопок

Minus1:

Ldi

R26,$33

;

Задаем минимальное значение ШИМ = 33

Add

R29,r26

;

Увеличиваем длительность паузы на 1 шаг

Sub

R29,r26

;

Уменьшаем длительность импульса на 1 шаг

Rcall

Pause_scan

;

Вызов процедуры задержки сканирования клавиатуры

Rjmp

Scan2

;

Переход к сканированию кнопок

Pause_scan:

Ldi

R25,3

D_3:

Clr

R24

Обнуляем регистр r24

D_2:

Clr

R23

Обнуляем регистр r23

D_1:

Dec

R23

Вычитаем единицу из текущего значения регистра r23

Brne

D_1

Проверяем условие перехода

Dec

R24

Вычитаем единицу из текущего значения регистра r24

Brne

D_2

Проверяем условие перехода

Dec

R25

Вычитаем единицу из текущего значения регистра r25

Brne

D_3

Проверяем условие перехода

Ret

Выход из подпрограммы

EXIT

Похожие статьи




Исходные данные, Электродвигатель постоянного тока: - Программа для управления регулятором скорости вращения двигателя

Предыдущая | Следующая