Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Мой первый проект: Управление моторчиком с помощью МК-51
erraДата: Вторник, 23.06.2015, 01:21 | Сообщение # 1
Рядовой
Группа: Администраторы
Сообщений: 14
Репутация: 0
Статус: Offline
Необходимо в сжатые сроки спроектировать устройство управляющее скоростью моторчика и реализующее зажигание, отключение и 2 режима работы мотора. Устройство снабдить индикатором мощности работы двигателя или вольтметром.
Моделирование и компиляция проводится в программной среде Proteus. В качестве контроллера выбран МК-51.
 
erraДата: Вторник, 23.06.2015, 01:22 | Сообщение # 2
Рядовой
Группа: Администраторы
Сообщений: 14
Репутация: 0
Статус: Offline
Нарисуем блок-схему алгоритма работы контроллера:

 
erraДата: Вторник, 23.06.2015, 01:24 | Сообщение # 3
Рядовой
Группа: Администраторы
Сообщений: 14
Репутация: 0
Статус: Offline
Соберём принципиальную схему в среде Proteus:

 
erraДата: Вторник, 23.06.2015, 01:28 | Сообщение # 4
Рядовой
Группа: Администраторы
Сообщений: 14
Репутация: 0
Статус: Offline
Через резисторы R1, R5, R4, R11 суммируется напряжение, которое подаётся на вход операционного усилителя, к которому подключен моторчик.
В реальности эта схема работать врядли будет, но для модели вполне сойдёт
 
erraДата: Вторник, 23.06.2015, 01:29 | Сообщение # 5
Рядовой
Группа: Администраторы
Сообщений: 14
Репутация: 0
Статус: Offline
Листинг программы на языке ASM51:

Код
START:
SETB EA
CLR P1.7 ; установить порт P1.7 в 0В
CLR P1.6 ; установить порт P1.6 в 0В
CLR P1.5 ; установить порт P1.5 в 0В
SJMP CHECK_B_START

CHECK_B_START:

JNB P1.3,ON_DRIVE; если кнопка "START" нажата, подать напряжение
SJMP CHECK_BUTTON1

ON_DRIVE:

SETB P1.5 ; Подать на мотор +5В
SJMP CHECK_BUTTON1

CHECK_BUTTON1:

JNB P1.0,ON_DRIVE1; если кнопка +5В нажата, подать напряжение
SJMP CHECK_BUTTON2

ON_DRIVE1:

SETB P1.7 ; Подать на мотор +5В
SJMP CHECK_BUTTON2

CHECK_BUTTON2:

JNB P1.1,ON_DRIVE2; если кнопка +5В нажата, подать напряжение
SJMP CHECK_BUTTON3

ON_DRIVE2:

SETB P1.6 ; Подать на мотор +5В
SJMP CHECK_BUTTON3

CHECK_BUTTON3:

JNB P1.2,START; если кнопка "RESET" нажата, остановить
SJMP CHECK_B_START

END
 
erraДата: Вторник, 23.06.2015, 01:33 | Сообщение # 6
Рядовой
Группа: Администраторы
Сообщений: 14
Репутация: 0
Статус: Offline
1. При нажатии на кнопку START моторчик начинает двигаться на малых оборотах, зажигается светодиод.
2. При нажатии на кнопку +5В моторчик ускоряется, светодиод загорается ярче.
3. При нажатии на вторую кнопку +5В моторчик ускоряется до максимальной скорости, светодиод загорается ярче.
4. При нажатии на RESET все пины скидываются в 0 и двигатель останавливается.
 
erraДата: Вторник, 23.06.2015, 20:53 | Сообщение # 7
Рядовой
Группа: Администраторы
Сообщений: 14
Репутация: 0
Статус: Offline
Нашёл время исправить схему. Использовал в качестве параллельного ЦАП R2-R матрицу, благодаря которой суммирую напряжение на выводах и подаю его на операционник, подключенный по неинвертирующей схеме.

 
erraДата: Вторник, 23.06.2015, 22:29 | Сообщение # 8
Рядовой
Группа: Администраторы
Сообщений: 14
Репутация: 0
Статус: Offline
Можно поиграться ещё и добавить зажигание светодиодов на каждую передачу и увеличить плавность переключения, добавив ещё одну скорость.

Тогда листинг программы:

Код
START:

CLR P1.7 ; установить порт P1.7 в 0В
CLR P1.6 ; установить порт P1.6 в 0В
CLR P1.5 ; установить порт P1.5 в 0В
CLR P1.4 ; установить порт P1.4 в 0В
CLR P2.1 ; установить порт P2.1 в 0В
CLR P2.2 ; установить порт P2.2 в 0В
CLR P2.3 ; установить порт P2.3 в 0В
CLR P2.4 ; установить порт P2.4 в 0В
SJMP CHECK_B_START

CHECK_B_START:

JNB P1.3,ON_DRIVE; если кнопка "START" нажата, подать напряжение
SJMP CHECK_BUTTON1

ON_DRIVE:

SETB P1.5 ; Подать на мотор +5В
SJMP CHECK_BUTTON1

CHECK_BUTTON1:

JNB P1.0,ON_DRIVE1; если кнопка +5В нажата, подать напряжение
SJMP CHECK_BUTTON2

ON_DRIVE1:

SETB P1.7 ; Подать на мотор +5В
SJMP CHECK_BUTTON2

CHECK_BUTTON2:

JNB P1.1,ON_DRIVE2; если кнопка +5В нажата, подать напряжение
SJMP CHECK_BUTTON3

ON_DRIVE2:

SETB P1.6 ; Подать на мотор +5В
SJMP CHECK_BUTTON3

CHECK_BUTTON3:

JNB P2.0,ON_DRIVE3; если кнопка +5В нажата, подать напряжение
SJMP CHECK_RESISTOR1

ON_DRIVE3:

SETB P1.4 ; Подать на мотор +5В
SJMP CHECK_RESISTOR1

CHECK_RESISTOR1:

JB P1.4,ON_LED1
SJMP CHECK_RESISTOR2

ON_LED1:

SETB P2.1
SJMP CHECK_RESISTOR2

CHECK_RESISTOR2:

JB P1.5,ON_LED2
SJMP CHECK_RESISTOR3

ON_LED2:

SETB P2.2
SJMP CHECK_RESISTOR3

CHECK_RESISTOR3:

JB P1.6,ON_LED3
SJMP CHECK_RESISTOR4

ON_LED3:

SETB P2.3
SJMP CHECK_RESISTOR4

CHECK_RESISTOR4:

JB P1.7,ON_LED4
SJMP CHECK_BUTTON4

ON_LED4:

SETB P2.4
SJMP CHECK_BUTTON4

CHECK_BUTTON4:

JNB P1.2,START; если кнопка "RESET" нажата, остановить
SJMP CHECK_B_START

END



 
  • Страница 1 из 1
  • 1
Поиск: