Перейти к содержанию

Atmega8 И Автоматика Ворот, Зависает От Эм Излучения


Рекомендуемые сообщения

добрый вечер, уже два дня мучаюсь над проблемой... Захотел сделать сам автоматику для ворот... Ну вроде с горем пополам написал прошивку, нашел моторчик, в комнате на столе все работает как ни может быть... Никаких проблем, 12 вольтовым мотором от стеклоподъемника управляет идеально, ламопочкой 75Вт 220В тоже нормально, но вот стоит подключить асинхронник и тут МК начинает виснуть, сегодня уже надумался - взял с зажигалки пъезик и подавал разряды сначала возле МК, Затем уже и на сами ноги контроллера - ну хоть бы какой глюк... Подключаю трансформатор через реле в плате - с расстояния 50 см вышибает МК, после нажатия reset все снова работает, на плате стоит приемник от старой сигналки, по питанию стоит дроссель и 2 конденсатора, линию RESET пробовал подтягивать через 200 Ом.. Не помогает, я так понял что проблема во влиянии электромагнитного излучения во время включения индуктивной нагрузки, как с этим бороться - не знаю... Возможно твердотельными реле или симмисторами? Экранировать сам блок? Двигатель изначально на 380В -переделан под треугольник ток 0.45А.. Если есть какие идеи - подскажите, мотор управляется реле. Релейный модуль выносить к самому двигателю пробовал..

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Схема где? Построение выходного каскада? Расположение реле и силовых цепей?

Все можно наладить, если вертеть в руках достаточно долго!

Если ничто другое не помогает, прочтите, наконец, инструкцию!

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

касемо схемы - все на макетке... В двух словах, есть источник 12В - БП от полячки антенны, с него берем питание для реле по плюсу, реле управляются через ULN 2003, МК питаем через 7805, после него 1 конденсатор, потом дроссель, и 2 кондера, электролит 22мкф и для гашения помех 0.1мкф прямо на ногах МК.. Общий вид всего этого безобразия вот..

c2412090faf7.jpg

прошу сильно не пинать, первый раз такое делаю, хотя ремонтами техники занимаюсь периодически..

после того как понял что имеет место быть проблема в "шуме" контактов - спаял реле отдельно и вынес почти на метр от блока - не помогло, теми реле управлял с помощью релюх на плате, вот еще... Если плата стоит на месте и двигатель втыкаю-вынимаю с розетки вилкой несколько раз подряд - МК тоже виснет или сбрасывается.

принцип запитки реле такой

062-ULN2003.png

PS: зависает даже от включения в сеть не через плату управления, то есть плата сама по себе, а "мотор в розетку " и тоже зависает. То есть имеется факт электромагнитного всплеска, вот его то и хочу устранить.

Изменено пользователем dimasoft
Ссылка на комментарий
Поделиться на другие сайты

Опторазвязка цепей управления реле желательна. А плату придется переделать. Неправильная разводка и куча длинных проводов служат приемником сигналов ЭМ помех. Ну и питание конечно тоже переделать. БП от польской антенны не лучший вариант для питания. Слабоват.

Все можно наладить, если вертеть в руках достаточно долго!

Если ничто другое не помогает, прочтите, наконец, инструкцию!

Ссылка на комментарий
Поделиться на другие сайты

линию RESET пробовал подтягивать через 200 Ом.. Не помогает

Попробуй классическую схему для RESET:

reset_03.gif

есть источник 12В - БП от полячки антенны, с него берем питание для реле по плюсу

Что за блок? Может он помеху ловит? БП наверное включен в ту же "розетку" что и двигатель. Попробуй от аккумулятора.

Изменено пользователем mr_smit
Ссылка на комментарий
Поделиться на другие сайты

Что за блок? Может он помеху ловит? БП наверное включен в ту же "розетку" что и двигатель. Попробуй от аккумулятора.

завтра попробую от аккумулятора, есть мысль заэкранировать саму плату. Блок питания я прицепил временно для проверки работоспособности, затем менять буду, плохо что в хозяйстве осциллографа нет, уже б наверное нашел кудой залазит помеха.. Есть еще один "приемник" - от сигналки, который пульты сканирует, наводка может и по нему быть.. по reset - завтр возьму что припаять и припаяю..

Ссылка на комментарий
Поделиться на другие сайты

Ну вроде с горем пополам написал прошивку

Может дело ещё и в прошивке... Что с неиспользуемыми выводами МК ? Если они висят в воздухе да ещё и настроены на вход...

Ссылка на комментарий
Поделиться на другие сайты

специально перепроверил выходы которые не использую, переключил их принудительно на выход и подтяжку к питанию.. уже задумывался просто на массу запаять их..

