Апр 142017
 

Карманный кардиограф на SD-карте

Рассматривается простой кардиограф, умещающийся в кармане и обеспечивающий регистрацию электрокардиограммы (частоты пульса), температуры и положения тела человека. Эти параметры запоминаются на карте памяти micro SD, откуда в последствии могут быть переписаны на персональный компьютер (ПК) и при помощи специальной программы отображены в виде графиков (привязанных к времени и дате съемки) для детального изучения.

Устройство разрабатывалось для изучения поведения человека во сне, но может быть также полезно спортсменам и медикам. Начинающих радиолюбителей заинтересует схема регистрации биотоков (когда источником сигнала становится человеческое тело) и пример применения широко распространенных карт памяти SD для сохранения разнородной информации.

Принципиальная схема кардиографа приведена на рис. 1.

Принципиальная схема кардиографа
Рис 1 — Принципиальная схема простого кардиографа

На элементах DA1, DA2, DA3 собран усилитель кардиосигнала. Это обычный УНЧ с дифференциальным входом и высоким входным сопротивлением [1]. К входам усилителя E+ и E- подключается пара электродов, закрепленных на теле в области сердца для съема исходного кардиосигнала. Элементы DA1.1 и DA1.2 работают как повторители, обеспечивающие высокое входное сопротивление. Инструментальный усилитель [2] DA3 усиливает сигнал примерно в 6 раз (коэффициент задается резистором R4) перед подачей на АЦП микроконтроллера DD1.

Помимо полезного сигнала биологического происхождения на электродах E+ и E- присутствуют синфазные помехи (прежде всего 50 Гц от осветительной сети), амплитуда которых в тысячи раз превышает полезный сигнал. Для их подавления используется «активная земля» [3]: на теле закрепляется третий электрод E0, на который с выхода DA2.1 в противофазе подаётся синфазная составляющая входного сигнала. Её выделение выполняет сумматор на R1 и R2, а DA2.1 – усиление и инверсию. Благодаря такой своеобразной отрицательной обратной связи величина синфазных помех резко снижается, и далее они эффективно подавляются DA3. Для формирования опорного напряжения (средней точки) для ОУ DA2.1 и DA3 используются элементы R6, R7, С1, С2, DA2.2.

Для измерения температуры и положения тела к микроконтроллеру DD1 по двухпроводному интерфейсу I2C подключены интегральные датчики температуры ВК1 и ускорения ВК2. Спецификация шины I2C реализуется программно. Резисторы R8 и R10 служат нагрузками линий интерфейса. Резисторы R9, R11, также как R5, R12, R14, R15 защищают выводы микроконтроллера и периферии от перегрузок при сбоях МК (в отлаженное устройство их можно не устанавливать).

Питание акселерометра BK2 осуществляется через диод VD1, который снижает напряжение питания BK2 на 0.7 в, чтобы напряжение «свежезаряженного» Ni-MH аккумулятора GB1 (4.2 в) не превышало паспортного значения для BK2 MMA7455LT (3.6 в). Положение тела определяется по проекции силы тяжести на оси чувствительности BK2, что например позволяет четко различить следующие положения тела: стоя, лежа на спине, на животе, на левом или на правом боку. По изменению ускорения фиксируется двигательная активность.

Функционирование устройства как единого целого осуществляется под управлением микроконтроллера DD1. Сразу после подачи питания устройство работает в режиме записи: DD1 выполняет периодический опрос датчиков BK1 и BK2, измерение частоты на входе CCP1 и оцифровку кардиосигнала. Объединенный информационный поток записывается в файл на карту памяти micro SD (разъем X1), а также выдаётся в ПК по интерфейсу RS-232 (разъем X2) для контроля и визуализации. Командой с компьютера можно остановить запись и перевести устройство в режим скачивания сохраненных файлов.

Сохранение информации осуществляется на карте памяти micro SD [4, 5], которая подключается через разъем X1. В процессе работы карта может потреблять до 100 мА (в импульсе), создавая мощные помехи по питанию, поэтому она запитана от источника GB1 напрямую, а остальная схема через RC — фильтр R16 C5.

От использования стандартной файловой системы FAT на карте SD пришлось отказаться: она не устойчива к внезапному исчезновению питания, а памяти МК не достаточно для буферизации поступающих в реальном времени данных. Разработан альтернативный формат хранения информации. Запись на карту осуществляется последовательно, сектор за сектором. Четырехбайтный номер первого свободного сектора EmptyPos, в который должна осуществляться запись новых данных, хранится в EEPROM микроконтроллера. После записи очередного сектора номер EmptyPos инкрементируется.

В каждом секторе SD-карты (размером 512 байт) наряду с полезными данными сохраняется сигнатура и 4-байтный номер первого сектора файла. Таким образом, хотя данные на карту пишутся строго последовательно, они структурированы в виде файлов, рис. 2. Логика получения списка всех файлов реализуется программой на персональном компьютере; при этом предпринимаются дополнительные меры по контролю и коррекции ошибок.

Механизм последовательной записи файлов на SD-карту
Рис 2 — Механизм последовательной записи файлов на SD-карту

Вместо привычных операций форматирования (при установке новой SD-карты) и удаления файлов (при исчерпании объема карты) пользователем выполняется операция установки EmptyPos на начальный сектор с номером 65536. Первые 65536 секторов карты не используются ради сохранения существующей на карте «настоящей» файловой системы.

Устройство соединяется с компьютером по интерфейсу RS-232 через разъем X2. Резистор R13 ограничивает ток через вывод RX МК в условиях, когда напряжение входного сигнала выше напряжения питания МК. Сигналы на разъёме X2 имеют уровни TTL, поэтому непосредственно подключать компьютер к разъему X2 нельзя! Следует использовать готовый переходник USB-COM от сотового телефона (обычно такие переходники имеют уровни TTL) или изготовить такой переходник самостоятельно на базе микросхемы FT232R по типовой схеме [6]. В крайнем случаем можно собрать преобразователь уровней в TTL на микросхеме MAX232 или по схеме на рис. 3. Через разъем X2 (контакты 5 и 8) может также осуществляться зарядка аккумулятора GB1.

Скорость обмена устройства с компьютером фиксированная: 57600 бод. Только для ускорения переписывания файлов с SD — карты в ПК скорость может быть повышена до 460800, 806400 или 921600 бод (если компьютер их поддерживает). Выдача данных при этом осуществляется МК программно на вывод RC0 (а выход TX отключается).

Простой преобразователь ТТЛ – RS-232
Рис. 3 — Простой преобразователь ТТЛ – RS-232

Для работы с устройством разработана специальная программа для ПК (файл программы EKG_SD_2010.exe прилагается), которая позволяет визуализировать кардиограмму и показания датчиков во время записи, считывать с SD-карты список файлов и копировать нужные на компьютер, сохранять кардиосигнал в стандартном формате WAVE PCM, обрабатывать записи с целью выделения R-зубцов [1] и расчета частоты пульса, визуализировать и сохранять в унифицированном формате полученные временные зависимости. Более подробно работа с программой описана в прилагаемом «руководстве оператора» EKG_SD_2010.doc.

МК DD1 измеряется частоту сигнала на выводе 13, что можно использовать для подключения к устройству дополнительных датчиков. Частота сигнала не должна превышать 8 КГц (относительная погрешность измерения не хуже 10-6, период измерения ~ 0.25 сек).

Детали и конструкция. В качестве DA1 и DA2 можно применять любые ОУ широкого применения, работоспособные в диапазоне питающих напряжений от 2.7 до 4.2 в. Инструментальный усилитель DA3 заменим обычным ОУ, включенным по схеме на рис. 4. Однако при этом желательно подобрать близкими сопротивления резисторов R18 и R19, R20 и R21 (а также R1 и R2).

Для микроконтроллера DD1 должна быть предусмотрена панелька. В него следует занести программу из прилагаемого файла EKG_SD_Pic.hex («фьюзы» хранятся внутри прошивки).

Функциональная замена DA3 AD623
Рис. 4 — Функциональная замена DA3 AD623

Устройство может работать без SD — карты или датчиков BK1 и BK2 с соответствующим снижением функциональности. Это позволяет начинающим радиолюбителям упрощать устройство по своему усмотрению без необходимости изменения прошивки DD1 или программ для компьютера. Например, если надо только наблюдать биотоки в реальном времени, а запись на SD-карту не требуется, то карту (как и дополнительные датчики) можно не устанавливать.

В качестве разъема X1 для подключения micro SD-карты используется переходник micro SD ® SD (они продаются вместе с micro SD картами). Контакты переходника аккуратно лудят, после чего подсоединяют к схеме короткими проводками МГТФ-0.05. На рис. 5 показана нумерация и обозначения контрактов для макро SD — карты (т.е. переходника). Желательно применять карты SD class 4 и выше (из-за малого объема памяти МК максимальная задержка записи одного сектора должна быть меньше 40 мс). Поддерживаются карты HC (ёмкостью ³ 4 Гб).

Нумерация контактов обычной SD-карты (переходника)
Рис. 5 — Нумерация контактов обычной SD-карты (переходника)

Разъем X2 – типа DB9F или более миниатюрный (подходящий к применяемому переходнику COM-USB).

Датчик температуры BK1 фиксируется на теле пластырем, а к основной схеме подключается 4-мя свитыми в жгут проводами МГТФ-0.05 длиной до 50 см.

Монтаж акселерометра BK2 MMA7455LT (размерами 3´5´1 мм) требует определенной ловкости. Проше всего приклеить датчик к плате контактами вверх и подпаять к схеме проволочками 0.1 мм. Конденсаторы С3, С4 должны стоять в непосредственной близости от ВК2. По задумке датчик должен сохранять достаточно постоянное положение относительно торса (или другой выбранной части тела). Чтобы достичь этого, BK2 можно расположить либо в корпусе кардиографа, либо сделать выносным, подключив к основной схеме проводами также как BK1.

Электроды E+, E-, E0 – металлические кружки Æ 10 мм из титана, которые закрепляются в области сердца пластырем. Для экспериментов можно использовать мелкие монеты – но от длительного контакта с телом они начинают ржаветь! Подключаются электроды неэкранированными проводами МГТФ-0.05 (по возможности провода к E+ и E- следует скрутить, а вокруг обвить провод к E0).

