Пока еще не могу сообразить, как лучше сделать, с учетом "как можно меньше взаимосвязей". Я сделал автомат мотора самостоятельным. Состояния этого автомата:
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.
До переделки этот автомат был вложенный в нужные состояния другого автомата и стоял табличный интерпретатор.
Как сейчас управлять этим автоматом?