Fun Electronic

Электронные поделки, программирование микроконтроллеров, и прочая белиберда|Electronic Basteleien, Mikrokontroller Programmierung und anderes Quatsch

RSS
people

Мои инструменты — Ламинатор для ЛУТ 2|Meine Werkzeuge — Laminator für LBE 2

Так вот. Теперь подробнее про ламинатор. Начнем со схем.

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

PWMSch

К одному штекеру подключается один провод от 220-ти вольт. К другому один провод от мотора (или «утюга»). Свободные концы мотора («утюга») и 220-ти вольт соединяются между собой. Таким образом сделали мы включатель. Скорость включения/выключения надо подобрать таким образом, что-бы время включения было чуть больше периода синусоиды в розетке (50 герц у нас, 60 герц в Америке, если я правильно знаю). Т.е. не меньше 20 милисекунд. У меня в программе я подобрал параметры аппаратного ШИМ микроконтроллера таким образом, чтобы минимум включенного и выключенного состояния был 25 милисекунд.

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

И именно по этой причине не получилось бы плавно регулировать скорость мотора. Но он итак во включенном состоянии медленно крутится, потому я в программе его просто включил и забыл. Точнее не забыл, а включаю его в каждом проходе основного цикла, на случай, если вдруг программа  сбойнет, и моторо отключится. Этакий момент безопасности — мотор должен крутиться всегда.

Теперь поглядим на клавиатуру:

KeysSch

Обычное матричное подключение, требующее на 6 кнопок — 5 пинов от микроконтроллера.

Опрос клавиатуры довольно прост. Строки у нас подключены ко входам, и подтянуты к единице внутренними PullUp сопротивлениями. А столбцы подключены к выходам. И в цикле мы сначала опускаем один столбец в 0, считываем входы, и если где-то у нас появился 0, то значит эта кнопка на этом столбце нажата. Тоже самое повторяем со вторым столбцом. Все довольно просто. Но не совсем. У нас есть такое понятие как дребезг контактов. Как бороться с этим?

Глянем на функцию опроса клавиатуры, расположенной в файле Buttons.c:

[codesyntax lang="c" lines_start="80" container="div" title="Button Scan" ]
void Button_Scan( void )
{
  u08 bCol;
  u08 bTemp;
  u08 bNewButPins;
  static u08 bOldButPins = 0;

  bNewButPins = 0;

  for( bCol = 0; bCol < 2; bCol++ )
  {
    bTemp = BUT_COL_PINS | 0x1F ;

    BUT_COL_PORT = bTemp & ~(1 << bCol);
    _NOP(); _NOP(); _NOP(); _NOP();

    bTemp = BUT_ROW_PINS;
    bTemp >>= 2;

    bNewButPins |= (bTemp & 0x07) << (3 * bCol);
  }

  bNewButPins = (~bNewButPins) & 0x3F;

  // bTemp = BUT_COL_PINS | 0x1F;
  BUT_COL_PORT = BUT_COL_PINS | 0x1F;// bTemp;

  bButPins = bOldButPins & bNewButPins;

  bOldButPins = bNewButPins;

}
[/codesyntax]

В строке 86 видно определение переменной bOldPins, которой сразу же присваивается значение 0. Это статическая переменная, т.е. при следующем вызове функции — переменная сохранит старое значение, которое было у нее в момент прошлого выхода из функции.

А теперь глянем на строку 108. В этой строке мы формируем значение для глобальной переменной bButPins. Но как? Мы делаем логическое И старого состояния кнопок с только что прочитанным. А потом, в строке 110 присваиваем нашей статической переменной bOldPins новое состояние кнопок. Т.е. при следующем вызове функции в этой статической переменной bOldPins будет состояние кнопок, которое было во время предыдущего вызова. Вы следите за мной?

Вот. Эта логическая операция И и позволяет нам только лишь при следующем вызове функции перенести в глобальную переменную bButPins нажатые кнопки.

Таким образом если мы  будем вызывать эту функцию не сильно часто, а с таким временным интервалом, когда дребезг уже прошел, то мы получим автоматическое отфильтровывание этого самого дребезга. Я поставил таймер вызова этой функции на 25 миллисекунд. По моему этого достаточно, чтобы дребезг прошел, но не сильно медленно, чтобы человек заметил задержки.

Вот и весь трюк.

Теперь нам остается только посмотреть на установленные биты в переменной bButPins, чтобы узнать, какие кнопки нажаты. Если кто внимательно читал, должен заметить, что мы то считываем нули в качестве нажатости кнопки, так почему же биты должны быть установлены? А я их инвертирую в строке 103. Эта операция инвертирования также необходима для нашей системы подавления дребезга из-за логической операции И.