Электрод E0 крепится в любом месте (например, приблизительно между E+ и E-). В медицине используют специальные схемы расположения электродов на теле и соответствующие методики анализа кардиограмм [1, 7]. Однако для определения частоты пульса электроды E+ и E- можно располагать в области сердца достаточно произвольно, лишь бы наблюдались достаточно четкие импульсы положительной полярности (как на рис. 6). Кардиосигнал также можно снимать с рук, но импульсы при этом слабее (и их автоматическое выделение затруднительно).

Пример исходного кардиосигнала
Рис. 6 — Пример исходного кардиосигнала

Питается устройство от аккумулятора на 3.6 в. Потребляемый ток зависит от SD-карты и в среднем составляет 20-30 мА. Емкость GB1 более 400 мА/час выбирается исходя из требуемого времени записи (8 — 12 часов). Следует отметить, что напряжение свежего аккумулятора доходит до 4.2 в, превышая установленный предел для SD-карты (3.6 в). Однако практика показала, что они повышенное напряжение выдерживают.

Налаживание. Цифровая часть схемы в налаживании не нуждается. После инициализации SD-карты через 1-2 сек от включения SA1 на выходе TX DD1 должен появиться сигнал передачи потока данных в ПК. Если теперь соединить ПК к устройством и выбрать в программе EKG_SD_2010.exe правильный COM-порт, на экране должны отображаться состояние записи, номер сектора EmptyPos, показания датчиков BK1, BK2 и график оцифрованного кардиосигнала. Далее следует нажать кнопку «СТОП» и выполнить «форматирование». Успех выполнения этих операции свидетельствует о корректной связи устройства с ПК. Нажатием кнопки «Инициализация» проверяется, правильно ли устройство опознаёт SD-карту.

Пока электроды E+, E-, E0 никуда не подключены, исправный усилитель кардиосигнала должен «ловить» (а компьютер отображать) сигнал помехи 50 Гц от сети. При замыкании между собой E+, E-, E0, амплитуда помехи должна резко уменьшаться, причем на выводе 6 DA3 должна быть примерно половина питающего напряжения.

Далее электроды E+, E-, E0 крепят к телу и пытаются засечь импульсы, коррелированные с ударами сердца. При проблемах следует обеспечить увлажнение кожи в месте контакта с электродом и варьировать их положение в поисках лучшего сигнала. Можно также увеличить усиление DA3, уменьшив сопротивление R4.

Фотография собранного кардиографа без акселерометра

Фотография собранного кардиографа

Рекомендуемая литература

1. Барановский А.Л. Аппаратура непрерывного контроля ЭКГ. М.: Радио и связь, 1993. – 248 с.
2. Авербух В. Инструментальные усилители. Схемотехника, 2001. – № 1. – С. 26.
3. Гордейчук А.П. Система «активной земли» в электрокардиографах. – Петербургский журнал электроники, 2005. – №2. – C. 37.
4. http://www.sdcard.org/developers/tech/sdcard/pls/Simplified_Physical_Layer_Spec.pdf
5. Терехин Ю. Музыкальный звонок с картой MMC. Радио, 2009. ­– №9. – С. 24-27.
6. http://www.ftdichip.com/Documents/DataSheets/DS_FT232R.pdf
7. Сизенцева Г.П. — Методическое пособие по электрокардиографии (в помощь медицинской сестре). – М.: Издательство НЦССХ им. Бакулева РАМН, 1998. – 68 с.

Скачать исходники, прошивки, ПО и др. файлы к проекту вы можете ниже

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин
Рис. 1
DD1 МК PIC 8-бит PIC16F873 1 Поиск в Fivel
DA1, DA2 ОУ КР1446УД1 2 Поиск в Fivel
DA3 Инструментальный усилитель AD623 1 Поиск в Fivel
BK1 Датчик температуры DS1621 1 Поиск в Fivel
BK2 Акселерометр MMA7455LT 1 Поиск в Fivel
VD1 Диод КД522А 1 Поиск в Fivel
С1, С2 Конденсатор 0.22 мкФ 2 Поиск в Fivel
С3 Конденсатор 2.2 мкФ 1 Поиск в Fivel
С4, С6, С8 Конденсатор 0.1 мкФ 3 Поиск в Fivel
С5, С7 Электролитический конденсатор 1000 мкФ 2 Поиск в Fivel
R1, R2, R4 Резистор 20 кОм 3 Поиск в Fivel
R3 Резистор 720 кОм 1 Поиск в Fivel
R5, R9, R11, R13-R15 Резистор 300 Ом 6 Поиск в Fivel
R6, R7 Резистор 150 кОм 2 Поиск в Fivel
R8, R10 Резистор 4.7 кОм 2 Поиск в Fivel
R12 Резистор 150 Ом 1 Поиск в Fivel
R16 Резистор 10 Ом 1 Поиск в Fivel
ZQ1 Кварц 10 МГц 1 Поиск в Fivel
SA1 Выключатель 1 Поиск в Fivel
GB1 Батарея 3.6 В 1 Поиск в Fivel
E+, E-, E0 Электрод 3 Поиск в Fivel
X1 Разъем 1 Поиск в Fivel
X2 Разъем 1 Поиск в Fivel
Рис. 3
DD2 Микросхема К516ЛА7 1 Поиск в Fivel
R17 Резистор 10 кОм 1 Поиск в Fivel
Рис. 4
ОУ 1 Поиск в Fivel
R18, R19 Резистор 15 кОм 2 Поиск в Fivel
R20, R21 Резистор 150 кОм 2 Поиск в Fivel

Скачать список элементов (PDF)

Прикрепленные файлы:

SIM900 MINI V4.0 Wireless Data Transmission Module

 Arduino  Комментарии к записи SIM900 MINI V4.0 Wireless Data Transmission Module отключены
Мар 132017
 

Как заставить работать sim900a в наших сетях

Схемотехника*, DIY или Сделай сам*

Для начала справочная информация:
sim900 — представитель нового поколения бюджетных GSM/GPRS модулей компании SIMCom.
Sim900a – аналог sim900, предназначенный для использования на азиатском рынке, не работает с российскими операторами.

Визуальный осмотр

Так вот, попался мне модуль sim900a mini v3.8.2, на базе того самого sim900a. Визуальный осмотр показал, что на модуле присутствует преобразователь сигнала MAX232, что даёт возможность быстрого подключения модуля к com порту компа для детального исследования. Так же, на модуле есть выходы с уровнем TTL, что даёт возможность использования его с arduino. Еще, из особенностей схемы, было замечено, что нет софтового управления включением/выключением модуля, но это несложно исправить, что скорее всего будет проделано. Нет выходов на микрофон и наушники, тоже придётся распаивать.

Далее изучаем даташит, там все очень радужно расписано на 47 страниц. Первое, что нам потребуется это запитать модуль. На плате написано VCC 5, в даташите написано 3.2V — 4.8V, однако, двумя абзацами ниже, предоставлена схема включения с напряжением 4,1V. Собственно, как sim900 так и sim900a будет очень привередлива к питанию. Так же, становится понятно, что старые симки на 5V в нём не заработают… Для них надо городить преобразователь на основе Max1686.

Следуя инструкциям даташита, берём Li-ion аккумулятор формфактора 18650 на 3.7V, он и будет служить нам питающим элементом.

Подключение

Теперь разбираемся с ком портом, обязательно ставим 2 джамперочка, как показано на фотке. На ком порте нам нужны 2, 3 и 5 ножки, на модуле это 1, 2 и 3 соответственно.

Вставляем сим карту (желательно предварительно проверить ее работоспособность в телефоне), подключаем ком порт, подаём питание на модуль. Для общения с модулем нам потребуется терминал. Под винду я использую либо программу terminal, либо putty.

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

Визуально наблюдаю, что светодиод «статус» моргает, смотрим в даташит, есть 3 режима:

  • 64ms/800ms – не зарегистрирован в сети,
  • 64ms/3000ms- зарегистрирован в сети,
  • 64ms/300ms- осуществляется передача данных по GPRS.

В моём случае это 1 вариант.

Идём разбираться, почему же мы не смогли зарегистрироваться. Запускаем свой любимый терминал, подключаемся к нужному порту.
Проверяем, не требует ли симка ввода пин кода:
AT+CPIN?
Если симка требует ввода PIN или PUK кода, то вы получите ответ SIM PIN или SIM PUK соответственно.
После ввода PIN кода:
AT+CPIN=0000
Проверяем, статус повторно. В моём случае я увидел:
+CPIN: PH-NET PIN
Это означает, что модуль залочен на определённые сим карты и с вашей сим картой он работать не будет.
В этом случае либо используем карту азиатского оператора, либо перепрошиваем модуль. Однако, что бы не заниматься лишней работой, для начала проверим, видит ли модуль сети вообще. Это можно сделать командой:
AT+COPS=?
После некоторого ожидания сканирования диапазона в поисках сети, видим приблизительно такой ответ:
+COPS: (2,«MGTS»,»»,«25001»),(1,«MegaFon RUS»,«MegaFon»,«25002»),(1,«Beeline»,«Beeline»,«25099»),,(0,1,4),(0,1,2)

Каждая скобка — это сеть. Первая цифра — это статус этой сети. 0 — неизвестен, 1 — доступен для регистрации, 2 — сеть соответствующая оператору сим карты, 3 — заблокированная сеть. Остальные параметры сети — это их идентификаторы.
Если вы увидели свою сеть (первая цифра = 2). Тогда есть надежды на то, что вы сможете реанимировать модуль и заставить его работать.

Перепрошивка!

Это отдельная большая история, но я опишу основные моменты перепрошивки.
Поискав в Интернетах возможные варианты прошивок, я наткнулся на то, что модули эти бывают с объемом флеш памяти на 32 и 64 мегабайта. Есть специальная программа для их перепрошивки. И много вариантов прошивок под разные версии модулей. Например, вот тут
Мне не повезло, достался 32-х мегабайтный модуль, а прошивок для них совсем мало. Инструкция по перепрошивке модуля гласит так. Запускаете программу для перепрошивки, выбираете необходимую версию, наживаете на кнопку старта заливки ,
после этого зажмите кнопку включения модуля и до момента начала заливки микропрограммы удерживайте нажатой. Но как мы выяснили ранее, у нас нет кнопки включения/выключения питания модуля, эта mini-версия включается в момент подачи питания и остаётся включенной на протяжении всего времени. По этому в нашем варианте мы обесточиваем модуль полностью, запускаем программу заливки, выбираем необходимую версию, и все настройки, нажимаем на кнопку начала заливки микропрограммы в модуль, после этого подаём питание на модуль.
Однако перед тем, как вы начнёте что то делать, проведите подготовку модуля:

  • модуль очень требовательный к напряжению питания и при напряжении более 4V он запускается и работает, но напрочь отказывается перепрошиваться!
  • уберите автовыбор скорости, установите скорость в 115200 (AT+IPR=115200), что бы избавить себя от проблем с прошивкой. (на скорости 9600 прошивка занимает примерно 2 часа времени);
  • перед началом прошивки обесточьте модуль как минимум на 5-10 секунд;

