В ходе работы «инженером всего» в типографии приходится сталкиваться с ремонтом и апгрейдом некоторых хитрых устройств, в быту обычно не встречающихся. Одним из «любимчиков» у меня является детище сумрачного шведского гения, электрический степлер Rapid 106. С одной стороны, самый старый «рапид» у нас работает с начала двухтысячных, это показатель. С другой стороны, проблем с ними хватает. Некоторые приколы связаны со специфической электроникой.

И вот, однажды чаша терпения была переполнена. На тот момент я знал, что «рапиды» плохо относятся к помехам в сети (а мощные частотные приводы неподалеку имеются), что один из них недавно сказал: «ПЫЩЬ!» и больше не включался, и что новый аппарат стоит порядка 40 тысяч рублей.


Сначала я хотел провести реверс-инжиниринг родной платы. Но в процессе решил, что мне категорически не нравятся некоторые технические решения оригинала. Да, самонадеянно, но в голове уже оформлялась концепция «как сделать проще». Вот некоторые особенности схемотехники, казалось бы, такого простого устройства, как электрический степлер:

1. Четыре микросхемы — два мультивибратора, один счетчик, один набор триггеров.
2. Под сотню других элементов.
3. Питание микросхем (на минуточку, КМОП!) реализовано без гальванической развязки с сетью.
4. Имеется схема оптической синхронизации степлера с другим оборудованием. Можно два степлера использовать «в линию». Никогда не использовалось.
5. Электромагнит степлера коммутируется симистором.


Родная электроника степлера

Из этих пунктов волевым решением первые четыре признаны ненужными. Сформирован новый принцип работы:

1. Для управления электромагнитом используется типовое включение оптопары MOC3052. Силовой симистор и снаббер (резистор и конденсатор) перекочевывают в новую схему.
2. Управляющий импульс на оптопару дает микроконтроллер.

Таким образом, имеем ATTiny13A, в котором используются компаратор (для детектирования перехода сетевого напряжения через ноль), АЦП (переменным резистором на нем задается задержка выдачи ударного импульса), один вход (педаль-кнопка) и один выход (для выдачи импульса).

О нарезке синусоиды

Симистор, который управляет электромагнитом, открывается при подаче управляющего напряжения, а закрывается — при переходе сетевого напряжения через ноль (при отсутствии управляющего напряжения). Открывать симистор можно либо в ноле, либо на каком-то участке полупериода. Если мы открываем в ноле, то получается все очень красиво и гуманно, нет помех от резкого нарастания напряжения, но мы тогда мы можем оперировать только целым числом полупериодов. Оптопара MOC306x оснащена встроенным детектором ноля, т.е., включается и выключается только в ноле. По факту, объединив ее с силовым симистором, мы получим твердотельное реле переменного тока.


Исполнительное устройство

Но в нашем случае все хуже. «Рапид» по принципу управления похож не на твердотельное реле, а на диммер. То есть, по команде оператора наш блок управления должен включить симистор в определенном месте полупериода. Выключится он сам по достижению ноля. От того, насколько большой участок полупериода задействован, зависит в итоге сила удара. Так что, используем оптопару MOC305x, в которой нет схемы детектирования ноля.

Конкретика

Итак, алгоритм работы определен:
1. Нажатие на педаль оператором.
2. Определение задержки включения симистора. В зависимости от положения переменного резистора (включен делителем между Vcc и GND, средний вывод на входе АЦП) вычисляется задержка (мс), лежащая в заданном диапазоне (опытным путем подобрано, 3-5 мс).
3. Детектирование ноля сетевого напряжения (с помощью компаратора микроконтроллера).
4. Отработка задержки.
5. Выдача управляющего импульса длительностью 1 мс на оптопару.

Грабли были в пункте №3. Как ловить ноль микроконтроллером? Простейшее решение — даем на один вход компаратора с делителя сетевое напряжение, на второй — чуть больше ноля (с другого делителя). При этом нарушается гальваническая развязка высоко- и низковольтной частей схемы, а в реальных условиях получаем отвратительную помехоустойчивость и случайные срабатывания. На этом внутренний джедай сказал мне: «Решай проблему в лоб». Решение выглядит следующим образом: откуда-то вытащен маленький грязный трансформатор, выдающий 9 В переменного тока. На его выход ставятся два маломощных диодных моста. С одного берем измеряемое пульсирующее напряжение, на другой ставим конденсатор и стабилизатор — это питание микроконтроллера. И вот, она, стабильность!

Детали реализации


Новая плата

Схема — Eagle, разводка — Sprint Layout. Разработка прошивки — Sublime Text (Sublime-AVR). Программирование МК — ChipProg-40. ISP на плате не разведен для упрощения — отладка в железе заняла немного времени, максимум с десяток передергиваний МК из платы в программатор и обратно.

Код прошивки
#include <avr/io.h>
#include <util/delay.h>
#define F_CPU 1200000UL

// Минимальная и максимальная задержки ударного импульса
#define MINDELAY 3
#define MAXDELAY 5

// Педаль на размыкание подключена к PB4. Активный уровень - низкий.
#define PEDAL PB4

