ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 ноября
358505 Топик полностью
mazur (01.10.2012 17:40, просмотров: 59) ответил Vladimir Ljaschko на Нет проблем. Функция для MotorService10ms запускается в цикле, но каждые 10 мс (чтобы внутри функции можно было считать время)
Пока еще не могу сообразить, как лучше сделать, с учетом "как можно меньше взаимосвязей". Я сделал автомат мотора самостоятельным. Состояния этого автомата:  Table_Jmp_Proc_Fan: .equ MAX_PROC_FAN_STATES = 5 .equ _PROC_FAN_STOPPED = 0 .db tab_h(Empty_Action) .equ _PROC_FAN_INIT = 1 .db tab_h(Proc_Fan_Init) .equ _PROC_FAN_RUNNING = 2 .db tab_h(Proc_Fan_Running) .equ _PROC_FAN_WORK = 3 .db tab_h(Empty_Action) .equ _PROC_FAN_BRAKING = 4 .db tab_h(Proc_Fan_Braking) Извне мне нужно: запустить плавно, остановить плавно, остановить резко в случае КЗ. Что происходит сейчас внутри: _PROC_FAN_STOPPED. Простой автомата, двигатель остановлен. _PROC_FAN_INIT. Запуск ШИМ-а, запуск таймера для отсчетов задержки перед последовательного увеличения значения ШИМ-а. Разгон, короче. _PROC_FAN_RUNNING. Проверяет таймер, если время вышло, постепенно увеличивает значение ШИМ-а, перезапускает таймер. Как только значение достигло заданного, переход в состояние _PROC_FAN_WORK. _PROC_FAN_BRAKING. То же самое, что и RUNNING, только уменьшает значение ШИМ-а. И переход в состояние _PROC_FAN_STOPPED. До переделки этот автомат был вложенный в нужные состояния другого автомата и стоял табличный интерпретатор. Как сейчас управлять этим автоматом?