Что бы долго не тянуть кота за хвост, сразу раскрою карты и скажу, что если у вас 32-х мегабайтная версия, вы со своего модуля сможете сделать только sim900b работающий в наших регионах при помощи микропрограммы версии 1137B09SIM900B32_ST. Если же вам достался 64-х битный модуль, то у вас есть возможность получить полноценный sim900 при помощи прошивки: 1137B02SIM900M64_ST_ENHANCE
Итак, перепрошили, перезагрузили модуль. Начинаем всё сначала. Проверяем статус сим карты:
AT+CPIN?
+CPIN: SIM PIN
Если так, то вводим пин:
AT+CPIN=0000
OK
Проверяем, что карта приняла код и модуль готов с ней работать:
AT+CPIN?
+CPIN: READY
Проверяем статус регистрации в сети:
AT+CREG?
+CREG: 0,1
Первая цифра — авторегистрация включена, вторая — регистрация осуществлена. Смотрим на диод, отображающий статус, индикация соответствует документации об успешной регистрации в сети.
Проверим, в какой сети зарегистрировался модуль:
AT+COPS?
+COPS: 0,0,«MTS-RUS»
Проверим баланс:
AT+CUSD=1,»*100#»
OK
+CUSD: 0,«041C0438043D04430441003A003400360032002C003700310440002C041B0438043C04380442003A003300300030003004400020»,72
Это unicode (USC2), декодируем:
Минус:462,71р, Лимит:3000р
В лимит мы пока не упёрлись можно попробовать отправить СМС (позаботьтесь, что бы ваш терминал умел отправлять служебные символы, для обозначения окончания отправляемой СМС надо использовать символ с кодом 26)
AT+CMGF=1
AT+CMGS=»+790……..»
> Privet! Davay posmotrim film!
> (Alt +26)
+CMGS: 3

СМС отправлена!
Теперь попробуем позвонить:
ATD+790………;
+COLP: «+790………»,145,»»,0,»»
Кладём трубку:
ATH
OK
Обращаю внимание, что в команде ATD символ точка с запятой «;» в конце обязательна!
Если вы видите «NO CARRIER» значит номер телефона набран неправильно.
Модуль работает! Чего и следовало добиться. В следующих статьях железная доработка модуля и его использование с Arduino.
Полезные ссылки:
Официальный сайт производителя
Официальный представитель simcom в России
Страница с ссылками на доки по модулю sim900
Спецификация модуля
Преобразователь сигнала для сим карты
Сборник прошивок для модулей sim800 и sim900
Спецификация AT команд модуля
Статья о перепрошивке sim900

Pronterface — программа управления 3D принтером

 Arduino  Комментарии к записи Pronterface — программа управления 3D принтером отключены
Мар 122017
 

Pronterface — программа управления 3D принтером

  • 22 окт, 2014 в 22:07


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

Ссылка для скачивания архива программы
Щёлкаем на скачанный архив и переносим папку из архива в удобное, для нас, место. Подключаем 3D принтер к компьютеру и в сеть 220в. Входим в папку и щёлкаем по файлу pronterface.exe

Блок подключения 3D принтера.
Pronterface 2014-10-22 19.38.34
1 — Кнопка автоматического определения подключенного COM порта.
2 — Выбранный COM порт.
3 — Скорость обмена данными. Не менять!
4 — Кнопка подключения 3D принтера к программе управления.

Подключаем 3D принтер.
CropWindow 2014-10-22 19.48.55
Текстовое поле вывода информации 3D принтером. Если нет слова ERROR, значит включение прошло без ошибок.
Если же видим надпись Connecting… , значит программа не может подключиться к 3D принтеру. Проверяем подключение USB кабеля или перебираем COM порты из выпадающего списка.

Перемещение сопла и стола по осям XYZ.
CropWindow 2014-10-22 19.50.09
Устанавливаем скорости перемещения:
1 — по осям X и Y
2 — по оси Z
Скорость также зависит от ускорения, задаваемого в прошивке.
Для начала перемещения сопла или стола нужно 3D принтер вывести в нули. Для этого нажимаем кнопку Home (3). После касания концевых датчиков по XYZ установятся максимальные координаты, т.к. ноль находится на поверхности стола в левом ближнем углу. И все ручные перемещения начинаются в «минус», направление (4). Перемещения осуществляются фиксированными отрезками (6): 0.1мм, 1мм, 10мм, 100мм. После выхода в нули поле перемещения устанавливается и ограничивается из прошивки. При перемещении обращайте внимание на клипсы-прижимы стекла.

Управление нагревом сопла.
Pronterface 2014-10-22 20.07.51
1 — Выбираем или устанавливаем вручную температуру сопла. Температура зависит от типа пластика PLA или ABS и типа сопла (индивидуально). Обычно PLA 180-210 градусов, ABS 230-275 градусов. В прошивке установлено ограничение температуры.
2 — Нажимаем кнопку Set для начала прогрева сопла.
3 — Кнопка отключения нагрева сопла.

Управление нагревом стола.
Pronterface 2014-10-22 20.10.23
Здесь всё аналогично нагреву сопла, кроме температуры. При охлаждении пластика происходит усадка и углы детали отлипают от стола (деламинация). Для борьбы с деламинацией прогревают нижнюю часть детали. Для ABS 105-115 градусов, для PLA 70 градусов, при печати на каптоновом скотче. PLA можно печатать на синем скотче без нагрева стола.

Мониторинг температуры.
Pronterface 2014-10-22 20.11.16
1 — Текущая температура сопла
2 — Текущая температура стола
3 — График изменения температуры

Управление экструдером (выдавливание пластика).
Pronterface 2014-10-22 20.12.43
1 — Выдавливание пластика. Минимальная температура ограничена в прошивке.
2 — Обратное выталкивание пластика для смены катушки или бобины.
3 — Длина прутка пластика для перемещения
4 — Скорость перемещения пластика в экструдере (выдавливание или выталкивание)

Консоль взаимодействия с 3D принтером.
Pronterface 2014-10-22 20.13.44
Консоль используется для настройки 3D принтера и в частности оси Z.
Некоторые команды:
M106 включить вентилятор охлаждения детали
M107 выключить вентилятор охлаждения детали
M114 показывает координаты в текущей позиции
M119 сообщает нам состояние концевых датчиков
G1 Перемещение в заданную координату (G1 Z90 — перемещение сопла до Z90)

Настройка прошивки для 3D принтера Marlin ver.1.02 (январ ь 2015)

 Arduino  Комментарии к записи Настройка прошивки для 3D принтера Marlin ver.1.02 (январ ь 2015) отключены
Мар 122017
 

Настройка прошивки для 3D принтера Marlin ver.1.02 (январь 2015)

  • 13 фев, 2015 в 19:08


Последний раз редактировал 27.08.15

Многие 3D принтеры работают под управлением популярной прошивки Marlin. Для некоторых 3D принтеров существуют уже стандартно сконфигурированные прошивки:

Рассмотрим основные настройки релиз версии 1.02 (январь 2015)

Прошивка лежит по этому адресу. Качаем — давим на кнопку Download ZIP. Скачивается архив Marlin-Release.zip. Распаковываем его в подготовленную папку.

Теперь скачиваем Arduino IDE для исправления и загрузки прошивки в 3D принтер. Ссылка. Давим на Windows Installer. Скачивается установщик arduino-1.6.5-r2-windows.exe. Запускаем его и устанавливаем среду Arduino IDE.

Переходим в папку с прошивкой и запускаем файл Marlin.ino.

Открывается среда Arduino IDE с прошивкой. Нам нужна вкладка Configuration.h.

В начале мы видим ссылки на калибровку 3D принтера. Пролистываем дальше и читаем: «Это конфигурационный файл с основными настройками. Выберите тип контроллера, тип температурного датчика, откалибруйте перемещения по осям и сконфигурируйте концевые выключатели

Начнём с выбора контроллера (MOTHERBOARD). Список контроллеров находится во вкладке boards.h. Давим на треугольник в правом верхнем углу и выбираем boards.h.

Теперь посмотрим на установленную электронику. Вот самые распространённые типы плат:

Melzi

Sanguinololu

RAMPS 1.4

У меня стоит RAMPS 1.4.

Указываем в configuration.h свой контроллер.

#ifndef MOTHERBOARD
#define MOTHERBOARD BOARD_RAMPS_13_EFB
#endif

Следующим выбираем датчик температуры — термистор, для хотэнда и стола. Видим большой список «//// Temperature sensor settings:». У меня стоит хотэнд E3D-v5 и китайский термистор на столе. Для E3D-v5 я выбираю «// 5 is 100K thermistor — ATC Semitec 104GT-2», для стола «// 1 is 100k thermistor — best choice for EPCOS 100k». Если тип термистора неизвестен можно выбрать 1, а если температура не понравится можно выбирать любой и тестировать. Меняю.

100K thermistor — ATC Semitec 104GT-2

Обычный китайский термистор 100К

У Ultimaker Original в хотэнде стоит термопара. При подключении термопары важно соблюдать полярность. Тип сенсора «-1».

Если в хотэнде используются фторопластовые части, то температуру следует ограничивать, во избежания повреждения хотэнда. Максимальная рабочая температура фторопласта 260 градусов. Если хотэнд цельнометаллический, то можно ставить 320 градусов (если нужно).

Ограничение максимальной температуры хотэнда «#define HEATER_0_MAXTEMP 275».

Минимальная температура ограничивается для механической защиты хотэнда от выдавливания холодного пластика.

Ограничение минимальной температуры хотэнда «#define EXTRUDE_MINTEMP 170».

Настройка концевых выключателей

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

Нам нужно узнать где они расположены. Как это узнать? Начало координат находится в ближнем левом углу на поверхности стола, если сопло вывести в эту точку, то сработали бы концевики MIN, если в правую дальнюю верхнюю — сработают MAX. У меня в положении HOME находятся три концевых выключателя MAX, поэтому мои установки

