По результатам поиска в Google - Arduino в Украине не нашлось! Пусть этот блог будет началом!!!

пятница, 6 сентября 2013 г.

From Arduino to Raspberry Pi и назад

В продолжение вопроса построения термопринтера печатающего твиты, почту и т.д. Для управления термопечатающим механизмом я планировал использовать arduino pro mini 5v. А для связи с внешним миром - arduino + Ethernet shield. Проведя обзорный поиск по инету, как вообще быть с почтой, твиттером, и как его потом печатать, я понял, что для реализации на arduino это довольно сложная задача. Тут мне попала в руки (временно) raspberry pi! И я сразу увидел потенциал: во первых интернет (почта, твиттер, и т.д.) работает изначально! Во вторых преобразования там всякие и т.д на Python намного легче, огромное к-во русских сайтов и т.д. по питону. В третьих есть выходы для управления переферией и связи (GPIO.... )
    Как оказалось для управления шаговым двигателем термопринтера и печкой термопринтера нужно очень точно управлять промежутками времени в микросекундах... выдержка из документации на термопринтер:

5.1 Схемы управления термопринтером Подсистема управления термопечатающим механизмом состоит из следующих основных узлов:
  • драйверы привода шагового двигателя – микросхемы DD1;
  • интерфейс управления термопечатающей головкой;
  • схема измерения температуры печатающей головки;
  • схема обнаружения конца бумажной ленты.


Рассмотрим работу каждого из этих узлов по отдельности.
В качестве драйвера привода шагового двигателя используется специализированная микросхема DD1 – BA6845FS. Микросхема содержит два H-моста с выходным током до 1А и низким выходным падением напряжения (сумма падения на обоих выходных транзисторах (“верхнем” и ”нижнем”) типично составляет 0,5 В при протекающем токе 0,4 А).
Шаговый двигатель печатающего механизма содержит по две обмотки с типовым сопротивлением 15 Ом, максимальное напряжение на линии "+HDR" с учетом падения напряжения на VT4 (платы системной) составляет 7,2 В, поэтому максимальный протекающий через каждую из обмоток ток ограничивается их омическим сопротивлением на уровне 0,5 А. Обе обмотки подключены напрямую к выходам H-мостов микросхемы DD1. Рассмотрим таблицу состояний для вентиля BA6845FS. Под обозначением "+VCC" понимается напряжение, подаваемое на вход питания "VCC" (выводы 11 и 14 DD1), под обозначением "GND" – потенциал на выводах "MGND" (выводы 8, 1 DD1), на логические входы "DIR" и "SD/" (входы 5, 4 и 12,13 соответственно) подаются сигналы логических уровней. 
Как видно из таблицы, при подаче на вход "SD/" низкого уровня, выходы отключаются, и ток через обмотку не протекает. Входы "DIR" управляют направлением тока, протекающего через обмотки. На всех логических входах микросхемы DD1 микроконтроллер выдает низкий уровень все время в рабочем режиме и режиме микропотребления, за исключением времени печати или перевода бумаги. В этих режимах используются шаговые двигатели механизмов для привода бумажной ленты чека. На линии "MОT" (входы "SD/" DD1, выход 32 микроконтроллера DD1 платы системной) появляются высокие уровни, разрешающие протекание тока через обмотки двигателя, на линиях "PH1" (выход 30 микроконтроллера DD1 платы системной) и "PH2" (выход 31 микроконтроллера DD1 платы системной) появляются меандры, сдвинутые друг относительно друга на четверть периода, как показано на рисунке 3. Период следования сигналов и, следовательно, скорость вращения двигателя зависит от режима работы принтера. В режиме печати скорость подачи бумаги определяется временем активации нагревательных элементов термоголовки, которое зависит от величины питающего напряжения, температуры головки, плотности выводимого текста и параметров, определенных пользователем. Минимальная длительность полупериода фазы при печати пустой строки или прогоне бумаги составляет 1200 мкс. В режиме прогона бумажной ленты скорость вращения двигателя зависит от наличия бумаги, определяемой с помощью датчика. При обнаружении бумаги полупериод равен 1200 мкс, при отсутствии - 8000 мкс.
Рисунок 3
Если при нажатии клавиши прогона ленты, двигатель не вращается, вращается слабо или в обратную сторону – то проблема или в сигналах "MOT", "PH1", "PH2", в микросхеме DD1, или в обмотках двигателя, или в соединении в разъеме X4. Проверьте наличие сигналов при помощи осциллографа, нажимая клавишу прогона ленты. Затем проконтролируйте наличие сигналов непосредственно на контактах разъема X4 при отключенном двигателе (возможен отказ одного из выходов DD1), и, наконец, подключите принтер и проверьте прохождение сигналов на шаговый двигатель. Не будет лишним также проверить исправность обмоток двигателя и отсутствие замыканий между ними.
Печатающий механизм также содержит датчик определения наличия бумаги. Датчик представляет собой оптопару – светодиод (анод - контакт 1 X4, катод - контакт 3 X4) и npn-фототранзистор (эмиттер контакт 3 X4, коллектор контакт 2 X4). При проверке наличия бумаги, которая происходит кратковременно (0,5-1 мс) перед печатью каждой строки и постоянно при прогоне бумаги в случае ее отсутствия, на анод светодиода через ключ VT1 подается напряжение питания, это сделано для снижения энергопотребления, т.к. для нормальной работы светодиоду надо около 20 мА. При наличии бумаги свет отражается и попадает на фототранзистор, открывая его, и на линии "PАР/" (вход 57 микроконтроллера DD1 платы системной) образуется напряжение низкого уровня. Если бумаги нет, фототранзистор закрыт, и на "PАР/" через внутренний резистор микроконтроллера формируется напряжение высокого уровня. То же самое происходит при отключении светодиода. Светодиод включается кратковременно для обнаружения бумаги перед печатью каждой строки и при прогоне бумаги, если последняя не обнаружена.



