я собрал блок управления двигателями на pic16f84a , принцеп такой: контролер подаёт сигнал на оптопару, а она на симистор, а симистор управляет пускателем и запускается двигатель, на нём есть магнит который в свою очередь замыкает геркон , а геркон подаёт сигнал на контролер и тот переходит к другому двигателю, всё работает прекрастно до тех пор пока не подключен двигатель , после подключения контролер сбрасывается в начяло.
я выяснил что это происходит из за помех от наводки двигателя, подскажите как этого избежать ? заранее благодарен. вот сама программа:-
init:
TRISA = %00011111
PORTA = %00000000
PORTB = %00000000
TRISB = %00000000
DTK VAR PORTA.1 'КНОПКА ДВИЖЕНИЯ В ЛЕВО
DTL VAR PORTA.2 'ДАТЧИК ЛЕВЫЙ ДЕЛИТЕЛЯ
DTP VAR PORTA.3 'ДАТЧИК ПРАВЫЙ ДЕЛИТЕЛЯ
DTR var PORTA.4 'ДАТЧИК РАСТОЙКИ {ЗВЁЗДОЧКА)
DTG VAR PORTA.0 'ДАТЧИК ГОЛОВКИ
symbol MT1 = PORTB.0 'МОТОР В ЛЕВО
symbol MT2 = PORTB.1 'МОТОР В ПРАВО
SYMBOL LED = PORTB.7 'СИГНАЛЬНАЯ ЛАМПА
symbol MT3 = PORTB.2 ' МОТОР ГОЛОВКИ
SYMBOL LED1 = PORTB.4 'СИГНАЛ ЛЕВЫЙ
SYMBOL LED2 = PORTB.5 ' CИГНАЛ ПРАВЫЙ
SYMBOL LED3 = PORTB.3 ' СИГНАЛ ГОЛОВКИ
MAIN:
led = 1 'КНОПКА НАЧАЛЬНОЙ УСТАНОВКИ
if dtk = 0 then main1 ' если кнопка дтк нажата перейти к к установке на начало
goto main ' если нет то начять сначала
main1:
led = 0
LED1 = 1
HIGH MT1 ' движение к начальной точке
if dtl = 0 then main2 ' если кнопка дтл не нажата то перейти к опросу датчика дтр
goto main1 ' начать с мэин1
main2: '
LOW mt1 ' остановка на начальной точке
LED1 = 0
if dtr = 0 then main3 ' если датчик дтр сработал то перейти к движению вправо
goto main2 ' если нет то в начало мэин2
main3: '
mt2 = 1
LED2 = 1
LED3 = 1 ' движение вправо
MT3 = 1 ' РАБОТА ГОЛОВКИ
IF DTG = 0 THEN MAINA
GOTO MAIN3
MAINA:
MT2 = 1
LED2 = 1
pause 500
LED3 = 0
MT3 = 0
IF DTP = 0 THEN MAIN4
GOTO MAINA
main4:
mt2 = 0 ' остановка в правой половине
LED2 = 0
if dtr = 0 then main5 ' если датчик дтр сработал перейти к движению влева
goto main4 ' если нет то ждать
main5:
mt1 = 1 ' движение влево
LED1 = 1
LED3 = 1
MT3 = 1 ' РАБОТА ГОЛОВКИ
if dtG = 0 then mainB ' если дтл сработал то перейти к начальной точке
goto main5 ' если нет то продолжить
MAINB:
MT1 = 1
LED1 = 1
pause 500
LED3 = 0
MT3 = 0
IF DTL = 0 THEN MAIN2
GOTO MAINB
end