// Sets direction of endstops when homing; 1=MAX, -1=MIN
#define X_HOME_DIR 1
#define Y_HOME_DIR 1
#define Z_HOME_DIR 1

. Команда M119 (например в Pronterface) показывает состояние концевых выключателей. У меня концевые выключатели стоят только в позиции HOME на MAX.

Так должно быть:

В положении HOME

В положении отличном от HOME по всем осям

Если у Вас не получилось как у меня, то состояние концевых выключателей по выбранной координате нужно инвертировать, это можно сделать в прошивке или перепаять провода. Значения false или true. Мне ничего менять не потребовалось.

const bool X_MIN_ENDSTOP_INVERTING = true;
const bool Y_MIN_ENDSTOP_INVERTING = true;
const bool Z_MIN_ENDSTOP_INVERTING = true;
const bool X_MAX_ENDSTOP_INVERTING = true;
const bool Y_MAX_ENDSTOP_INVERTING = true;
const bool Z_MAX_ENDSTOP_INVERTING = true;

Изменение направления вращения шаговых двигателей, значения false или true. Правильные перемещения сопла относительно стола:

  • По оси X — влево «-«, вправо «+».
  • По Y — вперёд «+», назад «-«.
  • По оси Z — сближение «-«, удаление «+».
  • Экструдер. Extrude — выдавливание нити, Reverse (retract) — откат, втягивание нити.

#define INVERT_X_DIR false
#define INVERT_Y_DIR false
#define INVERT_Z_DIR false
#define INVERT_E0_DIR true

Установка габаритов перемещения, после инициализации в положении HOME. Здесь мы задаём габариты максимальных перемещений по осям X и Y, а также настройку сопла относительно стола.
Если при касании стола соплом срабатывает концевой выключатель (MIN), как у Ultimaker Original, то поднастройка сопла относительно стола выполняется перемещением концевого выключателя, а в «#define Z_MAX_POS» записываем значение координаты при максимальном удалении сопла от стола. Координату можно узнать по команде М114 или посмотрев на экран дисплея.
Если концевой выключатель по Z срабатывает при максимальном удалении сопла от стола (MAX), то нужно найти габарит по Z самостоятельно. Устанавливаем значение «#define Z_MAX_POS» изначально больше нормы, например 250 при габарите 200 мм. Опускаем сопло до касания стола и на дисплее (или по команде M114) видим координату больше нуля, теперь вычтем из установленного большого значения полученную координату и получим габарит по Z, который теперь запишем в «#define Z_MAX_POS». По итогам печати первого слоя можно будет подкорректировать это значение.

// Travel limits after homing
#define X_MAX_POS 215
#define X_MIN_POS 0
#define Y_MAX_POS 215
#define Y_MIN_POS 0
#define Z_MAX_POS 200
#define Z_MIN_POS 0

Можно подкорректировать скорость перемещения в положение HOME. Обычно занижают скорость по оси Z, если стоят кривые шпильки.

#define HOMING_FEEDRATE {50*60, 50*60, 4*60, 0} // set the homing speeds (mm/min)

Переходим к самому важному. Настройка шагов перемещения по осям. Экструдер тоже ось. Мои настройки:

#define DEFAULT_AXIS_STEPS_PER_UNIT {(200*16)/(2.0*20),(200*16)/(2.0*20),200*16/1.25,(3200 * 39.0)/(11.0 * 6.75 * 3.45)}

Теперь посмотрим, как я их получил. По всем осям стоят шаговые двигатели 200 шагов на оборот, 16 микрошагов на шаг (устанавливается перемычками на плате), приводной ремень GT2 с шагом 2 мм, 20-ти зубые шкивы, итого получаем формулу (200*16)/(2.0*20). По оси Z стоят шпильки М8 с шагом резьбы 1,25 мм, итого формула 200*16/1.25.

Находим спецификации (даташит) на установленные шаговые двигатели. Видим, что за один шаг вал поворачивается на 1,8 градуса, а это значит 360/1,8=200 шагов на полный оборот. Этот параметр одинаковый у большинства шаговых двигателей устанавливаемых в домашние 3D принтеры.

Профили ремней, обычно используемых на 3D принтерах и их шаг. Оригинал здесь, страница 61.

Шкив

Как померить шаг винта? Замеряем участок винта и считаем на нём витки, затем длину участка в миллиметрах делим на количество витков 20/16=1.25 мм. Для более точного результата замеряем максимальный участок винта.

Настройка экструдера зависит от коэффициента редукции и диаметра подающей шестерни. Подберём экспериментально, после первой заливки прошивки в 3D принтер. Откручиваем сопло и уменьшаем ограничения минимальной температуры сопла до 5 градусов «#define EXTRUDE_MINTEMP 5». Теперь экструдер будет работать при холодном сопле, что нам и нужно. Пока не меняем настройки экструдера. Для настройки я использую программу Pronterface. Для начала ставим 50 мм и скорость 100 мм/сек. 50 мм — это длина прутка, проходящего через экструдер. Измеряем длину прутка прошедшего через экструдер линейкой или штангенциркулем.

Подбирая настройку экструдера добиваемся точной цифры на разумной длине прутка, например 300 мм. После настройки вернём ограничения минимальной температуры «#define EXTRUDE_MINTEMP 170».

Следующие цифры — это ограничение максимальной скорости перемещения по осям. На X и Y я ставлю 200 мм.

#define DEFAULT_MAX_FEEDRATE {200, 200, 5, 25}

Настройка ускорения перемещений по осям. При больших ускорениях возможны пропуски шагов. Можно подбирать, гоняя в программе Pronterface по осям на заданной скорости. Вот мои настройки.

#define DEFAULT_MAX_ACCELERATION {1000,1000,100,10000}
#define DEFAULT_ACCELERATION 1500

Осталось активировать LCD дисплей с SD картой. Свой дисплей я нашёл на RepRap.org и идентифицировал как RepRapDiscount Smart Controller.

Раскомментируем следующие строки. То есть убрать двойные слэши. Строка за «//» не используется и является только комментарием. Когда убираем слэши строка принимает участие в компиляции прошивки и задействует её функции.

#define ULTRA_LCD
#define SDSUPPORT
#define ULTIPANEL
#define REPRAP_DISCOUNT_SMART_CONTROLLER

Для подключения LCD к Ultimaker нужно раскомментировать только одну строку

#define ULTIMAKERCONTROLLER

Есть ещё один твик для повышения точности срабатывания некоторых концевых выключателей. При настройке нуля по Z столкнулся с тем, что после каждой инициализации HOME положение сопла над столом немного менялось. Порывшись в прошивке нашёл параметр отвечающий за длину отката при инициализации концевых выключателей. Переходим во вкладку Configuration_adv.h и ищем строку «#define Z_HOME_RETRACT_MM 2» или «#define Z_HOME_BUMP_MM 2», меняем значение 2 на 5 и больше не вспоминаем про этот параметр. Это можно исплоьзовать и для других осей.

Пора заливать прошивку в контроллер. Для этого нужно в Arduino IDE правильно выставить тип платы и номер COM порта. Внизу окна отобразится тип платы и номер порта. Не забываем сохранять изменения (Ctrl+S).

RAMPS

MELZI, Sanguinololu

Ещё одна инструкция для появления выбора Sanguino в меню Arduino IDE (на старых версиях Arduino IDE не работает):

Заходим в меню Файл -> Настройки

В поле ввода Additional Boards manager URLs: вставляем адрес https://raw.githubusercontent.com/Lauszus/Sanguino/master/package_lauszus_sanguino_index.json
и нажимаем OK

Идём в меню Инструменты -> Плата и нажимаем на Boards Manager…

Открывается окно Boards Manager, в котором нужно найти Sanguino, кликнуть по нему и появится кнопка Install, которую нужно нажать для установки поддержки Melzi

После установки появится надпись INSTALLED

Теперь можно выбрать Плату, Процессор и Порт

Для заливки прошивки нажимаем на круг со стрелкой.

Прогресс заливки прошивки отображается индикатором

После того, как всё заработает нужно откалибровать PID нагрева хотэнда и стола. Для этого я использую Pronterface. Вводим команду «M303 E0 C8 S260«. Где M303 — команда калибровки, E0 — хотэнд, C8 — количество циклов нагрева-охлаждения, S260 — типичная температура работы сопла.

Последние результаты записываем в прошивку.

#define DEFAULT_Kp 12.22
#define DEFAULT_Ki 0.58
#define DEFAULT_Kd 64.08

По такой же схеме калибруем PID стола. Отвечает строка #define PIDTEMPBED. Команда «M303 E-1 C8 S110«. Где E-1 — стол, S110 — типичная температура нагрева стола. Последние результаты записываем в прошивку. У меня стол нагревается очень медленно и поэтому приходится перезапускать команду из-за ошибки Timeout.

#define DEFAULT_bedKp 105.94
#define DEFAULT_bedKi 4.97
#define DEFAULT_bedKd 564.11

В последних прошивках не настраивается автоПИД на реле. Реле переключается очень быстро. Это сильно разогревает твердотельное реле и обычное реле видимо долго не проживёт. Предлагаю использовать пока мою старую настройку
#ifdef PIDTEMPBED
#define DEFAULT_bedKp 234.18
#define DEFAULT_bedKi 31.62
#define DEFAULT_bedKd 433.56
#endif // PIDTEMPBED
или эту
#ifdef PIDTEMPBED
#define DEFAULT_bedKp 105.94
#define DEFAULT_bedKi 4.97
#define DEFAULT_bedKd 564.11
#endif // PIDTEMPBED

Вместо PID регулировки можно включить режим гистерезиса bang-bang. PID комментируем, режим bang-bang раскомментируем:
Configuration.h
//#define PIDTEMPBED
#define BED_LIMIT_SWITCHING
время и температура контроля переключения
Configuration_adv.h
#ifdef BED_LIMIT_SWITCHING
#define BED_HYSTERESIS 2 //only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS
#endif
#define BED_CHECK_INTERVAL 5000 //ms between checks in bang-bang control

Как узнать уже установленные в прошивке параметры?

M501 читает параметры прошивки и их можно сохранить в текстовом файле

Параметры установленные в прошивке можно узнать в программе Repetier-Host через меню Конфигурация\Конфигурация EEPROM. Предварительно нужно указать COM порт в настройках и нажать кнопку «Подсоединить».

При подключении 3D принтера к программе Pronterface в правой части окна загружается список параметров