Далее рассмотрим интерфейс управления печатающей головкой термопринтера. Данный интерфейс содержит сигналы: "DAT", "CLK" и "LAT/", которые выдаются из микроконтроллера DD1 платы системной (контакты 29, 25, 26) и поступают на управление печатающей головкой термопринтера. Сигнал "DAT" - это сигнал последовательных данных, загружаемых во внутренние регистры печатающей головки. По фронту сигнала "CLK" происходит загрузка одного бита данных. При печати текста сигнал "CLK" имеет вид меандра с частотой от 368 кГц до 900 кГц, сигнал "DAT" также хаотически изменяется. Сигнал "LAT/" является сигналом внутренней перезагрузки, на этом выходе в режиме печати должны появляться короткие отрицательные импульсы длительностью приблизительно 500 нс и частотой прохождения 300 - 800 Гц.

Работой печатающей головки управляет также сигнал "STB". При наличии сигнала высокого уровня на этом входе логика печатающей головки включает нагревательные элементы, согласно данным загруженным в нее по интерфейсу управления. В режиме печати (но не в режиме прогона ленты) на этой линии формируется высокий уровень.
Если качество печати низкое и не зависит от параметров настройки или печать вообще отсутствует, то следует проверить линии "CLK", "DAT", "LAT/", "STB" и схему измерения температуры головки и входного напряжения питания. По двум последним параметрам микроконтроллер рассчитывает время активации термоголовки, и при неисправности цепей измерения этих параметров рассчитанное время будет недостаточным для печати. Минимальное время активации - 1 мс.
Термопечатающая головка содержит полупроводниковый резистор, сопротивление которого зависит от температуры. Микроконтроллеру необходимо знать температуру печатающей головки, чтобы рассчитать время активации нагревательных элементов. Для этого при помощи встроенного АЦП (вход 54 микроконтроллера DD1 платы системной) измеряется напряжение на делителе R19(платы системной)/терморезистор, подаваемое через RC фильтр на R18 и C26 (платы системной). Имеется специальный тест, позволяющий проверить работу данной цепи.
Схема этого участка.

Raspberry pi в общем для этого всего этого не подходит т.к. не может работать устойчиво с промежутками времени в микросекундах. Идеально для этого - Аrduino.
Значит проэкт будет включать часть Raspberry pi (где все будет бурлить на Python  https://temboo.com/) и часть на Аrduino (где будет только алгоритм получения данных в виде строки точек по Serial и непосредственно печать на бумаге этой строки, ну и плюс опрос датчиков)


Аrduino part

Arduino со своей функцией digitalWrite() дает частоту меандра только 119кГц - т.е. мин промежуток (период, частота следования) =  119 мс  - это много. не говоря уже о наносекундах....
void loop() {

digitalWrite(13, HIGH); // set the LED on


digitalWrite(13, LOW); // set the LED off

Автор http://habrahabr.ru/post/141442/ пишет, что можно значительно увеличить скорость работы Arduino с портами если напрямую манипулировать ими. Каждая Arduino имеет порты. Каждый порт — 8 бит, которые сначала надо настроить на запись.
Пример _скоро будет_

Это, пока, конечно, теория... но стоит задуматься... для печати мне нужно 2 меандра на шаговый двигатель ( на линиях "PH1" (выход 30 микроконтроллера DD1 платы системной) и "PH2" (выход 31 микроконтроллера DD1 платы системной) появляются меандры, сдвинутые друг относительно друга на четверть периода, как показано на рисунке 3.) и 2 на термопечатающую головку (По фронту сигнала "CLK" происходит загрузка одного бита данных. При печати текста сигнал "CLK" имеет вид меандра с частотой от 368 кГц до 900 кГц, сигнал "DAT" также хаотически изменяется. Сигнал "LAT/" является сигналом внутренней перезагрузки, на этом выходе в режиме печати должны появляться короткие отрицательные импульсы длительностью приблизительно 500 нс и частотой прохождения 300 - 800 Гц.)

Т.е. нужно будет управлять отдельными пинами порта напрямую создавая там меандры....- во как....

Управление битами порта arduino

sbi PIND, 1 // Инвертировать бит 1 у PORTD

Буду дергать пином туда-сюда с задержкой.... и делать меандр.
А что с задержкой???
Буду читать - http://www.myrobot.ru/stepbystep/pr_mcports.php
http://bb.ssmu.ru/web_server/cvavr/index.php?node=03
http://eugenemcu.ru/publ/2-1-0-53
http://vk.com/topic-2044685_28164388