PS: переназначил все "висячие ноги" в выходы и программно сделал "0", не помогло.. уже всерьез задумываюсь о симмисторных ключах, но это будут костыли, а не решение проблемы, потому как проезжающий рядом газон или гроза наверное будут вешать МК.

Изменено пользователем dimasoft
Ссылка на комментарий
Поделиться на другие сайты

Что за блок? Может он помеху ловит? БП наверное включен в ту же "розетку" что и двигатель. Попробуй от аккумулятора.

завтра попробую от аккумулятора, есть мысль заэкранировать саму плату. Блок питания я прицепил временно для проверки работоспособности, затем менять буду, плохо что в хозяйстве осциллографа нет, уже б наверное нашел кудой залазит помеха.. Есть еще один "приемник" - от сигналки, который пульты сканирует, наводка может и по нему быть.. по reset - завтр возьму что припаять и припаяю..

Конечно нашёл бы... посмотрел бы что творится на выходе приемника во время помехи :)

Feel the difference! ©

Ссылка на комментарий
Поделиться на другие сайты

посмотрел бы что творится на выходе приемника во время помехи :)

Да. И как это дело обрабатывается в программе. Схемы нет, исходника нет, гадать можно бесконечно.

Ну и конечно:

куча длинных проводов служат приемником сигналов ЭМ помех.

P.S. А что за "голубенькая" хрень по левому борту меги? От него мега тактируется что ли?

Ссылка на комментарий
Поделиться на другие сайты

так, раз уже начали разбирать кости... Синенькая "деталька" - это резонатор, не кварц, но думаю сойдет, по поводу исходника, какая именно часть его интересует? В программе задействованы все 3 таймера, первый отвечает за работу с пультами и дежурным режимом - в большей мере использован из исходника который написал кто-то здесь на форуме, спасибо ему за это! второй таймер отвечает за отсечку работы двигателя по времени, если в случае не сработки какого-либо датчика мотор не крутился до моего прихода или появления с него дымка, третий таймер - модулированный сигнал 36кГц для работы TSOP 1736, Который работает как датчик препятствия

касаемо схемы... В протеусе набросал, правда работает некорректно с остальными элементами, но сам МК работает правильно...

черз 10 минут скину "схему"

Изменено пользователем dimasoft
Ссылка на комментарий
Поделиться на другие сайты

Какие кости... Ваш алгоритм способен обработать случайный набор бит на входе без зависания? :)

ну тут вам решать

void Receive(void)
{
static unsigned char Step = 0,	 //переменная шагов алгоритма
BitHiPartCoun = 0,	 //счетчик времени приема высокой части полу бита
BitLoPartCoun = 0,	 //счетчик времени приема низкой части полу бита
BitCounter = 0;		 //счетчик принятых бит
//Step==0 инициализация приема серии
if (Step == 0)
BitCounter = 0;
//Step==1 начало основного цикла приема бита

if (Step < 2) {
BitHiPartCoun = 0;
BitLoPartCoun = 0;
}
//Step==2 обработка высокого уровня полубита
if (Step < 3) {
if ((PINB & 0b00000010) !=0)
 {
 Step = 2;
 if (BitHiPartCoun <30)	 //Подсчитываем длительность высокого уровня сигнала в линии
 BitHiPartCoun++;
 return;
 }
}


//Step==3 обработка низкого уровня полубита
if ((PINB & 0b00000010) != 0 )
{
//завершено чтение бита, анализ временных параметров
Step = 0;
unsigned char temp = (BitLoPartCoun + BitHiPartCoun);
if ((temp <10) || (temp >= 20)) return;			 //временные параметры бита не соответствуют, инициализация
Step = 1;
//сдвиг буфера и запись в младший разряд принятого бита
unsigned long ultemp = ReceiveData.dw << 1;
if (BitLoPartCoun < BitHiPartCoun) ultemp |= 1;
ReceiveData.dw = ultemp;


if (BitCounter < 24) //считаем скока бит приняли
BitCounter++;
return;

}

else
{
Step = 3;
if (++BitLoPartCoun < 50)
{	 //если длительность низкого уровня сигнала в линии больше определенного - значит серия принята
 return;}
Step = 0;
if (BitCounter < 24) //Если принято менее 24 бит - ошибка, начать прием заново
{
 return;
}
////////////все приняли.. будем читать
//идентификация принятых данных
if ((PINB & 0b00000001)==0) {	 //кнопка нажата - запомнить принятый код

 if (!set_code()) //запускаем обучение контроллера брелкам
 return;
 }
 else {

 check_code(); //если кнопка не нажата проверяем или соответствуют брелки памяти и каку кнопку нажать
	 return;
 }
}
}

все работает от таймера с прерыванием 20кГц

