CANopen_logoДрайвер CANopen (стек протокола) — это программа для микроконтроллера, реализующая протокол CANopen на основе интерфейса связи CAN. НПФ ВЕКТОР реализовала данный драйвер для микроконтроллеров Texas Instruments на ядре C28, например для TMS320F2810, TMS320F28335, т.е. серий Delfino, Piccolo и т.п., которые имеют одинаковый аппаратный модуль CAN. Также драйвер реализован для микроконтроллеров Concerto Texas Instruments, имеющих два ядра (драйвер расположен на ядре ARM, но параметры словаря объектов могут быть добавлены также из ПО ядра C28, сделан специальный модуль синхронизации данных). Также драйвер реализован для отечественного motorcontrol микроконтроллера K1921BK01T фирмы ОАО «НИИЭТ». Драйвер НПФ ВЕКТОР имеет расширения по сравнению со стандартным CANopen, однако они организованы в рамках протокола CANopen и являются «надстройками», не нарушая стандарт.

 

Драйвер поддерживает следующие стандартные CANopen функции:

  • Сервис Heartbeat из группы сервисов NTM. Это короткие сообщения, отправляющиеся периодически и нужные для оповещения, какие устройства есть в сети.
  • Expedited SDO сервис: сообщения запрос-ответ, предназначенные для доступа к словарю объектов. Позволяют читать и записывать любые параметры по запросу от среды верхнего уровня (мастера).
  • PDO сервис, реализующий различные типы PDO — синхронные, асинхронные. Драйвер поддерживает 8 свободно конфигурируемых PDO на прием (RPDO) и 8 свободно конфигурируемых PDO на передачу (TPDO).  Это основные сообщения обмена между устройствами внутри сети. Мастер конфигурирует в каждом устройстве, какие PDO и с какими данными и по какому событию устройство будет принимать, какие посылать. Одно сообщение PDO содержит 64 байта данных, которые набираются из разных объектов словаря свободно.
  • Сервис синхронизации по времени Sync, который осуществляет синхронизацию счетчиков времени между разными устройствами сети. На текущий момент синхронизация по времени осуществляется с точностью до 100мкс, и реализована только в драйвере для ядра C28 TI. За счет этого сервиса устройства сети CANopen могут работать совместно над одой задачей, например осуществлять многокоординатное позиционное движение, если узлы сети — это серводвигатели разных осей одного станка.

 

