Требуется критика по алгоритму работы контроллера.

Bmax77

www.dropbox.com/s/6f6psx8d4cf26wg/Shema.jpg

Вот схема в упрощенном виде, даю для понимания в принципе.
Ее основное отличие от схем представленных в инете (kazus.ru/nuke/spaw/images/1/30.gif), в том, что компараторы заведены не на int0/1, а просто на пины порта. Я симулировал в протеусе схему в варианте с заведением компараторов на int но в симуляции компараторы залипали в одном положении и ограничение тока переставало работать. Ток почему то не успевал спадать.
Я стал опрашивать компараторы в прерывании таймера, и в соответствии со значением на выходе компаратора либо включал соответствующую обмотку либо нет, дожидаясь когда спадет ток.
//Обработчик прерывания таймера
{
_Data = Data[step];
if (bit_is_clear(PIND,0))
{
_Data &= 0b1010;
}
if (bit_is_clear(PIND,1))
{
_Data &= 0b0101;
}
PORTC = _Data;
TCNT0 = TCNT0_1MS;
}

В общем контроллер работает, но прежде чем делать уже законченный вариант для станка хотелось бы услышать возможную критику. Дабы не рвать волосы если вдруг что.
Спасибо.

mura

Принимать решение о закрытии транзистора микроконтроллером не есть хорошо,
имеет смысл поставить простой триггер на копеечной логике и спать спокойно.

Bmax77
mura:

Принимать решение о закрытии транзистора микроконтроллером не есть хорошо,

То есть схема в которой задействованы int прерывания, тоже по сути порочна? А триггером рулить с мк чтобы частота переключений транзистора была в разумных пределах?
Но при этом потребуется еще и микросхема 2И.

mura

Когда все живет в штатном режиме то контроллером управлять можно, и все будет нормально, но представим что возникла импульсная помеха,
и контроллер ушел в перезагрузку на 0.5 сек - в результате дым, с внешним триггером мы просто потеряем шаги. НО ДРАЙВЕР ВЫЖИВЕТ.

Bmax77

Перезагрузка не страшна, вот если зависнет то да.