Добрый день уважаемые колеги, у меня такая проблема- я собрал блок управления двигателями на 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
Советую запитывать микроконтроллер через DC/DC преобразователь. Получите и высококачественную фильтрацию ВЧ помех по питанию и гальваническую развязку от другой части схемы. Инфа о DC/DC преобразователях на http://catalog.compel.ru/ps_dcdc/list Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
dc-dc это конечно хорошо, но проблема в том ,что даже если поставить двигатель на провода от датчиков(геркон) мк сбрасывается , хотя двигатель всего 30 ват, а наводка идёт по проводам и прямо на входа мк, но всё равно спасибо за совет.
поставил я детали как на схеме и диод по питанию поставил (http://picbasic.ru/forum/16-513-1) , а контролер всё равно сбрасывается, стоит лишь поднести двигатель поближе к проводам герконов, что делать ума не приложу? Помогите
Я для себя давно эту пробему решил, и пользуюсь таким схемным решением (смотрите приложенный рисунок), особенно в цеху где очень много электродвигателей от 10 до 250 кВт работающих под управлением частотных преобразователей.
Ну и где же ваши старания в борьбе с дребезгом или вы этого не проходили?
k1, k2 - копилки (байтовые либо word) k1=0 : k2=0
If PORTX=0..................................................вроде бы сработал порт ...For k1=1 To 3000......................................теперь много раз под ряд будем его проверять ...If PORTX=0 Then Inc k2 ...Next : k1=0 ...If k2 > 2000 Then делаем что нужно............если 2/3 проверок подошли.
Удачи.
Сообщение отредактировал
retas - Пт, 21.01.2011, 09:47