Драйвер поддерживает следующие расширенные CANopen функции, реализованные ООО «НПФ ВЕКТОР» и поддерживаемые ПО верхнего уровня UniCON:

  • Возможность сохранять/загружать значения параметров словаря объектов в энергонезависимую память устройства (eeprom). Эта функция имеется в большинстве других реализаций стека CANopen.
  • Предоставление доступа к структуре словаря объектов для возможности «скачивания» структуры по сети CANopen. Т.е. устройство верхнего уровня (мастер) может, не зная состава словаря объектов конкретного устройства, загрузить его непосредственно из устройства для дальнейшего взаимодействия. Функция реализована посредством обмена данными через некоторый набор «стандартных» объектов словаря, которые есть во всех устройствах CANopen с драйвером реализации НПФ ВЕКТОР. В сторонних реализациях CANopen для работы с устройством предполагается обязательное наличие так называемого EDS файла, описывающего словарь объектов. Другими словами, содержимое этого файла в реализации драйвера НПФ ВЕКТОР может скачиваться по сети.
  • Расширенные типы данных, поддерживающие так называемые масштабирующие коэффициенты и единицы измерений. Т.е. для параметра можно указать не только что он, например, знаковый длиной 32 разряда, но и что цена младшего разряда составляет 0.00125 Ампер. Вместе с функцией загрузки словаря по сети это позволяет отображать пользователю параметры не просто в виде сухих чисел, а непосредственно в вольтах, амперах и т.п. Программисту же это позволяет не пытаться внутри программы использовать физические величины (чтобы число 125, скажем, обозначало 12,5 А), а реализовывать систему управления в независимых относительных единицах измерения. Это делает систему управления универсальной с точки зрения масштабируемости — программа будет одинаково хорошо работать как для преобразователя частоты мощностью 1кВт, так и для преобразователя частоты мощностью 1000кВт.
  • Поддержка функций обратного вызова при доступе к параметру. Программист устройства может сконфигурировать драйвер CANopen так, чтобы при обращении к определенному объекту словаря драйвер вызвал произвольную пользовательскую функцию. Это удобно для различных надстроек на основе словаря CANopen: например, для выгрузки значений журнала аварий устройства и т.п. Программист может сразу же после задания средой верхнего уровня в одном объекте, например, номера ячейки журнала аварий в другой объект словаря выставить данные с кодом аварии.
  • Функция цифрового осциллографирования внутри микроконтроллера. Для отладки сложных систем управления, таких как система векторного управления, требуется видеть осциллограммы процессов внутри системы управления: изменение тех или иных переменных во времени (подробнее читайте в статье Способы отладки встраиваемых микропроцессорных систем в преобразовательной технике или аналогичной на Geektimes). Драйвер CANopen ООО «НПФ ВЕКТОР» имеет интерфейс для модуля цифрового осциллографа и позволяет пользователю выбрать из словаря объектов любые четыре параметра, после чего передает их адреса переменных внутри микроконтроллера модулю осциллографирования (который записывает в массивы, как изменяются эти значения во времени). После записи осциллограмм при помощи функции обратного вызова программа верхнего уровня UniCON загружает и отображает эти осциллограммы. Также возможна запись осциллограмм по триггеру. Для программиста системы управления доступно 32 независимых триггера, которые могут запускать процесс осциллографирования по конкретным событиям в системе управления. У пользователя программы верхнего уровня UniCON есть возможность указать по какому событию он хочет записать в данный момент осциллограмму. 
  • Функция обновления прошивки программы через CANopen (программатор). Реализована в текущий момент  для микроконтроллеров на ядре C28 TI, на ядре ARM TI, а также для НИИЭТ K1921BK01T. Функционирует в виде отдельного мини-драйвера CANopen (бутлоадера), которому передается управление для осуществления функции перепрограммирования микроконтроллера. Со стороны верхнего уровня программирование осуществляет ПО UniCON на основе предоставленного пользователем .out файла с новой программой микроконтроллера. Данная функция не входит в базовую версию драйвера CANopen и поставляется отдельно.

 

В существующее ПО микроконтроллера CANopen драйвер, включая модуль осциллографа и программатора, встраивается достаточно просто. Опытным разработчиком такая интеграция может быть выполнена за один рабочий день при условии, что до этого момента с этим драйвером разработчик знаком не был. Драйвер представляет из себя несколько файлов на Си (или объектных файлов, в зависимости от договора поставки) и несколько заголовочных файлов. От пользователя драйвера (программиста микроконтроллера) требуется подключить заголовочные файлы, обеспечить вызов главной функции обработки драйвера с частотой 1 кГц (в прерывании по таймеру), сконфигурировать выводы микроконтроллера (откуда выводится CAN), разрешить прерывание CAN (обработчик — внутри драйвера), сконфигурировать приоритеты разрешения прерываний (какие прерывания могут прерывать обработчик CANopen драйвера, какие нет), обеспечить вызов модуля цифрового осциллографа (с какой частотой съема данных пользователь хочет получать осциллограммы) а также набрать словарь объектов в редакторе словаря объектов CoodEdit. Также нужно задать, какие действия будут совершаться перед вызовом программатора, чтобы безаварийно остановить устройство, если оно в работе. После этого можно приступать к использованию.

Для микроконтроллера НИИЭТ существует бесплатная версия драйвера (без функции бутлоадера), доступная в составе проекта MotorControlDemo. Техническое описание доступно в разделе https://bitbucket.org/niietcm4/motorcontroldemo/downloads/ , файл «Описание драйвера CANopen v12.pdf».