На плате кнопки расположены следующим образом:

KeysPCB

Теперь пару слов про сенсор. В качестве сенсора я взял обычный стеклянный диод 1N4148, как и в проекте-вдохновителе. Но почитав повнимательней, и послушав комментарии знакомых понял, что он довольно быстро деградирует, месяца через три — пять значения будут скакать на нем. Так что либо можно будет их менять каждые месяца 3-5, и делать калибровку, либо заменить на другой сенсор, например на KTY81-300, что я и собираюсь сделать в ближайшее время. Сенсор уже закуплен.

Этот же диод подключается катодом к земле, анодом ко входу АЦПа микроконтроллера. Если будете ставить другой какой сенсор, то имейте ввиду, что максимальное напряжение  на входе АЦП не должно быть выше чем 0,7 вольта. Все это потому, что на данный момент программа настроена именно на это соотношение сторон делителя R4-Сенсор, и не использует float данные. Вместо float у меня просто все данные умножаются на 100. Т.е. если напряжение будет больше, то может произойти переполнение переменных, и все подсчеты будут просто не верными.

Updt:

В комментах люди спрашивали, что за фюзы выставлены у Меги 8.

Отвечаю — вот такие :

fuses

Обратите внимание на выделенное красным!!!

Programmed (запрограммированный) — это тот, у которого стоит галочка! И именно этот бит равен 0. Незапрограммированый бит равен 1.

Там же есть значения самих Fuse — байт. В случае Меги 8 нам нужны только Low и High, так как Extended у Меги 8й нет. Просто программатор об этом еще не знает.

Ну вот теперь вроде как все.

В следующей статье расскажу, как работает вся система в целом, как ей пользоваться, а пока список файлов для проекта:

Upd: Так как часто возникают вопросы по подключению дисплея, с разрешения автора выкладываю альтернативную схему ламинатора, в котором использован «нормальный» дисплей, точнее его подключение, а так же использован микроконтроллер ATMEga8 в TQFP корпусе. Пока что без печатной платы, да и схема еще не совсем доделанная, но зато подключение дисплея уже видно невооруженным взглядом.

laminator-schematic-tqfp

65 комментариев to “Мои инструменты — Ламинатор для ЛУТ 2|Meine Werkzeuge — Laminator für LBE 2”

  1. demadsv Says:

    А в какой среде компилировать исходники?

  2. MasterAlexei Says:

    @demadsv: я компилил с помощью GCC версии WinAVR-20050214.

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

  3. Strong Time Says:

    Здравствуйте!!! решил на днях повторить на днях Ваш проект. Вопрос стал в следующем. У меня в ламинаторе нету термореле 🙁 И еще, не кинете ссылку где находятся печатные платы?

  4. MasterAlexei Says:

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

    Я уже где то в каментах к другим постам писал про печатные платы. Печатных плат нет, так как я их делаю под свои корпуса и под свои технологии нанесения рисунка и травления, и не всем они подойдут, как по размерам, так и по технологиям. Ну и потом — не у всех есть такие запчасти/детали, какие есть у меня (и наоборот). По этой причине я выкладываю только схемы.

  5. Strong Time Says:

    Жаль 🙁 Написать ПП с нуля я не умею 🙁 А вот подправить под свои детальки то мог бы...

  6. Strong Time Says:

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

    Понимаю что вопрос мой не совсем по теме, но Вы как человек имевший дело с ламинатором может знаете.

    Заранее спасибо Вам!

  7. MasterAlexei Says:

    Так «глубоко» я не разбирал свой ламинатор 🙂

    По Вашему описанию смею предположить, что серебристая пластинка может быть кварцевым стеклом, а может и просто обычной термостойкой картонкой (в фенах и тостерах на такую наматывают нихром), или же может быть асбестом листовым, если это именно пластинка.

    Сами валики, насколько я помню (кто-то говорил где-то), это силикон, вроде как.

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

  8. Strong Time Says:

    по ощущениям это как картон 🙂

    как я уже понял, этот *бутерброд* был для того, что бы рассеивать тепло которое создает нихромовая нить, так как если ее просто включить то она сразу же и лопнет, конечно же со вспышкой 🙂

    Просто этот картон был настолько хрупкий что при попытки вытащить элемент, он попросту обломался на попалам 🙁

    Спасибо за ответ. завтра значит сбегаю на рынок гляну что там получится найти. И заодно прикуплю детальки для регулятора 🙂

Leave a Reply

You must be logged in to post a comment.