ISR(TIMER0_OVF_vect)
{
TCNT0 = 205;
Receive();				 //функция обработки данных линии радиоканала
static unsigned char Div100 = 0; //счетчик, для деления частоты прохода с 20000 Гц до 100 Гц //10000
if (++Div100 >= 200) {
Div100 = 0;
Int100Hz();			 //функции с частотой вызова 100Гц
}

схема.. оговорюсь,в реальной схеме по входам стоят диоды от обратного напряжения, выход на светодиод через резистор по пину 16, с 27 пина через улн-ку идет сигнал на ик светодиоды на 15 пин приходит сигнал с приемника.

6dee6a850182.jpg

int setinit(void)
{


DDRB |= (0 << 0); //button
DDRB |= (0 << 1); //recieve
DDRB |= (1 << 2); //LED
DDRB |= (1 << 3); //mosi
DDRB |= (1 << 4); //miso
DDRB |= (1 << 5); //sck
DDRB |= (0 << 6); //xtal1
DDRB |= (0 << 7); //xtal2
PORTB = 0b00000001 ; //setting port to value
led_blink(0);


DDRC |= (1 << 0); //blink
DDRC |= (1 << 1); //left
DDRC |= (1 << 2); //right
DDRC |= (1 << 3); //clear
DDRC |= (1 << 4); //36kGz
DDRC |= (1 << 5); //clear
DDRC |= (0 << 6); //clear
PORTC |= 0b1000000;
//input_ports

DDRD |= (0 << 0); //gerkon1
DDRD |= (0 << 1); //gerkon2
DDRD |= (0 << 2); //button1
DDRD |= (0 << 3); //button2
DDRD |= (0 << 4); //ir_scan
DDRD |= (1 << 5); //clear
DDRD |= (1 << 6); //clear
DDRD |= (1 << 7); //clear
PORTD = 0b00011111;
return 0;
}

это инициализация портов.

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

UPD: риторический вопрос..а что делать когда собака виснет?

Изменено пользователем dimasoft
Ссылка на комментарий
Поделиться на другие сайты

А кварцевый резонатор с кондерами? если нет надо бы установить!

это не кварцевый резонатор, в нем есть внутри конденсаторы.

При использовании Atmega8, в таких местах с ЭМ излучением, внешние подтяжки по входам обязательны.

попробую еще и такой вариант..

Ссылка на комментарий
Поделиться на другие сайты

////////////все приняли.. будем читать
//идентификация принятых данных
if ((PINB & 0b00000001)==0) { //кнопка нажата - запомнить принятый код

	 if (!set_code()) //запускаем обучение контроллера брелкам
	 return;
	 }
	 else {

	 check_code(); //если кнопка не нажата проверяем или соответствуют брелки памяти и каку кнопку нажать
			 return;
	 }
}

Никакого подавления дребезга. И как разбирают принятый код set_code и check_code тоже не понятно. Скорее всего в прошивке у тебя проблема. Пару неверных бит от помех прилетает и твой алгоритм падает.

Ссылка на комментарий
Поделиться на другие сайты

Никакого подавления дребезга. И как разбирают принятый код set_code и check_code тоже не понятно. Скорее всего в прошивке у тебя проблема. Пару неверных бит от помех прилетает и твой алгоритм падает.

зачем тут подавление дребезга, если наличие сигнала на кнопке проверяется только в случае включения МК(стирание всех брелков в памяти), в случае адекватно принятого какого-либо кода, set_code() - записывает в память брелок, в check_code() проверяет на соответствие сохраненным кодам в памяти того что принято

int set_code(void)
{
uint8_t ee_addr=1; // устанавливаем начальное значение адресса
TIMSK &=(0<<TOIE0);
uint8_t o = EERead(0);	 //считываем количество пультов

if( o > 4)					 //если есть 4 кода - мигаем и выходим из функции
{
for (int j=0;j<10;j++)
 { led_blink(1);
 //мигаем с периодом 30мс //
	 _delay_ms(30);
	 led_blink(0);
	 _delay_ms(30);}
TIMSK |=(1<<TOIE0); //запускаем таймер
return 1;
}
else{

for (int j=0;j<o;j++)
 {
 led_blink(1);
 //мигаем с периодом 30мс //
 _delay_ms(30);
 led_blink(0);
 _delay_ms(30);
 }
ReceiveData.dw &= 0xfffff0;	 //очистить инфу по кнопкам
EEWrite(0,o+1);
ee_addr=ee_addr+(3*o);
EEWrite((ee_addr), ReceiveData.b[DW_B0]) ;// пишем по адресу строки первый байт
EEWrite((ee_addr+1), ReceiveData.b[DW_B1]);// пишем по адресу строки +1 второй байт
EEWrite((ee_addr+2), ReceiveData.b[DW_B2]);// пишем по адресу строки +2 третий байт
}
TIMSK |=(1<<TOIE0);
return 0;
}

