FIXME //Ведется работа над переводом// ===== Контроллер myCNC-ET15 ===== (Превью) ==== Подключение питания ==== Плата управления myCNC-ET15 использует 24В постоянного тока. Плата содержит 4 контакта для подключения + 24В (соединены внутри) и несколько контактов GND для удобного подключения внешних устройств. Контакты питания 24 В постоянного тока, а также контакты + 24В и GND показаны на рисунке ниже. __ПРИМЕЧАНИЕ: На плате есть набор неправильно маркированных выходов 5В (помеченных на плате как 24В). Ниже приведена правильная распиновка блока питания: __ {{:mycnc:et15-power-v2.jpg}} ==== Выходы Pulse-Dir ==== ET15 имеет 8 выходов pulse/dir, максимальная частота импульсов 3 МГц. Импульсные выходы ET15 соответствуют стандарту RS422 и совместимы с большинством серво и шаговых драйверов (линейный драйвер с парафазными сигналами положительной и отрицательной полярности). Внутренняя схема для pulse-dir показана на рисунке ниже. {{hardware:pulse-dir8.jpg?800}} Каналы PULSE-DIR 0,1,2,3: {{:mycnc:et15-pulsedir-001-v2.jpg}} Каналы PULSE-DIR 4,5,6,7: {{:mycnc:et15-pulsedir-002-v2.jpg}} ==== ET15 - Выходы ==== Плата ET15 содержит 64 выхода * 56 выходов с открытым коллектором (OUT # 0-OUT # 55) * 8 выходов ШИМ (ШИМ №0 - ШИМ №7) Внутренняя схема показана на рисунке ниже. Чип матрицы транзисторов Дарлингтона ULN2803 используется для буферизации двоичных выходов в ET15. Каждый чип содержит 8 транзисторов и обрабатывает 8 двоичных выходов. {{hardware:outputs-2803.jpg?400}} Выходы на плате ЕТ15: {{:mycnc:et15-outputs-001-v4.jpg}} ==== Гальванически развязанные входы ==== Плата управления ET15 имеет 64 гальванически развязанных двоичных входов, 16 + 2 группы по 4 входа в каждой. Каждая группа имеет отдельные контакты питания, поэтому входы могут получать питание от разных источников. Возможно одновременное использование датчиков PNP и NPN. Схема группы из четырех входов показана на рисунке ниже. {{hardware:inputs.jpg?500}} 16 групп (64 контакта контакта в целом) являются независимыми входами. Дополнительные 2 группы (8 входов оптопары) подключены к 8и контактам входов энкодера (контакты ENCODER 5B, 5C, 6A, 6B, 6C, 7A, 7B, 7C). Измените положение SW1, чтобы выбрать либо гальванически развязанные входы, либо входы линейного драйвера для ВХОДОВ # 64 ... # 71. {{:mycnc:et15-inputs-001-v2.jpg}} ==== ET15 Входы энкодера ==== Плата ET15 имеет 8 входов инкрементного энкодера. Входы энкодера на плате ET15 соответствуют стандарту RS422 и совместимы с большинством энкодеров сервоприводов и линейных драверов. Микросхема 34C86 используется в ET15 в качестве приемника сигналов энкодера. Внутренняя схема входов энкодера показана на рисунке ниже. **INCREMENTAL ENCODER** входная схема (1 энкодер, показаны сигналы ABC) {{hardware:inputs-encoder.jpg?500}} **ЭНКОДЕРЫ** каналы 0,1,2,3: {{:mycnc:et15-encoders-001-v2.jpg}} **ЭНКОДЕРЫ** каналы 4,5,6,7: {{:mycnc:et15-encoders-002-v2.jpg}} Входы энкодера отображаются в списке входов общего назначения, зарезервированы адреса от 64 до 87. Плата ET15 может использовать до 88 двоичных входов. ==== Входы АЦП ==== Плата управления myCNC-ET15 имеет 8 входов АЦП в диапазоне 0 ... 5 В. Входные разъемы АЦП также имеют разъемы GND и + 5В постоянного тока для удобного подключения потенциометра. На рисунке ниже показан пример подключения потенциометра ко входу ADC2. {{hardware:et15-adc-connection-002.png}} ==== Шина RS422 / RS485 ==== Интерфейсы шины RS422 и RS485 реализованы в аппаратном обеспечении платы управления myCNC-ET15. Включены интерфейсы Modbus ASCII/RTU и Hypertherm Serial для RS485 и RS422. Схемы выходов для интерфейсов RS422/RS485 приведены ниже. {{hardware:et15:et15-uart-001.png?800}} Плата управления myCNC-ET15 имеет разъем для шины RS422/RS485. Схема контактов разъема для RS422/RS485 показана ниже {{:mycnc:et15-uart-001-v2.jpg}} ==== Пример настройки шпинделя соединенного по Modbus RS485 ==== [[:mycnc:ET15-RS485-Modbus-rus|Настройка шпинделя на Modbus RS485]] ==== Примеры подключения ==== === Пример подключения трехпроводного датчика NPN === Перемычки J1, J2, J3, J4 открыты. {{hardware:et15-npn-sensor-connection-001.png}} {{hardware:et15-b-connection-inputs-003.png}} === Пример подключения трехпроводного датчика PNP === Перемычки J1, J2, J3, J4 открыты. {{hardware:et15-pnp-sensor-connection-001.png?1000}} {{hardware:et15-b-connection-inputs-004.png?1000}} === Пример подключения переключателя === Перемычка для выбранной группы (J1, J2, J3, J4) закрыта. Общий провод для 4-х оптопар подключается к внутреннему +24 В, если перемычка замкнута. Переключатель должен замкнуть другой вход оптопары на GND (0 В), чтобы активировать входной контакт. J4 должен быть закрыт, чтобы подключить контакт оптопары к +24В. Переключатель должен замыкать провод на GND (0 В). {{hardware:et15-switch-connection-001.png?1000}} ==== Управление скоростью шпинделя через выход ЦАП (0-10 В) ==== {{hardware:et15-10v-spindle-speed-control-001.png}} ==== Размеры платы ==== PDF: http://cnc42.com/downloads/et15bb-r09.pdf DXF: http://cnc42.com/downloads/et15bb-r09.dxf {{hardware:et15:et15bb-dimension.png}} ==== SSH доступ к ET15 ==== Встроенное программное обеспечение платы ET15 сделано на основе RT-Linux и SSH-сервер и может быть настроено для получения доступа к плате, настройкам, и возможностям изменения и обновления встроенного программного обеспечения. Данные для доступа: ^ ^ ^ | порт SSH | 22 | | логин | mycnc | | пароль | operator | | команда для доступа | ssh mycnc@192.168.0.69 | | команда для доступа | ssh mycnc@192.168.1.69 | | команда для доступа | ssh mycnc@192.168.4.69 | ==== Кинематика осей для ET15 ==== Встроенное ПО платы ET15 поддерживает преобразование кинематики, определяемое пользователем. Прошивка ET15 запускает процедуру **MKinematics** (запускатеся каждый серво цикл). Код процедуры: void MKinematics(int64_t * input, int64_t * output, uint32_t naxes); Предполагается, что процедура заполняет массив выходных координат в соответствии с кинематикой машины. Процедура MKinematics может содержать простое присвоение выходных координат входным значениям, если нет необходимости в кинематических преобразованиях. void KinematicsPlugin::MKinematics(int64_t *input, int64_t *output, uint32_t naxes) { for (uint32_t i=0;i Альтернативный способ полностью отключить плагин кинематики - это удалить файл библиотеки плагинов **libkinematicsplugin.so** из папки плагинов. Пример процедуры MKinematics для робототехники показан ниже. void KinematicsPlugin::MKinematics(int64_t *input, int64_t *output, uint32_t naxes) { double x=input[0]*InputRatio[0]; double y=input[1]*InputRatio[1]; double z=input[2]*InputRatio[2]; double M2=x*x+y*y; double M=sqrt(M2); double L2=M2+z*z; double L=sqrt(L2); double a=acos(x/M); double b=asin(z/L); double d=acos((R1*R1+R2*R2-L2)/(2*R1*R2)); double f=asin(sin(d)*R2/L); double c=b+f; output[0]=a*OutputRatio[0]; output[1]=c*OutputRatio[1]; output[2]=d*OutputRatio[2]; } **Процедура MKinematics** является частью полного класса C ++ **MKinematicsPlugin**, который может иметь другие переменные и функции помимо основного **MKinematics**. Например, MKinematics использует переменные R1, R2, которые определяют длину соединений. Значения переменных могут быть определены статически в конструкторе класса KinematicsPlugin::KinematicsPlugin(QObject *parent) : QObject(parent) { for (int i=0;i<32;i++) { InputRatio[i]=1; OutputRatio[i]=1; } R1=100; R2=50; } или могут назначаться из кода прошивки путем запуска процедуры **setParameters**, которая является частью интерфейса плагина void KinematicsPlugin::setParameters(uint32_t addr, double param) { switch (addr) { case 0: R1=param;break; case 1: R2=param;break; } } Программное обеспечение контроллера myCNC использует 64-битные значения с фиксированной точкой и управляет «единицами», которые равны «импульсам» (для драйверов двигателя с импульсным приводом) или «единице энкодера» для аналогового сервоуправления. Для расчета кинематических формул, значения должны быть в реальных единицах, таких как миллиметр, дюйм, градус или радиан. Соотношения для перевода «импульсов» в «миллиметры» или «радианы» до перевода кинематики можно назначать статически или получать из основного программного обеспечения через процедуру **setInputRatios** void KinematicsPlugin::setInputRatios(double * ratio, uint32_t naxes) { for (uint32_t i=0;i После перевода кинематики значения координат следует переводить обратно в «импульсные» единицы. Это можно сделать с помощью процедуры **setOutputRatios** или назначить статически в коде плагина. void KinematicsPlugin::setOutputRatios(double * ratio, uint32_t naxes) { for (uint32_t i=0;i Плагин для кинематики находится на стадии разработки. В будущем возможны изменения. Полный пример плагина кинематики: Kinematics plugin source file #include "kinematicsplugin.h" #include KinematicsPlugin::KinematicsPlugin(QObject *parent) : QObject(parent) { for (int i=0;i<32;i++) { InputRatio[i]=1; OutputRatio[i]=1; } R1=100; R2=50; } void KinematicsPlugin::setParameters(uint32_t addr, double param) { switch (addr) { case 0: R1=param;break; case 1: R2=param;break; } } void KinematicsPlugin::MKinematics(int64_t *input, int64_t *output, uint32_t naxes) { for (uint32_t i=0;i Дополнительно необходим следующий файл: #ifndef KINEMATICSPLUGIN_H #define KINEMATICSPLUGIN_H #include "kinematicsinterface.h" #include #include class KinematicsPlugin : public QObject, KinematicsInterface { Q_OBJECT Q_PLUGIN_METADATA(IID Kinematics_Interface_iid FILE "kinematicsplugin.json") Q_INTERFACES(KinematicsInterface) public: KinematicsPlugin(QObject *parent = 0); void MKinematics(int64_t * input, int64_t * output, uint32_t naxes); void setInputRatios(double * ratio, uint32_t naxes); void setOutputRatios(double * ratio, uint32_t naxes); void setParameters(uint32_t addr, double param); protected: double InputRatio[32]; double OutputRatio[32]; double R1,R2; }; #endif // KINEMATICSPLUGIN_H Также в дополнение: ifndef KINEMATICSINTERFACE_H #define KINEMATICSINTERFACE_H #include #include class KinematicsInterface { public: virtual ~KinematicsInterface() {} virtual void MKinematics(int64_t * input, int64_t * output, uint32_t naxes) = 0; virtual void setInputRatios(double * ratio, uint32_t naxes) = 0; virtual void setOutputRatios(double * ratio, uint32_t naxes) = 0; virtual void setParameters(uint32_t addr, double param) = 0; }; #define Kinematics_Interface_iid "pv-automation.myCNC.ET15.R1.KinematicsInterface" Q_DECLARE_INTERFACE(KinematicsInterface, Kinematics_Interface_iid) #endif // KINEMATICSINTERFACE_H Полный архив исходников для этого примера можно скачать здесь: http://pv-automation.com/downloads/kinematics_2018-0205_0000.tar.bz2 http://cnc42.com/downloads/1366.7z