Также параметры можно увидеть на LCD дисплее. Через меню Control\Motion.

Вопрос — ответ
настроил ПИД, температуру держит на ура, но при нагреве с 20 до 240 улетает за 270. какой из коэфициентов руками подкрутить?
решил проблему снижением тока в прошивке и руками уменьшил Кр относительно автопид на несколько едииниц
#define BANG_MAX 255 // limits current to nozzle while in bang-bang mode; 255=full current
#define PID_MAX BANG_MAX // limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
Теперь температура + — 3градуса

Возможные ошибки

На экране надпись:
Err MINTEMP — Неподключен термистор (термопара) или обрыв провода к нему.
Err MAXTEMP — Короткое замыкание контактов термистора (термопары).

Описание G-кодов http://reprap.org/wiki/G-code

Часики 3D

 Arduino  Комментарии к записи Часики 3D отключены
Мар 052017
 

3D-printed Watch with Tourbillon

Designed by TheGoofy

Like23 Collect21 Views8530

3D-printed Watch with Tourbillon 3D Printing 120315

3D-printed Watch with Tourbillon 3D Printing 120316

3D-printed Watch with Tourbillon 3D Printing 120317

3D-printed Watch with Tourbillon 3D Printing 120318

3D-printed Watch with Tourbillon 3D Printing 120319

3D-printed Watch with Tourbillon 3D Printing 120320

Horizontal thumbnail 3D-printed Watch with Tourbillon 3D Printing 120315
Horizontal thumbnail 3D-printed Watch with Tourbillon 3D Printing 120316
Horizontal thumbnail 3D-printed Watch with Tourbillon 3D Printing 120317
Horizontal thumbnail 3D-printed Watch with Tourbillon 3D Printing 120318
Horizontal thumbnail 3D-printed Watch with Tourbillon 3D Printing 120319
Horizontal thumbnail 3D-printed Watch with Tourbillon 3D Printing 120320
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793039
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793038
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793034
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793031
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793026
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793024
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793023
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793021
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793019
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793014
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793013
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793008
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793005
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793000
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 792999
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 792994
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 792991
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 792989
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 792992
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793001
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793003
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793006
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793010
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793012
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793017
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793018
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793041
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793040
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793037
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793036
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793035
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793033
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793032
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793030
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793029
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793028
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793027
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793025
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793022
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793020
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793016
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793015
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793011
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793009
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793007
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793004
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 793002
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 792998
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 792997
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 792996
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 792995
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 792993
Shape thumbnail 3D-printed Watch with Tourbillon 3D Printing 792990


Prints (0)

Upload a Print

  • No Prints Yet

    Be the first to upload a Print for this Design!

  • Drag & Drop A Photo or
    Click To Browse

Description

This is a mechanical watch with tourbillon driven by a 3d-printed mainspring. The watch has a Swiss lever escapement. The mainspring inside the going barrel keeps the watch running for approximately 30 Minutes. Accuracy is roughly one Second deviation within one Minute (depending on print-settings).

The project demonstrates that the 3D-printing technology is developing. Compared with earlier generations of 3d-printers, the process works more reliable and more accurately. However it’s still a very advanced project, because printing inaccuracies need to be trimmed manually with some watchmaker skills, or the watch won’t tick. The watch is designed with Autodesk Fusion 360, and printed with Ultimaker 2.

How it’s made:

https://youtu.be/Go8woPGOggg

Assembly:

https://youtu.be/XiZAEaES2Ng

https://jig.space/view?jig=728 (Thanks to http://www.thingiverse.com/greenlig)

Assembly Time Lapse:

https://youtu.be/s3p25T6YlQc

Autodesk Fusion 360 Design: http://a360.co/1S4wp4W (all parts assembled) http://a360.co/1KUNz3g (main spring relaxed) Many thanks to Nicholas Manousos for his great article in HODINKEE explaining the importance of my project from a watchmakers perspective. His first 3d-printed Tourbillon 1000% was also a source of inspiration for my work.

Print Settings Printer Brand: Ultimaker Printer: Ultimaker 2 Rafts: No Supports: No Resolution: Normal (cura defaults) Infill: 30% Notes: 0.4 mm Nozzle

Only the Pawl Unlock Key needs to be printed with support.

Hairspring, Anchor, Escapement Wheel, and some gears were printed with high resolution (0.06mm layer, 0.8mm shell). All other parts are printed with normal resolution (0.1mm layer, 0.8mm shell).

The infill of the anchor is 80% in order to have a better balanced center of gravity (rest has 30% infill).

For the case I used PETG (slightly bendable, shock absorbing), and the gears are printed with PLA (harder and less friction). In colours: black and yellow parts are PETG, orange and red parts are PLA.

The Mainspring is printed with PETG (PLA probably breaks after a while). I switched off «combing» in Cura. While this is a cool feature for regular shaped parts, it causes problems with large spiral shaped parts: The print-head does many useless long (2 meters!) travelling moves. Printing not only takes 30% longer, it oozes during the move, and when continuing to print, the nozzle is empty of material, and the resulting under-extrusion is disastrous.

The Hairspring needs to be printed in PLA. Other material basically work as well, but due to different stiffness, it’s expected, that the watch runs too slow, or too fast. The design of the spring needs to be changed depending on the material.

Printing on heated glass-bed. Used a mix of alcohol and water to clean it. Adhesion is exceptional. For removing the parts from the build plate I poured a few drops of the same alcohol mix into the groove between plastique and glass. The effect is miraculous and the part can be removed immediately without applying any force.

Make sure x- and y-axis of your printer are adjusted really square! My Ultimaker wasn’t fabricated good enough (1-2mm slant) — the result were oval Minutes and Hours wheel, and they jammed at some angles.

Instructions Watch this video, if you like to understand, how the watch is constructed. These are all the Parts needed. 51 downloadable and printable, and some Pins and Screws.

Part List:

  • 1 Pin, Diameter 1.5 mm, Length 55.5 mm (tourbillon axis)
  • 1 Pin, Diameter 1.5 mm, Length 12 mm (anchor axis)
  • 1 Pin, Diameter 1.5 mm, Length 8.5 mm (planet gear axis)
  • 3 Pins, Diameter 2 mm, Length 57 mm (axis for pinions for minutes and hours wheel)
  • 6 Pins, Diameter 2 mm, Length 22 mm (axis for basic transmission)
  • 1 Pin, Diameter 2 mm, Length 15 mm (attachment main spring)
  • 1 Pin, Diameter 3 mm, Length 22.5 mm (axis for main spring)
  • 1 Pin, Diameter 3 mm, Length 31 mm (axis for main pinion)
  • 3 Washers, Diameter 3 mm (main spring, pinion)
  • 6 Washers, Diameter 2 mm (transmission)
  • 5 Washers, Diameter 1.5 mm (tourbillon, escapement)
  • 5 Screws, Diameter 1.8 mm, Length 6.5 mm (ratchet pawls)
  • 5 Screws, Diameter 1.5 mm, Length 5 mm (going barrel)
  • 4 Screws, Diameter 1.5 mm, Length 10 mm (base plate)
  • 4 Screws, Diameter 1.8 mm, Length 12 mm (clock face)
  • 3 Screws, Diameter 1.5 mm, Length 10 mm (tourbillon cage)

Small holes are usually not very accurately printed. Use a drill to smooth the inner surface — especially the Balance Wheel needs to rotate with very little friction, and very little play. If you don’t find pins or screws with the recommended diameter, you can certainly use little larger pieces — there is some «meet» which can be drilled out.

Spring Barrel Assembly: Align the Barrel like in the picture below. It will then slide into the case like in the video (2:49). The Pawl Unlock Key is also a useful tool to keep the pawls in place during this assembly step.

Besides the Winding Key there is also a Key to unlock the Ratchet Pawls. I recommend to fully unwind/relax the Main Spring, when the watch is not used. It certainly will extend the life-time.

Have fun! 🙂

Начинаеми изучать ПЛИС

 Arduino  Комментарии к записи Начинаеми изучать ПЛИС отключены
Фев 102017
 

Разработка → Сделай шаг к ПЛИС

Программирование микроконтроллеров*, Программирование*, FPGA*

Ты ждал знак? Вот он!

Много лет я не решался начать программировать ПЛИС, потому что это сложно, дорого и больно (как мне казалось). Но хорошо, когда есть друзья, которые помогают сделать первый шаг. И теперь я не понимаю одного — ПОЧЕМУ Я ЖДАЛ ТАК ДОЛГО?

Сейчас я помогу сделать первый шаг и тебе!

А зачем оно мне?

Ты устал постоянно читать доки по своему МК или держать кучу информации в голове. Ты все переписал на asm, но скорости все равно не хватает. Ты подключил два внешних устройства к своему МК, подключаешь третье, но у тебя кончились прерывания, перестают работать те модули, что уже работали. Ты берешь другой МК, более мощный из той же линейки, но опять мануалы, регистры флагов, биты… ад. Меняешь платформу: переходишь на другой МК и выкидываешь на помойку свои знания по прежней платформе. Что бы ты не делал — оно дается тяжело. Ты находишь популярную платформу, в которой можно легко из компонентов собирать проект, но выше аппаратных ограничений данного МК все равно не удается прыгнуть… Где-то на краешке сознания иногда проскакивает мысль, что вот на ПЛИС это бы точно заработало быстро и параллельно, что это «именно та задача, которую бы надо решать на плис», но я стар/глуп/занят/etc чтобы суметь/начать такое делать.

Хочешь наконец вздохнуть свободно? Идем дальше!

Радость от разработки на ПЛИС

У меня был тяжелый рабочий день. С одной работы я приехал на вторую работу, потом на дачу, вечером домашние дела, уроки, потом семейный просмотр кино и только в 23 часа я оказался совершенно свободен! Сказать, что я был уставший — ничего не сказать. Но в таком состоянии я сел за ноут с твердой целью: сделать генератор меандра на 440 Гц. Прошло 20 минут и я уже слышал его в наушниках. Я не верил своим ушам! Еще 15 минут мне потребовалось, чтобы сделать ШИМ и менять громкость. К тому времени плата с ПЛИС у меня была всего с неделю и до этого я пролистал всего пару книг по Verilog.

В тот вечер я понял: ВОТ ОНО! Вот та платформа, в которой я быстро и легко могу превращать свои мысли в реально работающее железо!

Почему так?

