Forger 17 26 июня, 2018 Опубликовано 26 июня, 2018 · Жалоба Что за блажь использовать низкоомную подтяжку для механических контактов. В чем проблема? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iliusmaster 5 26 июня, 2018 Опубликовано 26 июня, 2018 · Жалоба Что за блажь использовать низкоомную подтяжку для механических контактов. Кто этот миф распускает, интересно? Т.е. интересует первоисточник. Например.http://omronfs.omron.com/en_US/ecb/products/pdf/en-b3sn.pdf. Советские ТУ на кнопочные переключатели. Есть такое понятие как минимальный ток срабатывания. У нормальных(грамотных) производителей на любое контактное соединение оно приводится. Контакты у реле, кнопок и контакторов не идеальные, образуется оксидная пленка, которая при малом токе не разрушается и контакта полноценного не образуется. Вот для нормального функционирования кнопок с незолотыми и палладиевыми контактамии нужен увеличенный ток через контактную группу. Да и для золотых и палладиевых есть проблемы при токах меньше 1-10 мка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LLLLLLLLLL 8 26 июня, 2018 Опубликовано 26 июня, 2018 (изменено) · Жалоба Есть такое понятие как минимальный ток срабатывания. У нормальных(грамотных) производителей на любое контактное соединение оно приводится. Контакты у реле, кнопок и контакторов не идеальные, образуется оксидная пленка, которая при малом токе не разрушается и контакта полноценного не образуется. Вот для нормального функционирования кнопок с незолотыми и палладиевыми контактамии нужен увеличенный ток через контактную группу. Да и для золотых и палладиевых есть проблемы при токах меньше 1-10 мка. * Вообще-то оксидная пленка пробивается не током , а НАПРЯЖЕНИЕМ, минимальное значение которого и указывают для коммутационных устройств. Писанина про "минимальный ток" - бессмысленное словоблудие. Единственный физический эффект, который может создать сверхмалый ток -это дробовой шум, вызванный неравномерностью потока электронов и дискретностью их заряда. Но этот шум никак не влияет на наличие контакта. Изменено 26 июня, 2018 пользователем =L.A.= Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 26 июня, 2018 Опубликовано 26 июня, 2018 · Жалоба Писанина про "минимальный ток" - бессмысленное словоблудие. И тем не менее в документе на кнопку есть Minimum applicable load (reference value) 10 μA at 1 VDC (resistive load) Видимо ток играет роль. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 26 июня, 2018 Опубликовано 26 июня, 2018 · Жалоба Имхо, физика процесса тут не очень однозначная: разрушение тонкой пленки может происходить как от пробоя так и от ее выгорания (или и то и то). Разрушения этой пленки можно добиться лишь подняв до максимума напряжения на контакта нажатой кнопки с такими контактами. По сути в таком виде кнопка в нажатом состоянии имеет некое сопротивление, скажем, несколько кОм. Если резистор подтяжки будет сравним с сопротивлением нажатой кнопки с такими "окисленными" контактами, то схема попросту не "увидит" состояние кнопки. Чтобы уменьшить сопротивление такой нажатой кнопки, нужно "пробить/сжечь" эту пленку. Самый простой путь: значительно уменьшить сопротивление подтягивающего резистора - в разы меньше, чем сопротивление "окисленной" нажатой кнопки. Тогда на ней будет напряжение, близкое к напряжению питания. Вижу два варианта исхода: 1) кратковременный локальный разогрев этого паразитного сопротивления нажатой кнопки и оксидный слой выгорит от перегрева. 2) слой будет разрушен от пробоя более высоким напряжением. Я считаю, что в реальных схемах с относительно невысоким напряжением питания 1й вариант более вероятен. В любом случае образование тонких высокоомных слоев на поверхности контактов мощных реле неизбежно и требует учета при разработке и эксплуатации реле. Пленки оксидов и сульфидов обладают свойствами изоляторов или даже полупроводников, но благодаря туннельному эффекту тонкие слои оказывают незначительное влияние на рост переходного сопротивления. При увеличении толщины слоя (например, при работе негерметичного реле на открытом воздухе) растет его сопротивление. Для создания надежного контакта непроводящий слой при срабатывании реле должен быть разрушен. В правильно спроектированных реле разрушение слоя происходит механическим путем (контакты ударяются и трутся друг о друга) и термоэлектрическим способом при протекании тока большой величины через контакты. Взято тут: https://www.atof.ru/pea/relay/rl_010.shtml Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 26 июня, 2018 Опубликовано 26 июня, 2018 · Жалоба Например.http://omronfs.omron.com/en_US/ecb/products/pdf/en-b3sn.pdf. Советские ТУ на кнопочные переключатели. А подумать? "Minimum applicable load" в 10 мкА означает что при меньшем токе вы будете ловить токи утечки кнопки, поскольку у нее довольно маленькое сопротивление утечки, всего 100Мом. Т.е. при 250 В вы получите 2.5 мкА утечки. Вот ребята вас и предупреждают. Токи величиной в микроамперы гуляют по воздуху туда сюда просто из-за атмосферного электричества и электромагнитных полей. Я же под низкоомной нагрузкой полагал сопротивление максимум в пару десятков Ом. Вот где такие рекомендации? А загрязнение контактов реле отдельная тема. Если посмотреть на эти контакты под микроскопом, то видно что основная проблема у них - это эрозия и выгорание от коммутации больших токов. Грязь там появляется вследствии горения. Поэтому совет противоположный - никогда не коммутировать при низкоомной нагрузке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 26 июня, 2018 Опубликовано 26 июня, 2018 · Жалоба Поэтому совет противоположный - никогда не коммутировать при низкоомной нагрузке. Видать, вы еще не сталкивались с подобными проблемами коммутации контактов относительно мощных концевиков/переключателей. Поэтому я пришел к выводу, что понятия большой и малый ток, нагрузка и т. п. весьма относительны. В любом случае источником информации является документация на тот или иной коммутационный элемент. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 26 июня, 2018 Опубликовано 26 июня, 2018 · Жалоба . . . .Как написать компактный и "красивый" код? . . . Дайте pls примеры . . . .Вот пример моего кода (из первых версий), без претензий на красивость и компактность. Скорее наоборот. Претензии - на функциональность. (обработка в "событийном" режиме, очередь, скан-коды, обработка удержания). Без комментариев :) Обрабатывать напильником до требуемой формы. // MSP430, S_M_V // -------- keyb --------- #define S_PORT_KEYB_IN P6IN #define S_PORT_KEYB_OUT P6OUT // P6.0 . . . P6.3 - входные линии матрицы, подтянуты через 100к на GND // P6.4 . . . P6.7 - выходные линии матрицы (опрос линии установкой в 1) static char key_wr = 0, key_rd = 0, keyCodeScan_old = 0; char keyCodeScan = 0, KeyCode = 0; char KeyCodeRep = 0; // запомнить код удерживаемой клавиши char f_repeat = 0; // флаг удержания нажатия t16_sint time_repeat; // таймаут удержания клавиши, после которого работает автоповтор // процедура сканирования клавиатуры (аппаратный опрос линий) // void OS::system_timer_user_hook() // Периодически вызывается в тиках OS или в обработчике таймера void KEY_Scan_R(void) { static char F_Press_now = 0, F_Press_old = 0, KKeyCode = 0; // ================== KEY =================================== SOUND_OFF; keyCodeScan_old = keyCodeScan; // проверка изменения коорд. нажатия F_Press_old = F_Press_now; // контроль событий нажатия-отжатия key_rd = S_PORT_KEYB_IN & 0x0F; // Read keyLines 0...3 (InData) from PORT keyCodeScan = (key_wr << 4) & 0xF0; // номер скан-линии 0 1 2 3 (row) keyCodeScan |= key_rd & 0x0F; // считанные столбцы (col) if( keyCodeScan & 0x0F ) // нажата как минимум 1 клавиша { // нажата ли любая кнопка ? 0F маска - читаем из порта только "приемные" линии F_Press_now = 1; if( keyCodeScan != keyCodeScan_old ) // изменен скан-код ? { // первый вход по нажатию клавиши time_repeat = 0; // сбросить таймаут f_repeat = 0; } else // повторные входы по нажатой клавише { if( f_repeat == 0 ) // пока нет события "удержание", ++ таймера { if( time_repeat > 62 ) //4 // 62 цикла по 16 мс - около 1с { time_repeat = 0; // сбросить таймаут f_repeat = 1; } else time_repeat++; } } } else // клавиша не нажата { F_Press_now = 0; // холостой проход - без нажатий } // ---------- выдать скан-линию для следующего цикла -------- if( !F_Press_now ) // продолжаем сканировать линии - тк нет нажатия { // далее только если не нажата кнопка if( key_wr == 3 ) key_wr = 0; else key_wr++; // счетчик скан-линий ++ // ---------------------- if( key_wr == 3 ) S_PORT_KEYB_OUT = 0x80; // A B C D выбор столбца D0 D1 D2 D3 if( key_wr == 2 ) S_PORT_KEYB_OUT = 0x40; // 3 6 9 # if( key_wr == 1 ) S_PORT_KEYB_OUT = 0x20; // 2 5 8 0 if( key_wr == 0 ) S_PORT_KEYB_OUT = 0x10; // 1 4 7 * } // заменить switch на перекодировку по ассоц.массиву // ------- скан для матрицы 4x4 --------------------- // перекодировка в KKeyCode - для PCB F5438A с подключением на мембр. кл-ру 4x4 // кабелем 9-w и HDR'10 на PCB switch( keyCodeScan ) { // key_wr == 0 1 4 7 * case (0x00 | 0x01): KKeyCode = 0x31; break; // 1 case (0x00 | 0x02): KKeyCode = 0x34; break; // 4 case (0x00 | 0x04): KKeyCode = 0x37; break; // 7 case (0x00 | 0x08): KKeyCode = 0x2E; break; // * ekeyPoint // ---------------- // key_wr == 1 2 5 8 0 case (0x10 | 0x01): KKeyCode = 0x32; break; // 2 case (0x10 | 0x02): KKeyCode = 0x35; break; // 5 case (0x10 | 0x04): KKeyCode = 0x38; break; // 8 case (0x10 | 0x08): KKeyCode = 0x30; break; // 0 // ---------------- // key_wr == 2 3 6 9 # case (0x20 | 0x01): KKeyCode = 0x33; break; // 3 case (0x20 | 0x02): KKeyCode = 0x36; break; // 6 case (0x20 | 0x04): KKeyCode = 0x39; break; // 9 case (0x20 | 0x08): KKeyCode = 0x04; break; // # ekeyEnter // ---------------- // key_wr == 3 A B C D case (0x30 | 0x01): KKeyCode = 0x01; break; // A F1 case (0x30 | 0x02): KKeyCode = 0x02; break; // B F2 case (0x30 | 0x04): KKeyCode = 0x03; break; // C F3 case (0x30 | 0x08): KKeyCode = 0x05; break; // D F4 default: KKeyCode = 0x00; break; // ekeyNO } KeyCode = KKeyCode; // ================= /KEY =================================== if( F_Press_old && !F_Press_now ) // KEY_OFF { // обработка отжатия time_repeat = 0; if ( f_repeat == 2 ) // если был режим "отпуск-удержания" (2) { KEY_push( (t16_sint) (KeyCodeRep | 0x4000) ); // (стоп удержания) маска 0x40 //KEY_pushBf( (t16_sint) ( 0x99 | 0x4000) ); f_repeat = 0; } } if( !F_Press_old && F_Press_now ) // KEY_ON { // обработка нажатия SOUND_ON; KEY_push( (t16_sint) KKeyCode ); // тк буфер 16-битный } if( F_Press_old && F_Press_now ) // KEY_ON_ON_ON { // обработка удержания if( f_repeat == 1 ) { f_repeat = 2; // положить в буфер код "удержания", переключиться в след. цикле на // ожидание "отпуск-удержания" (режим 2) KEY_push( (t16_sint) (KKeyCode | 0x8000) ); // (старт удержания) маска 0x80 // --------- системный ресет -------------------- if( KKeyCode == 0x31 ) // Reset на удержание клавиши <1> { SLEEP(100); WDTCTL = WDTPW | WDTHOLD; asm ("push &0xfffe"); asm ("ret"); } // -------- /системный ресет -------------------- KeyCodeRep = KeyCode; // сохранить для выдачи кода отжатия } } }// KEY_Scan(void) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 26 июня, 2018 Опубликовано 26 июня, 2018 · Жалоба В последних проектах юзаем ADP5589. Изначально я был против. Теперь - категорически рекомендую.Опрос клавиатуры на С получается красивый и лаконичный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 26 июня, 2018 Опубликовано 26 июня, 2018 · Жалоба В последних проектах юзаем ADP5589. Изначально я был против. Теперь - категорически рекомендую.Опрос клавиатуры на С получается красивый и лаконичный. Код в студию! Имхо, за цену этой чудо-микросхемы можно купить довольно "толстый" МК, которого за глаза хватит для этой задачи. Код получает не менее лаконичный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 27 июня, 2018 Опубликовано 27 июня, 2018 · Жалоба Имхо, за цену этой чудо-микросхемы можно купить довольно "толстый" МК, которого за глаза хватит для этой задачи. Ну это зависит от цены проекта и стоимости часа разработчика :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 27 июня, 2018 Опубликовано 27 июня, 2018 · Жалоба Ну это зависит от цены проекта и стоимости часа разработчика :rolleyes: Спорно. С этой чудо-микросхемой плата выйдет сложнее и само собой дороже. Код - тоже спорно: с чудо-микросхемой нужно читать-писать соотв. регистры по I2C, т.е. писать по сути для нее драйвер. Без нее - простой цикл опроса матричной клавиатуры (см. второй пост этой темы). Короче, из пушки по воробьям B) Имхо, вижу единственное разумное применение такой "микрульки" - батарейное питание: проц. всегда спит и просыпается по прерыванию от этой микросхемы, которая в режиме ожидания потребляет около 1мкА. Но это решаемо и без нее: перед входом в сон "тянем" вниз все линии клавиатуры (скажем, строки), и ждем прерывания по любому из столбцов. Т.е. ждем нажатия любой кнопки. После просыпания делает все по обычной схеме, определяя какая именно кнопка нажата. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 27 июня, 2018 Опубликовано 27 июня, 2018 · Жалоба В последних проектах юзаем ADP5589. Изначально я был против. Теперь - категорически рекомендую.Опрос клавиатуры на С получается красивый и лаконичный. Я выбрал AS1115-BSST Дополнительно поддерживает еще и семисегментный дисплей. Тема неплохо экономит ресурсы. Когда управляешь двигателями и кучкой SMPS-ов одновременно то реально не хватает ног да и лишние прерывания ни к чему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 14 27 июня, 2018 Опубликовано 27 июня, 2018 · Жалоба Тема ушла куда то "налево" :( А хотелось просто увидеть код хорошего простого решения по клавиатуре... Встречал эти библиотеки: http://chipenable.ru/index.php/programming...osa-knopok.html https://github.com/Celeron/gcc-celeronkeyinputlib Сам эти библиотеки не пробовал, но можно на их примере посмотреть, как другие делают. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 27 июня, 2018 Опубликовано 27 июня, 2018 · Жалоба Код в студию! . . .чип полезный в хозяйстве, но малодоставабельный, по крайней мере у нас. Разве что для фирмы брать партией. Решение с таким чипом полезно, когда "морда" прибора имеет клавиатуру и дисплей на отдельной PCB. Если у обоих - I2C (например LCD TIC32) то получится очень неплохо. Хотя сейчас пошли в работу емкостные матрицы как на спец. контроллерах, так и на базе обычных контроллеров или с узлом периферии touch-sense (см. Texas instr. MSP430 и тд) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться