Требуется считывание датчика ЛИР-ДА158А.03 используя микроконтроллер серии STM32F4.
Возможна ли работа с протоколом BiSS или SSI посредством штатных периферийных модулей микроконтроллеров STM32F4?
(уровни сигналов сконвертированы MAX490)
Или требуется специализированная ИМС BiSS <-> SPI ?
Если возможен непосредственный прием, какой протокол предпочителен BiSS или SSI?
Существуют ли принципиальные ограничения при работе с BiSS или SSI?
STM32 + MAX490 + ЛИР-ДА158А.03 BiSS/SSI
Модератор: Денис Кашин
-
- СКБИС
- Сообщения: 467
- Зарегистрирован: 13 фев 2008, 14:38
- Контактная информация:
Re: STM32 + MAX490 + ЛИР-ДА158А.03 BiSS/SSI
Здравствуйте,
Паспорт
Особенностью BiSS является иной способ определения готовности данных (событие ACK) и возможность регистрового обмена, что обеспечивает расширенный информационный обмен с датчиками.
Да, на похожем микроконтроллере мы реализовывали master для таких протоколов.Возможна ли работа с протоколом BiSS или SSI посредством штатных периферийных модулей микроконтроллеров STM32F4?
Замечу, что выходной сигнал на микроконтроллер должен поступать уровнем не более 3.3Вуровни сигналов сконвертированы MAX490
Мы сделали такой модуль для установки на плату, называется ЛИР-919П. Сейчас возможен выпуск опытной партии.Или требуется специализированная ИМС BiSS <-> SPI
Паспорт
SSI считается устаревшим протоколом, для новых устройств предпочтителен BiSS-Cкакой протокол предпочителен BiSS или SSI
Это синхронные протоколы, необходимо соблюдать границы периода тактовых импульсов, чтобы не произошёл тайм-аутСуществуют ли принципиальные ограничения при работе с BiSS или SSI
Особенностью BiSS является иной способ определения готовности данных (событие ACK) и возможность регистрового обмена, что обеспечивает расширенный информационный обмен с датчиками.
Re: STM32 + MAX490 + ЛИР-ДА158А.03 BiSS/SSI
SSI на STM читается примерно так:
//======================================================================================
uint32_t gray2bin(uint32_t v, uint8_t bits)
//======================================================================================
{
for(unsigned i = 1; i < bits; i <<= 1) v ^= (v >> i);
return v;
}
//======================================================================================
uint32_t read_ABS_LIR (uint16_t clkpin, GPIO_TypeDef* clkport, uint16_t datapin, GPIO_TypeDef* dataport, uint8_t bits, uint8_t isgray)
//======================================================================================
{
uint32_t data = 0;
if ((GPIO_ReadInputData(dataport) & datapin) > 0)
{
GPIO_WriteBit (clkport, clkpin, Bit_RESET); // clk = 0;
for (int i = 0; i<2; i++);
GPIO_WriteBit (clkport, clkpin, Bit_SET); // clk = 1; // g new data
for (int val = bits; val > 0; val--)
{
GPIO_WriteBit (clkport, clkpin, Bit_RESET); // clk
data = (data << 1) | ((GPIO_ReadInputData(dataport) & datapin) > 0x00);
GPIO_WriteBit (clkport, clkpin, Bit_SET); // clk
}
if (isgray > 0) data = gray2bin(data, bits);
return data;
} else
return 0xFFFFFFFF;
}
//======================================================================================
uint32_t gray2bin(uint32_t v, uint8_t bits)
//======================================================================================
{
for(unsigned i = 1; i < bits; i <<= 1) v ^= (v >> i);
return v;
}
//======================================================================================
uint32_t read_ABS_LIR (uint16_t clkpin, GPIO_TypeDef* clkport, uint16_t datapin, GPIO_TypeDef* dataport, uint8_t bits, uint8_t isgray)
//======================================================================================
{
uint32_t data = 0;
if ((GPIO_ReadInputData(dataport) & datapin) > 0)
{
GPIO_WriteBit (clkport, clkpin, Bit_RESET); // clk = 0;
for (int i = 0; i<2; i++);
GPIO_WriteBit (clkport, clkpin, Bit_SET); // clk = 1; // g new data
for (int val = bits; val > 0; val--)
{
GPIO_WriteBit (clkport, clkpin, Bit_RESET); // clk
data = (data << 1) | ((GPIO_ReadInputData(dataport) & datapin) > 0x00);
GPIO_WriteBit (clkport, clkpin, Bit_SET); // clk
}
if (isgray > 0) data = gray2bin(data, bits);
return data;
} else
return 0xFFFFFFFF;
}
Re: STM32 + MAX490 + ЛИР-ДА158А.03 BiSS/SSI
Добрый день!
А есть пример кода для BiSS ?!
А есть пример кода для BiSS ?!
-
- СКБИС
- Сообщения: 45
- Зарегистрирован: 19 июл 2022, 09:35
Re: STM32 + MAX490 + ЛИР-ДА158А.03 BiSS/SSI
Здравствуйте, AlexMad
Как писал ранее Денис, наша организация не предоставляет код подобного рода, т.к.:
- как любая коммерческая организация мы заинтересованы в продаже своей продукции. Кроме этого, мы гарантирует надежную работу своих изделий, ведь неправильное считывание позиции может привести как к порче нашей продукции (преобразователей), станка/стенда, так и обрабатываемой на станке заготовки, которая в некоторых случаях, может превышать стоимость станка ;
- нельзя предоставить код, который работал бы на любом микроконтроллере из-за разницы библиотек периферии, предоставляемых производителями. Да даже у одного производителя аналогичные функции на разные семейства МК могут иметь разные названия или поведение работы;
- кроме кода опроса преобразователя МК явно выполняет какой-то дополнительный функционал (иначе бы это не имело смысла). Соответственно, гарантировать работу своего кода мы бы не могли. К примеру, если взять код Mitya1698, который работоспособен, и предположить, что во время его выполнения произойдет вызов прерывания, то получится плавающая проблема с проскакивающими сбойными позициями. Получение позиции по SSI / BiSS протоколу является весьма простой задачей, не составляющей каких либо проблем для реализации и требующая углубленных знаний программирования. Поэтому, в большинстве случаев, поиск кода такого рода осуществляется с целью копипасты в проект без даже поверхностного изучения протокола. После чего, при возникновении проблем, последовало бы обращение к нам за консультацией - почему наш код не работает. Осуществление консультаций привело бы к большим временным затратам с нашей стороны.
- кроме "программной" части, так же есть еще и аппаратная. То, что работает в условиях стола, не всегда будет работать при установке в шкаф/на станок. Неверное выполнение уравнивания потенциалов, подключение заземления и средств защиты от помех может также привести к выводу устройств из строя.
Однако, мы никаким образом не препятствуем самостоятельной реализации пользователями мастера для опроса наших преобразователей. Информация по протоколу SSI есть в каталоге на нашем сайте. Информацию по протоколу BiSS можно найти на сайте iC-Haus.
Для получения позиции по BiSS без работы с регистрами EDS в код Mitya1698 необходимо добавить функцию подающую START и ожидающую ACK от преобразователя. Также настоятельно рекомендуется производить проверку CRC. Алгоритм расчета CRC есть в апноте к протоколу на сайте iC-Haus.
Как писал ранее Денис, наша организация не предоставляет код подобного рода, т.к.:
- как любая коммерческая организация мы заинтересованы в продаже своей продукции. Кроме этого, мы гарантирует надежную работу своих изделий, ведь неправильное считывание позиции может привести как к порче нашей продукции (преобразователей), станка/стенда, так и обрабатываемой на станке заготовки, которая в некоторых случаях, может превышать стоимость станка ;
- нельзя предоставить код, который работал бы на любом микроконтроллере из-за разницы библиотек периферии, предоставляемых производителями. Да даже у одного производителя аналогичные функции на разные семейства МК могут иметь разные названия или поведение работы;
- кроме кода опроса преобразователя МК явно выполняет какой-то дополнительный функционал (иначе бы это не имело смысла). Соответственно, гарантировать работу своего кода мы бы не могли. К примеру, если взять код Mitya1698, который работоспособен, и предположить, что во время его выполнения произойдет вызов прерывания, то получится плавающая проблема с проскакивающими сбойными позициями. Получение позиции по SSI / BiSS протоколу является весьма простой задачей, не составляющей каких либо проблем для реализации и требующая углубленных знаний программирования. Поэтому, в большинстве случаев, поиск кода такого рода осуществляется с целью копипасты в проект без даже поверхностного изучения протокола. После чего, при возникновении проблем, последовало бы обращение к нам за консультацией - почему наш код не работает. Осуществление консультаций привело бы к большим временным затратам с нашей стороны.
- кроме "программной" части, так же есть еще и аппаратная. То, что работает в условиях стола, не всегда будет работать при установке в шкаф/на станок. Неверное выполнение уравнивания потенциалов, подключение заземления и средств защиты от помех может также привести к выводу устройств из строя.
Однако, мы никаким образом не препятствуем самостоятельной реализации пользователями мастера для опроса наших преобразователей. Информация по протоколу SSI есть в каталоге на нашем сайте. Информацию по протоколу BiSS можно найти на сайте iC-Haus.
Для получения позиции по BiSS без работы с регистрами EDS в код Mitya1698 необходимо добавить функцию подающую START и ожидающую ACK от преобразователя. Также настоятельно рекомендуется производить проверку CRC. Алгоритм расчета CRC есть в апноте к протоколу на сайте iC-Haus.
Re: STM32 + MAX490 + ЛИР-ДА158А.03 BiSS/SSI
Спасибо за разбор, у меня во время выполнения прерывания не возникают, процессор мало нагружен.