Опишу плюсы, которые есть в изучении и применении ПЛИС, хотя их и так все знают:

  • Универсальность знаний — при смене модели МК нужно читать доки. При смене производителя МК нужно читать доки. Нужно постоянно читать доки, постоянно держать в голове кучу информации. При разработке на ПЛИС, если знаешь Verilog или VHDL, то можно не только программировать любой ПЛИС из линейки одного производителя, но и при желании перейти на другого (Altera, Xilinx). Хоть и будут моменты с освоением другой среды разработки, тонких аппаратных моментов, но сама суть подхода проектирования устройств на HDL от этого не изменится.
  • От идеи к железу — при разработке проекта, если тебе не хватает одного мк, то приходится выбирать другой. В принципе можно строить предположения справится или не справится этот МК с проектом. Либо есть какой-то конкретный МК и ты пытаешься туда вместить проект. Чаще всего именно так. Мне это чем-то напоминает подход моего деда, который делает лестницу из того, что есть в сарайке. Хотя можно спроектировать лестницу, купить досок, которые подойдут… От идеи к железу, а не наоборот.
  • Простота применения чужих разработок — можно взять чужой модуль и применить его в своем проекте. По коду сможете понять, как он работает. Даже, если он для xilinx, а вы делаете под altera. Иногда это получается не сарзу, но это проще, чем, например, добавлять двоичные библиотеки к проекту на c++/Qt
  • Независимость блоков. Блоки в HDL, как чистые фунции в ЯП. Зависят только от входных сигналов. Разработанный и отлаженный модуль в будет и дальше работать правильно, как бы не рос проект. Ничто снаружи не повлияет на правильность его работы изнутри. Да и вообще можно забыть, как он работает — это черный ящик. К тому же, блоки работают параллельно.

Проблема выбора

Сильно останавливают вопросы, что выбрать: Altera/Xilinx, Verilog/VHDL, какую отладочную плату взять. Но обо всем по порядку.

Производитель

Я выбрал Altera. Почему? Ну мы вот так с другом решили, хотя название Xilinx мне красивее. НО. Если ты сейчас не можешь выбрать, то я сделаю это за тебя. Тебе нужен Altera! Почему? Я не знаю. Сейчас важнее сделать шаг: сделать выбор. Я выбрал Altera и пока не пожалел.

Язык

Берем Verilog потомучто… ну ты понял.

Отладочная плата

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

В семействе Altera, за разумные деньги мы можем купить платы с CPLD MAX II на 240, 570 и 1270 элементов, либо более старшие микросхемы FPGA, которые Cyclone 1, 2, 3, 4 с количеством до 10000 и более ячеек. Как же выбрать?

Даже на базе 240 ячеек, проект Марсоход делает просто огромное количество проектов. Настоятельно рекомендую ознакомиться, чтобы иметь примерное представление о сложности проектов, которые можно уместить в 240 ячеек. С другой стороны, существуют проекты, которые полностью программируются под аппаратную копию определенного ПК, включая процессор и всю логику вокруг него (NES, Speccy, Orion, ЮТ-88, etc). Для этого уже требуется пять, десять и более тысяч ячеек. Плюс эти платы содержат дополнительные внешние устройства.

Поэтому я бы посоветовать взять что-то среднее между 240 и 10000 ячейками, с предпочтением в сторону увеличения в зависимости от доступных средств. На отладочной плате лишние ячейки это не страшно, а если их не хватит — уже ничего не поделаешь. Потом, когда устройство отлажено, станет ясно, сколько надо ячеек, купить под нужное количество, без лишнего «обвеса», дешевле и оставить в готовом устройстве.

То, чем действительно отличаются MAX от Cyclone’ов, кроме количества ячеек, это:
1) У серии MAX внутри нет PLL. На каждой отладочной плате есть генератор, как правило на 50 МГц. Основной массе проектов этого будет достаточно. Все синхронизации будут происходить путем деления 50 МГц на какое-нибудь значение. Либо, можно взять внешний генератор и подать на отдельный вход ПЛИС. А что, если потребуется частота выше 50 МГц? Мне не удалось с ходу найти генераторы выше 50 МГц. Но тут как раз на помощь и приходит PLL, который встроен в Циклоны. На нем можно умножить частоту, например, до 100 МГц.
2) В серии Cyclone встроены аппаратные блоки умножения. Их количество зависит от конкретной модели — тут как раз можно «всетаки заглянуть в инструкции», чтобы узнать сколько. Если предполагаете делать какой-то ЦОС, то они пригодятся: сэкономят ячейки, увеличат скорость. С другой стороны, если нет умножителей, их можно синтезировать, но у маленькой ПЛИС на это может не хватить ресурсов.

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

Сколько нужно денег?

Программатор
Я считаю, что у меня нет времени, чтобы паять программаторы на рассыпухе.

300 рублей. Я свой брал на ебее, выглядит так:

Отладочная плата
Выбор широкий, в зависимости от количества денег.

Начальный уровень 350 — 550 рублей. Это платы на MAX II (240 или 570 ячеек). Могут подойти для начального ознакомления и дальнейшего пристройства в конечные устройства. На плате есть генератор, пара кнопок, пара светодиодов, остальные 80 выводов на свое усмотрение.

Блок питания
Обязательно должен быть, но не всегда идет в комплекте. Потребуется БП на 5 вольт и ток 2А.

Средний уровень от 900 до 1500 рублей. Это платы Cyclone 1, 2, 3, 4 отличающиеся в основном количеством ячеек.
Маркируются примерно так:
EP2C5T144 — Cyclone 2 примерно 5к ячеек
EP4CE6E22C8N — Cyclone 4 примерно 6к ячеек
EP2C8Q208C8N — Cyclone 2 примерно 8к ячеек

Можно заметить, что Cyclone 3 может иметь больше ячеек, чем Cyclone 4.

Вот несколько вариантов:

835 рублей.
ALTERA FPGA CycloneII EP2C5T144 Minimum System Board for Learn good

880 рублей
Altera CycloneII EP2C5T144 FPGA Mini Development Learn Core Board E081

1265 рублей
EP2C8 EP2C8Q208C8N ALTERA Cyclone II FPGA Evaluation Development Core Board

Платы с расширенными возможностями. Это платы, на которых установлены дополнительные модули (UTP, USB, AUDIO), разъемы (SD, VGA), кнопки, переключатели, светодиоды, семисегментные индикаторы и т.д. Либо может идти базовая плата, а к ней могут прилагаться платы расширения отдельно.

У меня трудится такой комплект — плата + плата расширения:
Altrea EP4CE10E22 FPGA CORE Board+ Device Board USB/Sound/Ethernet/SD Card/VGA
2760 рублей

Вот основная плата. На ней есть 2 светодиода, 2 кнопки, 4 переключателя, семисегментный интикатор и микросхема оперативной памяти.

Плата расширения. На ней распаяны SD, VGA, а так же контроллеры USB(High Speed USB2.0 Chip: CY7C68013A), AUDIO(Sound Card up to 96kHz/32bit ADC/DAC: WM8731S), UTP(100M Ethernet interface: DM9000A):

Эти платы просто вставляются одна в другую, но у меня она пока лежит в ящике. Для своих поделок у меня макетка, с которой я соединяюсь шлейфом, который идет в комплекте. Еще в комплекте идет блок питания на 5 вольт.

Еще варианты:

Altera Cyclone NIOS II SOPC FPGA Development Learning Board EP2C8Q208C8N+LCD1602 — 2670 рублей

Terasic Altera FPGA DE0-Nano Cyclone IV Development and Education Board — 4600 рублей

Широкий выбор альтеровских плат и расширений к ним
Проект Марсоход

Но в целом, большие и дорогие отладочные платы я бы не рекомендовал сразу покупать. Дорогие покупки должны быть обоснованы, сейчас же пока не ясно что подойдет лучше. Ясно станет, когда начнется практика.

Заказал, ждем

Пока идут платы, можно начать себя морально и технически готовить:
— Установить Quartus II v.11.1
Почитать:
— Книга: А.К. Поляков Языки VHDL и Verilog в проектировании цифровой аппаратуры 2003
www.kit-e.ru/articles/circuit/2008_3_161.php — Краткий курс HDL
— Уроки на марсоходе по верилогу, архитектура, простые советы по стилю.
VERILOG как образ жизни
Хорошие примеры (EN)
Как начать работать с ПЛИС (Xilinx)

Синтезатор AD9850

 Arduino  Комментарии к записи Синтезатор AD9850 отключены
Янв 312017
 

Зайдя в очередной раз на сайт местного радиомагазина, обнаружил в продаже интересный девайс. Модуль DDS (direct digital synthesis) — синтезатор частоты на микросхеме AD9850. Такой:

Заявленные характеристики:

  • частота генерации от 0,029 Гц до 62,5 МГц;
  • количество разрядов ЦАП – 10;
  • выходной ток ЦАП – до 10,24 мА при напряжении ограничения 1,5 В;
  • встроенный компаратор для получения двух оппозитных ТТЛ выходов;
  • возможность цифрового управления частотой как по параллельному, так и по последовательному интерфейсу;
  • напряжение питания – 5 В;
  • потребляемый ток до 96 мА.

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

Для управления модулем синтезатора будем использовать ARDUINO UNO R3 (в моем случае – китайский совместимый клон). Информацию о частоте и других параметрах будем отображать на алфавитно-цифровом ЖК дисплее 16*2, регулировать частоту будем энкодером, переключение диапазонов – логический уровень «0» или «1» на одном из входов ARDUINO.

Схема устройства:

Выходной синусоидальный сигнал снимается с выхода OUT2 платы синтезатора. Амплитуда 0,5 В, постоянная составляющая – 0,512 В, выходное сопротивление – 100 Ом.

Выдаваемые частоты по диапазонам:

  • 80 м – 1745,00 – 1900,00 кГц (принимаемый диапазон 3490 – 3800 кГц);
  • 40 м. – 3500,00 – 3610,00 кГц (принимаемый диапазон 7000 – 7220 кГц).

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

Для регулирования частоты используется энкодер BR1 на 24 положения, 5 выводной, с кнопкой. Кнопка энкодера управляет режимом «Грубо/Точно». После включения устройства по умолчанию включен режим «Грубо». При этом шаг изменения частоты принимаемого сигнала – 1 кГц. При однократном нажатии на кнопку (вал) энкодера режим переключается в «Точно». Шаг изменения частоты принимаемого сигнала при этом уменьшается до 10 Гц. При этом на ЖК дисплее справа от значения частоты отображается буква «Т». Повторное нажатие кнопки энкодера возвращает режим «Грубо».