// Выход - PB3. Активный уровень - высокий.
#define FIRE PB3 

void delaymsMod(unsigned char ms)
// Компилятор хочет, чтобы аргументом _delay_ms была константа.
// Поэтому приходится делать велокостыль.
{
	for (unsigned char counter=0; counter<ms; counter++)
	{
		_delay_ms(1);
	}
}


unsigned char fireDelay(void)
// Отключить компаратор. Включить АЦП. Получить уставку с переменного резистора.
// Вычислить время, которое будет между переходом через 0 и подачей ударного импульса
// Чем меньше это время, тем больший участок полупериода подается на электромагнит,
// соответственно, сильнее удар. Выключить АЦП.
{
	// ACD - отключение аналогового компаратора
	ACSR |= (1 << ACD); 

	// бит 5 - ADLAR, ориентация данных. Чтобы использовать только 8 бит ADCH
	// биты 0-1 - настройка входа. 01 соотв. ADC1 (PB2)
	ADMUX |= 0b00100001;  

	// ADPS2-1-0 задает делитель тактирования АЦП. 011 соотв. делителю 8
	// Результирующая частота АЦП 150 кГц (1.2 МГц / 8)
	ADCSRA |= (1 << ADPS1) | (1 << ADPS0);

	// Включить АЦП
	ADCSRA |= (1 << ADEN);

	// Начать преобразование
	ADCSRA |= (1 << ADSC);

	// Подождать, пока не сбросится бит преобразования
	while (ADCSRA & (1 << ADSC));

	// Получить 8 бит данных
	unsigned char rawADC = ADCH;

	// Отключить АЦП
	ADCSRA &= ~(1 << ADEN);

	// Вычислить задержку
	return MINDELAY + rawADC * (MAXDELAY - MINDELAY) / 255;
}

void waitForZero(void)
// Включить компаратор. Дождаться перехода через ноль. Выключить компаратор.
{
	ACSR &= ~(1 << ACD);
	_delay_ms(1);
	while ((ACSR & 0b00100000) == 0b00100000);
	ACSR |= (1 << ACD);
}

unsigned char pedal(void)
// Проверить нажатие педали. С подавлением дребезга. Педаль работает на размыкание.
{
	unsigned char pressed = 0; // флаг нажатия
	
	// время, в течение которого должно не прерываться нажатие
	unsigned char pressedTime = 100; 

	if (PINB & (1 << PEDAL)) // педаль нажата, цепь разомкнута, на входе 1
	{
		pressed = 1;

		for (unsigned char counter=0; counter < pressedTime; counter++)
		{
			
			// если в течение заданного интервала педаль отпущена, цепь
			// замкнута, на входе 0 - сбросить флаг нажатия
			if ( !(PINB & (1 << PEDAL)))
			{
				pressed = 0;
			}

			_delay_ms(1);
		}
	}

	return pressed;
}

void fire(void)
// ударный импульс длительностью 1 мс
{
	PORTB |= (1 << FIRE);
	_delay_ms(1);
	PORTB &= ~(1 << FIRE);
}

void setup(void)
{
	// режим порта
	DDRB=0b00001000;
}

int main(void)
{
	setup();

	while (1)
	{
		if (pedal())
		{
			waitForZero();
			delaymsMod(fireDelay());
			fire();

			while(pedal());
		}

	}
	return -1; // Никогда
}



Для освоения дополнительных навыков монтажа использованы SMD резисторы (1206) и конденсаторы (0805) в низковольтной части схемы. Технология изготовления платы:

1. Кусок какого-то текстолита. Очистка жесткой посудной губкой и «Пемолюксом».
2. Пленочный фоторезист (Ordyl Alpha 350). Прикатка ламинатором GMP (120 градусов, мин. скорость).
3. Фотошаблон (прозрачная пленка, принтер Oki 9655).
4. Засветка 20-ваттной УФ-сберегайкой (6 минут).
5. Смывка лишнего (поташ).
6. Травление (хлорное железо, водяная баня, периодическое воздействие мягкой кистью).
7. Сверление, лужение, запайка, испытания.


SMD-на-коленке и исправление ошибки при разводке

Итого

Потрачена уйма времени. От идеи до реализации прошло две недели, занимался проектом в «свободное рабочее время». Но зато теперь есть простой, понятный, дешевый и легко повторяемый блок управления степлером. Получен дополнительный скилл — использование оптопар и симисторов для управления нагрузкой.

Все наработки — на гитхабе.

UPD. Добавил видео. Снято на чайнафон с плохой камерой, но общее представление дает. Первые два удара «холостые» по причине практически полной убитости степлирующей головки, она использовалась для отладки общей концепции.