int check_code(void)
{
uint8_t ee_addr=1;
uint8_t o = EERead(0);	 //считываем количество пультов

if(o==0)
{ led_blink(1);
_delay_ms(2);
led_blink(0);
_delay_ms(2);
led_blink(1);
_delay_ms(2);
led_blink(0);
_delay_ms(2);
led_blink(1);
_delay_ms(2);
led_blink(0);
return 1;
}


for (int j=0;j<o;j++)
{

kn1 = EERead(ee_addr);
kn1 |=0b00000100;
//kn1 |=0b00000001;
kn2 = EERead(ee_addr);
kn2 |=0b00001000;
// kn2 |=0b00000010;
rd2.b[DW_B1] = EERead(ee_addr+1);
rd2.b[DW_B2] = EERead(ee_addr+2);
if (kn2 == ReceiveData.b[DW_B0] && rd2.b[DW_B1] == ReceiveData.b[DW_B1] &&rd2.b[DW_B2] == ReceiveData.b[DW_B2])
if (rd2.b[DW_B1] == ReceiveData.b[DW_B1] &&rd2.b[DW_B2] == ReceiveData.b[DW_B2])
 {
 _delay_ms(100);
 rotat(1);
 return 0;
}
if (kn1 == ReceiveData.b[DW_B0] && rd2.b[DW_B1] == ReceiveData.b[DW_B1] &&rd2.b[DW_B2] == ReceiveData.b[DW_B2])
{
 _delay_ms(100);
 rotat(2);
 return 0;
}
ee_addr+=3;
}

return 1;
}

сегодня спаял симисторы вкучу, мосьок не было, заказал... но даже симмисторы с ручным управлением не помогают, все пины что отвечают именно за входы - подтянул на питание резиисторами 10к, в том числе и reset, единственное что на массу подтянул провод с приемника от сигналки. особо ничего не изменилось..

Изменено пользователем dimasoft
Ссылка на комментарий
Поделиться на другие сайты

зачем тут подавление дребезга, если наличие сигнала на кнопке проверяется только в случае включения МК

Мда. Обычно рисуют нормальную схему и прикладывают исходник прошивки к сообщению. И говорят: вот схема, вот код. Вот тут и тут не работает, почему не знаю. А из тебя приходится всё тянуть. Какой то пульт от сигналки... Что у него на выходе не понятно... Какой то двигатель... Обрывки кода... Теперь ещё выясняется что у тебя контроллер как то там хитро включается. Кому захочется в этом всём разбираться??

ничего не изменилось..

Потому что проблема у тебя в прошивке. Ты пытаешься её собрать из кусков готового кода, не понимая что есть что.

Ссылка на комментарий
Поделиться на другие сайты

зачем тут подавление дребезга, если наличие сигнала на кнопке проверяется только в случае включения МК

Мда. Обычно рисуют нормальную схему и прикладывают исходник прошивки к сообщению. И говорят: вот схема, вот код. Вот тут и тут не работает, почему не знаю. А из тебя приходится всё тянуть. Какой то пульт от сигналки... Что у него на выходе не понятно... Какой то двигатель... Обрывки кода... Теперь ещё выясняется что у тебя контроллер как то там хитро включается. Кому захочется в этом всём разбираться??

ничего не изменилось..

Потому что проблема у тебя в прошивке. Ты пытаешься её собрать из кусков готового кода, не понимая что есть что.

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

upd : прикладываю схему, как была распаяна изначально

c66c5a438acet.jpg

Изменено пользователем dimasoft
Ссылка на комментарий
Поделиться на другие сайты

Кода по прежнему нет, поэтому могу тебе лишь посоветовать следующее:

1. Создаешь новый проект (какой компилятор ты используешь не знаю);

2. Настраиваешь 1 ногу порта на выход (для реле), 1 на вход (для кнопки). Остальные настраиваешь на выход с подтяжкой;

3. Пишешь:

if (PINx == 0) {   // если нажали кнопку
  delay_ms(15)   // антидребезг
 if (PINx == 0) {
   PORTx ^= 1;   // при каждом нажатии меняем состояние ноги которая управляет реле
 }
}

Включай/выключай двигатель при помощи этого реле и кнопки. И ты увидишь что у тебя всё будет работать и электромагнитные помехи тут ни при чем. Потом добавь ещё 2 реле (всего у тебя на схеме 3 шт.). Поуправляй ими. Убедись что всё нормально. Потом добавь код приема сигнала с брелка (пока без всяких сохранений в EEPROM). Т.е. просто щелкай реле с пульта. Скорее всего как раз тут у тебя и проблема. Если всё нормально, то потом добавляй запоминание/добавление в EEPROM и т.д. По другому ты не выедешь.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...