На нижнюю строку ЖК индикатора выводится полоса прогресса, отображающая текущую частоту относительно полного диапазона.

Переключение диапазонов осуществляется подачей логического «0» (диапазон 80 м) или «1» (диапазон 40 м) на вход «BAND». Вход активный, т.е. при обрыве линии, на нем присутствует логическая единица, благодаря подключенному внутреннему подтягивающему резистору контролера ARDUINO. Таким образом, для переключения диапазонов достаточно механической коммутации данного входа на массу.

На вход ААС подается напряжение АРУ приемника для вывода на дисплей показаний S-метра. В моем случае напряжение АРУ 6-10 В соответствует величине принимаемого сигнала S9- S1 соответственно. Значение S выводится на ЖК дисплей.

Кроссовая плата устройства односторонняя, разведена в программе SprintLayout, изготовлена методом ЛУТ. Вид со стороны элементов:

Готовая плата:

Поработав паяльником, получили набор:

В сборе:

В работе:

При разработке использовались материалы статьи: http://nr8o.dhlpilotcentral.com/?p=83

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

Прикрепленные файлы:

22 January, 2017 21:56

 Arduino  Комментарии к записи 22 January, 2017 21:56 отключены
Янв 222017
 

Оптические датчики сердечного ритма. Простой кардиомонитор

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

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

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

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

Одним из самых распространенных и недорогих способов является оптический метод, который при должном подходе может давать достаточно точный результат. В самом простом варианте можно использовать светодиод и фотодиод, с последнего просто снимается сигнал. При сокращении сердца кровь по сосудам движется неравномерно в зависимости от работы сердца и сосудов. В соответствии с этой неравномерностью будет изменяться отраженный или просвечивающий сигнал от светодиода на фотодиоде. Усилив этот сигнал можно получить не только количество сокращений сердца по амплитудам сигнала, но и приблизительную кардиограмму.

Такие датчики в продаже можно найти нескольких исполнений от простейшей пары светодиод – фотодиод, до модулей с усилением и фильтрацией сигнала. Примером последнего является датчик pulsesensor.com, который мы будем сегодня использовать.

Схема датчика:

Технические характеристики датчика пульса:

  • Напряжение питания от 3 до 5 В
  • Ток потребления при напряжении питания примерно 2 мА
  • Диаметр модуля 16 мм
  • Тип выходного сигнала аналоговый
  • Способ детектирования сердечных сокращений по отраженному сигналу

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

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

Однако использование осциллографа не всегда удобно или возможно, поэтому попробуем собрать самостоятельно простейший кардиомонитор.

Схема устройства:

Схема построена на базе микроконтроллера STM32F103C8T6. В качестве индикатора используется TFT LCD дисплей разрешением 240х320 c интерфейсом SPI на базе контроллера ILI9341. Питание схемы 3,3 В (при питании 3,3 В дисплей будет работать), что позволяет использовать Li-ion аккумуляторы при некоторой модернизации схемы для мобильности и безопасности устройства. Датчик пульса подключается к нулевому каналу АЦП1 микроконтроллера. Аналогично осциллографу по измерениям АЦП строится график на экране дисплея. По значению времени между пиками (отмеряется таймером микроконтроллера) кардиограммы определяем частоту пульса в единицу времени. Каждую миллисекунду происходит прерывание, в котором отсчитывается количество миллисекунд между пиками кардиограммы, то есть период. Для перевода в значение сердечных сокращений в минуту применяем формулу:

60000(мсек)/ΔT (мсек)

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

Итак, получив данные о сердечных сокращениях, можно судить о здоровье следующим образом. У среднестатистического взрослого человека нормальный пульс составляет 60-80 ударов в минуту. У спортсменов это значение значительно ниже и более стабильно при физических нагрузках. У женщин обычно пульс чаще, а у детей в зависимости от возраста значительно чаще, чем у взрослых. Необходимо отметить, что учащение пульса возникает при физической нагрузке, при нервном напряжении, курении, потреблении чая, кофе и алкогольных напитков. Измерьте пульс в то время, когда вас посетили волнения и нервное напряжение. По величине отклонения пульса можно определить, что у вас уже имеется невроз. Наиболее нервные люди, часто волнуясь по пустякам, напрягают свою нервную систему, и тут же сердце реагирует учащенным пульсом, а сосудистая система — увеличением артериального давления. Вначале у таких людей появляется сердечно-сосудистая дистония, невроз сердца, а затем наступают серьезные заболевания сердечно-сосудистой системы. Если ваш пульс реагирует учащением на мелкие неприятности, то необходимо срочно дать отдых организму и заняться собственным оздоровлением. Учащение пульса более 100 ударов в минуту называется тахикардией и требует к себе особого внимания. По этому поводу вы обязательно должны показаться врачу. Понижение пульса до значения ниже 50 ударов в минуту называется брадикардией и также требует к себе особого внимания. По этому поводу вы обязательно должны показаться врачу, если только вы не являетесь спортсменом или не практикуете йогу. При сердечной недостаточности пульс очень медленный и слабый. Сердечная недостаточность требует обязательного вызова врача.

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

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин
IC1 МК STM32 STM32F103C8 1 Поиск в Fivel
VR1 Линейный регулятор AMS1117-3.3 1 Поиск в Fivel
Z1 Кварц 8 МГц 1 Поиск в Fivel
R1 Резистор 100 Ом 1 Поиск в Fivel
R2-R4 Резистор 10 кОм 3 Поиск в Fivel
R5 Резистор 390 Ом 1 Поиск в Fivel
C1, C2 Конденсатор 22 пФ 2 Поиск в Fivel
C3-C7, C9 Конденсатор 100 нФ 6 Поиск в Fivel
C8 Электролитический конденсатор 220 мкФ 1 Поиск в Fivel
C10 Электролитический конденсатор 100 мкФ 1 Поиск в Fivel
HL1 Светодиод 1 Поиск в Fivel
S1 Тактовая кнопка 1 Поиск в Fivel
HG1 LCD-дисплей ILI9341 1 Поиск в Fivel
MOD1 Датчик пульса Pulsesensor 1 Поиск в Fivel

Скачать список элементов (PDF)

Прикрепленные файлы:

Mach3 поиск 0 по оси Z

 Arduino  Комментарии к записи Mach3 поиск 0 по оси Z отключены
Янв 072017
 

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

Итак: Задача установить инструмент в точку ноль по оси Z в программе MACH3.
Алгоритм:
Ось Z опускается на заданную величину (10мм). Если происходит замыкание, то ноль по Z устанавливается с учетом толщины пластину и происходит отскок безопасности на 5 мм. Если замыкания не обнаруживается, то ось Z просто останавливается. Толщину пластины и скорость опускания можно задать в скрине Мач3. Остальные параметры в тексте скрипта.

В программе Мач3 есть возможность обнаружить момент замыкания входа LPT на землю. Обычно это контакт между фрезой и металлической деталью или вспомогательной пластиной. Для этого один контакт мы присоединяем к фрезе, а другой к детали или к пластине.
1.На контроллере находим свободный входной пин разъема LPT. Это пины 10, 11, 12, 13 или 15. Например, 12. И к этому разъему присоединяем один контакт, другой к земле.
1. Выбираем свободный номер пина, заходим в Config->Ports-and-Pins->Input-Signals->Probe и ставим галочки в Enable и ActiveLow. В PinNumber выставляем номер пина.
2. Толщина пластины. Если мы обрабатываем металлическую деталь или печатную плату, то вторым контактом будет сама деталь, пластина не нужна и поправка на ее толщину будет ноль. Если деталь не токопроводящая, то нужна вспомогательная пластина. Т.е. необходимо иметь параметр, где мы можем задать толщину пластины.
Что, например, можно сделать.
Скачиваем с официального сайта программу Screen4.exe — это дизайнер экранов программы Мач, и размещаем ее в директорию Мач. Стартуем, открываем файл 1024.set — стандартный файл скринов Мача, переименовываем и сохраняем под другим именем. Теперь мы можем изменять экраны. Нам надо добавить параметр для установки толщины пластины. Выделяем, например, поле Z inhibit, делаем Copy->Paste и размещаем, например, так:
Изображение
Кликаем дважды левой кнопкой, и в поле OEM-Code-Function пишем 1151. По этому номеру мы можем теперь считать в программе значение этого поля.
Сохраняем скринсет. Стартуем Мач, в View-LoadScreens выбираем и загружаем модифицированный экран Мача с новым полем.
3. Теперь нам надо стартовать установку нуля. Для этого используется кнопка AutoToolZero. При нажатии на эту кнопку начнет выполняться программа, контролирующая установку нуля. Эта программа написана на языке VBscript. Такие программы широко используются и называются скриптами. Текст программы или заглушку можно увидеть по Operator->EditButtonScript, а затем кликнуть по мигающей кнопке AutoToolZero.
Вот сюда-то и надо скопировать или ввести программу установки нуля. Не забыть потом сохранить ее и профиль Мач3, при выходе из программы.
4. Скрипт. Количество скриптов для установки нуля превышает разумные пределы. Многие из них работают, хотя авторы даже не понимают, что рекомендуют. Давайте рассмотрим один из вариантов, доработанных мною до состояния, которое меня устроило. Заодно и скрипты изучил немного. Это мой первый скрипт, поэтому замечания приветствуются.

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

Rem VBScript To probe In the z axis
‘ Это комментарий
If GetOemLed (825) <> 0 Then ‘ Проверяем, может быть ноль уже установлен
‘ Расшифровки параметра в GetOemLed находятся в файле LEDCodes.txt
Code «(Z-Plate is grounded or check connection and try again)» ‘ выводим сообщение об этом
Else
‘ Если ноль не установлен, то пробуем его найти
Code «G4 P1» ‘ Пауза в 1 сек
PlateOffset = GetUserDRO(1151) ‘ считываем значение нового поля. Это толщина пластины.
‘ Значения параметров GetUserDro и GetOemDro находятся в файле DroCodes.txt
CurrentFeed = GetOemDRO(818) ‘ счтываем значения поля Feedrate. Это текущая скорость мм/мин
‘ Эту скорость можно изменить перед поиском нуля в скрине Мача
MyFeed = 100 ‘ скорость поиска нуля мм/сек для вашего станка
‘ Зависит от крепости фрезы
‘ Если скорость больше MyFeed, то мы ее уменьшаем до MyFeed.
‘ если меньще MyFeedRate, то устанавливаем меньшую скорость. Ту, которая в Маче
If CurrentFeed>MyFeed Then
Code «F» &MyFeed ‘ Эту скорость вы можете установить под свой станок как стандартную
Else
Сode «F» &CurrentFeed
‘ Эту скорость вы всегда можете установить для конкретного поиска нуля
End if
‘ Начинаем искать ноль
ZNew = GetDro(2) — 10 ‘ Устанавливаем точку на 10мм ниже текущей высоты Z
Code «G31Z» &ZNew ‘ Идем в эту точку с контролем замыкания контактов Probe
While IsMoving() ‘ Ждем пока ось Z дойдет до точки -10мм
Wend