Комментарии (27)


  1. woopler
    27.04.2015 19:13
    -2

    детектором ноля


    1. eta4ever Автор
      27.04.2015 19:43
      +1

      А что не так?


    1. eta4ever Автор
      27.04.2015 20:12
      +2

      Там была ошибка, которую я на автомате исправил и уже забыл?


  1. MaxFactor
    27.04.2015 19:23
    +3

    Видео Вашего работающего детища не хватает.


    1. eta4ever Автор
      27.04.2015 19:45

      А надо? Он работает "как родной", только корпус весь обшарпан за долгие годы.


    1. eta4ever Автор
      27.04.2015 19:54

      Ну, то есть, выглядит он весьма непрезентабельно.


      1. MaxFactor
        27.04.2015 20:24
        +2

        Уж очень интересно посмотреть на работу такого автостеплера — ни разу не видел.


        1. eta4ever Автор
          27.04.2015 20:27

          Завтра попробую сделать.


        1. eta4ever Автор
          28.04.2015 22:00

          Пообещал, но пока не сделал, к сожалению. Обязательно отпишусь.


        1. eta4ever Автор
          30.04.2015 14:39

          Добавил плохонькое, но таки видео.


  1. mickvav
    27.04.2015 21:00

    А зачем вообще все эти пляски с детектированием нуля, если можно тупо выпрямить переменное напряжение, а время включения отрегулировать rc-цепью? Тогда и микроконтроллер не нужен.


    1. eta4ever Автор
      27.04.2015 22:02
      +2

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

      Но меня волнует другое. Вы можете мне на пальцах описать, что будет происходить в цепи на спаде прямоугольного импульса, когда при этом еще в катушку влетает отпружиненный сердечник? Катушка с неизвестными характеристиками, но, скажем так, не маленькая, чтобы «поставить диод и остальным пренебречь».


      1. mickvav
        27.04.2015 22:48

        Зачем там мультивибратор? Просто сделайте rc-цепь, зажигающую на время порядка RC светодиод оптопары по нажатию на педаль и заряжающую свой конденсатор при отпускании. Уже хочу сотворить нечто в этом духе со школьниками на попробовать. Катушка мощная есть, осталось тиристор подобрать и диоды. Если получится — отпишусь.


        1. eta4ever Автор
          27.04.2015 23:05
          +1

          Так, минутку. Давайте немного предметнее. Какую оптопару вы хотите использовать на постоянке? Как будете запирать силовой тиристор? Как бороться с выбросом в катушке на спаде импульса?


          1. mickvav
            04.05.2015 23:58
            +1

            Ну, после спокойного и вдумчивого решения аналоговая схемка получилась-таки не самой халявной и таки да, работать оно должно не на постоянном, а на выпрямленном диодным мостом напряжении. И ловить спад приходится anyway. Оптопару придётся подбирать по способности открыть тиристор — конкретные модельки ещё не смотрел. И тиристора нужно два — один чиловой, один — слаботочный, как раз чтобы дребезг убрать.


            1. eta4ever Автор
              05.05.2015 00:12

              То есть, принципиального упрощения не получается. Я тоже немного подумал над этим на досуге.
              Я забыл упомянуть в материале об одной вещи. Как-то вылетело из головы. Немаловажным в ходе проектирования было желание оставить силовую часть (симистор-снаббер-электромагнит) в первозданном виде, она ведь, по наблюдениям, работает так порядка 10 лет без нареканий.


      1. eta4ever Автор
        27.04.2015 23:33
        +1

        Вопрос про дребезг педали также в силе.


        1. Alexeyslav
          28.04.2015 00:47

          Вопрос дребезга педали вообще не стоит… за время отработки алгоритма он пройдет чуть более чем полностью. Для надежности можно перед возвратом в цикл ожидания нажатия педали подождать еще 100мс. Ведь правда, человек не будет строчить по 10 скрепок в секунду? Или есть прецеденты?
          Кстати туда надо две кнопки, одна на нажатие педали, другая на отпускание(разные точки хода педали). Тогда проблемы дребезга существовать вообще не будет.


          1. eta4ever Автор
            28.04.2015 00:48

            Это вопрос к mickvav. Может быть, веткой промахнулся. У меня с дребезгом все хорошо.


  1. Mulin
    28.04.2015 00:20
    +2

    Маркетологи бы назвали «умный степлер»


    1. eta4ever Автор
      28.04.2015 00:22
      +4

      Чтобы назвать его «умным», надо приделать цветной дисплей с тачскрином.


      1. Alexeyslav
        28.04.2015 00:49

        У человека нет цветного дисплея с тачскрином, да и имеющиеся средства коммуникации очень несовершенны. Тем не менее его называют умным…


        1. eta4ever Автор
          28.04.2015 00:51
          +3

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


  1. insomnium1
    29.04.2015 07:20

    жду топор с микроконтроллером


    1. eta4ever Автор
      29.04.2015 12:36

      В целом, почему нет? Акселерометр, Bluetooth-модуль, и вуаля, фитнес-трекер для дровосексуалов.


      1. Alexeyslav
        06.05.2015 15:26

        Это все финтифлюшки… вот сделать бы чтобы тот добивал после касания топора поверхности как отбойный молоток…


        1. eta4ever Автор
          06.05.2015 15:48

          Топор сложный получится — подвижная часть, пневматику заводить как-то надо (через топорище, наверное). Но в целом, не вижу ничего невозможного.