ZNew = GetVar(2002) ‘ Считываем значение по Z в момент замыкания
Code «G1 Z» &ZNew ‘ Если проскочили, то возвращаемся
While IsMoving () ‘ Ждем возвращения
Wend
If GetOemLed (825) <> 0 Then
‘ Проверяем нашли ноль или просто опустились по Z на 10мм
‘ Проверяем толщину пластины
‘ если она ненулевая, то корректируем ось Z с учетом ее толщины, иначе 0
Call SetDro (2, PlateOffset) ‘ новая точка 0 по Z
Code «G4 P0.5» ‘ ждем установку по Z 0.5 сек

ZNew = 5 ‘ отскок безопасности по Z. Можете поменять
Code «G1 Z5 F200» ‘ идем в точку отскока
While IsMoving () ‘ ждем прихода в отскок
Wend
Code «(Z axis is now zeroed)» ‘ выводим сообщение об установке нуля.

Else
‘ Замыкания не достигли. Просто опустились на 10мм
Code «(Z-Plate ie not grounded. Try again.)» ‘ сообщение об этом
End If

Code «F» &CurrentFeed ‘ возвращаем значение скорости
End If

Текст скрипта находится в директории Macros->»профиль» под именем HiddenScript.m1s
Но при старте Mach3 скрипт берется из профиля. Так что если у вас не обновился профиль после изменения скрипта, при старте Мач3 получите старый скрипт.

Рабочий скрипт:

Rem VBScript To probe In the z axis
If GetOemLed (825) <> 0 Then ‘Check to see if the probe is already grounded or faulty
Code «(Z-Plate is grounded or check connection and try again)» ‘this goes in the status bar if aplicable

Else
Code «G4 P1» ‘Pause 1 seconds to give time to position probe plate
PlateOffset = GetUserDRO(1151) ‘Get plate offset DRO
CurrentFeed = GetOemDRO(818) ‘Get the current feedrate to return to later
MyFeed = 100
If CurrentFeed > MyFeed Then
Code «F» &MyFeed ‘slow down feedrate to 100 mmpm
Else
Code «F» &CurrentFeed
End If
Rem Probe In the z direction
ZNew = GetDro(2) — 10 ‘probe move to current z — 10mm
Code «G31Z» &ZNew
While IsMoving() ‘wait for probe move to finish
Wend

ZNew = GetVar(2002) ‘read the touch point
Code «G1 Z» &ZNew ‘move back to hit point incase there was overshoot
While IsMoving ()
Wend
If GetOemLed (825) <> 0 Then ‘ Zero or Not

Call SetDro (2, PlateOffset) ‘set the Z axis DRO to plate thickness
Code «G4 P0.5» ‘Pause for Dro to update.

ZNew = 5 ‘ Up to 5mm
Code «G1 Z5 F200» ‘&ZNew ‘put the Z retract height you want here
While IsMoving ()
Wend
Code «(Z axis is now zeroed)» ‘puts this message in the status bar
Else

Code «(Z-Plate is not grounded. Try again.)»
End If

Code «F» &CurrentFeed ‘Returns to prior feed rate

End If
Rem Finalized by George164 05/03/2012

Прошивка любого Hex-файла в Arduino

 Arduino  Комментарии к записи Прошивка любого Hex-файла в Arduino отключены
Дек 062016
 

104-Прошивка любого Hex-файла в Arduino при помощи штатного загрузчика (Bootloader).

Автор: GetChiper | 15.12.2013
56 комментариев

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

Нас, прежде всего, интересуют три платы Arduino:
Arduino Uno – как самый распространенный вариант
Arduino Nano – компактный вариант, удобный для применения в небольших конструкциях
Arduino Pro Mini – дешевый компактный вариант без встроенного USB-UART преобразователя (для работы с ним понадобится внешний USB-UART преобразователь), но удобный в случае применения сети устройств.

Arduino_UNOArduino_NANOArduino_PRO_MINI

Во всех вышеописанных платах используется микроконтроллер ATmega328 (в более старых версиях ATmega168).

ATmega48_88_168_328.pdf — Даташит на ATmega48A-48PA-88A-88PA-168A-168PA-328-328P

Одной из главных причин выбора платы Arduino для проекта робота была возможность записывать прошивку устройства в МК не применяя программатора и каких либо дополнительных устройств. Все что нужно для прошивки микроконтроллера Arduino – это стандартный USB шнур (который входит в комплект Arduino).

Это значит, если Вы имеете Ардуину – Вы имеете любое устройство ZiChip!

Запись программы в МК через USB происходит через специальный загрузчик (Bootloader), который записан в МК при изготовлении платы. Вообще, загрузчик предназначен для работы со своим специальным программным обеспечением Arduino IDE, но в случае, когда необходимо прошить в Ардуину что-то постороннее (свой Hex-файл), есть программки позволяющее это реализовать.

Начнем с маленькой и удобной
XLoader (Arduino HEX uploader)

XLoader.zip — Программа для записи Hex-файла в Arduino

Программка имеет аскетичный интерфейс и работать с ней предельно просто:
— подключаем Arduino в USB-порт (отдельного питания не нужно)
— выбираем Hex файл
— выбираем тип Вашего Arduino
— выбираем COM порт, который создался при подключении Arduino к USB (скорость порта автоматически подставится при выборе типа Arduino)
— жмем Upload

Это все! Ничего сложного. Прошивка через несколько секунд будет записана в МК и автоматически запустится. Один минус – программа никак не сообщает о том, что прошивка уже записана, но это можно увидеть по прекращению мерцания светодиодов RXD и TXD на Ардуине.

XLoader использует для записи прошивки AVR Dude и в качестве протокола программирования используется STK500. Но, похоже, в настройках AVR Dude, произведена коррекция, так как использование стандартного AVR Dude с такими же настройками не дает результатов.

Автоматизация XLoader.

При разработке ПО для микроконтроллера производится очень много прошивок и всегда нужно стремиться автоматизировать этот процесс после сборки проекта — это экономит время и нервы. В данном случае автоматизация усложнена, так как программа не показывает командную строку для AVR Dude (разве что подбирать опытным путем), но некоторое упрощение процесса возможно. Делается это следующим способом – после первой прошивки не закрываем окно программы (COM порт после прошивки программа отпускает) и после следующей сборки проекта просто жмем кнопку «Upload». Конечно, сборка должна осуществляться в один и тот же Hex-файл.

Еще одна программка
ARP Uploader (Arduino Hex Uploader and Programmer)

ArduinoUploader.zip — Программа для записи Hex-файла в Arduino

Как и предыдущая, программка имеет простой интерфейс.
Процесс прошивки тот же:
— подключаем Arduino в USB-порт (отдельного питания не нужно)
— выбираем Hex файл
— выбираем тип Вашего Arduino
— выбираем COM порт
— жмем Upload

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

При попытке прошить Arduino Nano программа отказывалась видеть МК. Причиной стала неправильная установка скорости COM порта. По умолчанию скорость стоит 19200, а нужно 57600. Скорость порта в программе не задается явно, она прописывается в строчке «AVR Dude Params» — поменяйте в ней значение 19200 на 57600.

Автоматизация ARP Uploader.
ARP Uploader как и XLoader работает через AVR Dude, но, в отличие от XLoader, показывает командную строку. Это дает возможность использовать AVR Dude напрямую в Make или Bat файле.

Дополнительные материалы.
Драйвера Arduino.

Считаю не лишним напомнить, что для связи Arduino с компьютером в последнем должны присутствовать драйвера. Оставляю здесь архив с драйверами для Arduino (включая и старые драйвера в Old_Arduino_Drivers.zip и драйвера для FTDI-чипа в папке «FTDI USB Drivers»

Arduino_drivers.zip — Драйвера для Arduino

Стали появляться недорогие китайские Ардуины с драйвером CH340G
Driver CH340G.zip — Драйвер для преобразователя USB-UART

Загрузчики Arduino

Если Вы решите собрать свою плату Arduino (а сложного там ничего нет, фактически, это голый ATmega328 или ATmega168), Вам понадобится загрузчик Bootloader который должен содержать МК для работы со средой (или программками для заливки Hex-файлов). Конечно, Вам для записи Hex-файлов в чистый МК понадобится программатор и придется выставить фьюзы.

ATmegaBOOT_168_atmega328.hex — Bootloader для ATmega328
Для правильной работы нужно установить фьюзы следующим образом Low: FF High: DA Ext: 05

ATmegaBOOT_168_diecimila.hex — Bootloader для ATmega168
Фьюзы Low: FF High: DD Ext: 00

Схемы Arduino

Cхемы вышеописанных Ардуин.
Arduino_Uno_Rev3-schematic.pdf — Схема Arduino Uno
ArduinoNano30Schematic.pdf — Схема Arduino Nano
Arduino-Pro-Mini-schematic.pdf — Схема Arduino Pro Mini

Фьюзы установленные по умолчанию в Arduino (только с ATmega328)
Arduino Uno
Low Fuse 0xFF
High Fuse 0xDE
Extended Fuse 0x05

Arduino Duemilanove or Nano w/ ATmega328
Low Fuse 0xFF
High Fuse 0xDA
Extended Fuse 0x05

Arduino BT w/ ATmega328
Low Fuse 0xFF
High Fuse 0xD8
Extended Fuse 0x05

LilyPad Arduino w/ ATmega328
Low Fuse 0xFF
High Fuse 0xDA
Extended Fuse 0x05

Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328
Low Fuse 0xFF
High Fuse 0xDA
Extended Fuse 0x05

(Visited 25 343 times, 70 visits today)

Раздел: Полезные программы Программаторы и преобразователи Метки: Arduino, ATmega328