30.12.2021, 14:44
|
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
STM32F407VET HAL CAN не работает
Здравствуйте.
Есть у меня двигатель MF5015 v1. Работает через CAN шину и через модуль USART. Через последовательный порт все нормально работает.
А вот через CAN никак не могу добиться ответа.
Даташиты приложил. Связывался с китаццами. Они сказали какие настройки шины сделать. На фотке прикладываю переписку.
Отправку делаю вот так:
Код:
|
void SendCAN(uint8_t ID, uint32_t mbx) {
if (HAL_CAN_GetTxMailboxesFreeLevel(&hcan1) != 0) {
CAN_TxHeaderTypeDef msgHeader;
uint8_t msgData[8];
memset(msgData, 0, 8);
msgHeader.StdId = 0x140;
msgHeader.DLC = 8;
msgHeader.TransmitGlobalTime = DISABLE;
msgHeader.RTR = CAN_RTR_DATA;
msgHeader.IDE = CAN_ID_STD;
uint32_t mailBoxNum = mbx;
// по даташиту это запрос состояния
msgData[0] = 0x9A;
HAL_CAN_AddTxMessage(&hcan1, &msgHeader, msgData, &mailBoxNum);
}
} |
Настройки CAN
Код:
|
void MX_CAN1_Init(void)
{
/* USER CODE BEGIN CAN1_Init 0 */
/* USER CODE END CAN1_Init 0 */
/* USER CODE BEGIN CAN1_Init 1 */
/* USER CODE END CAN1_Init 1 */
hcan1.Instance = CAN1;
hcan1.Init.Prescaler = 4;
hcan1.Init.Mode = CAN_MODE_NORMAL;
hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ;
hcan1.Init.TimeSeg1 = CAN_BS1_6TQ;
hcan1.Init.TimeSeg2 = CAN_BS2_2TQ;
hcan1.Init.TimeTriggeredMode = DISABLE;
hcan1.Init.AutoBusOff = DISABLE;
hcan1.Init.AutoWakeUp = DISABLE;
hcan1.Init.AutoRetransmission = DISABLE;
hcan1.Init.ReceiveFifoLocked = DISABLE;
hcan1.Init.TransmitFifoPriority = DISABLE;
if (HAL_CAN_Init(&hcan1) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN CAN1_Init 2 */
/* USER CODE END CAN1_Init 2 */
} |
Фильтр вроде бы как должен пропускать абсолютно все сообщения
Код:
|
CAN_FilterTypeDef canFilterConfig;
canFilterConfig.FilterBank = 0;
canFilterConfig.FilterActivation = DISABLE;
canFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
canFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
canFilterConfig.FilterIdHigh = 0xffff;
canFilterConfig.FilterIdLow = 0x0000;
canFilterConfig.FilterMaskIdHigh = 0x0000;
canFilterConfig.FilterMaskIdLow = 0x0000;
canFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;
canFilterConfig.FilterActivation = ENABLE;
canFilterConfig.SlaveStartFilterBank = 14;
HAL_CAN_ConfigFilter(&hcan1, &canFilterConfig);
HAL_CAN_Start(&hcan1);
HAL_CAN_ActivateNotification(&hcan1, CAN_IT_RX_FIFO0_MSG_PENDING); |
Пробовал отправку в режиме loopback - все работает и прерывание срабатывает.
Даже заморочился с анализатором шины. Подключил два канала.
Терминатор на 120 ом вроде как есть в двигателе как написано в даташите.
В чем может быть еще проблема??? Каким образом можно наладить связь?
|
|
|
|
30.12.2021, 21:28
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,169
Сказали Спасибо 3,858 раз(а) в 2,928 сообщении(ях)
|
Re: STM32 HAL CAN не работает
worldmasters, а собрать на втором камне своего второго клиента и наладить обмен?
Вместо saleae посмотреть на происходящее на шине осциллографом. ЛА применяют при уверенности в работоспособности железа (он таки логический).
Есть уверенность в полной работоспособности железа (CAN) на стороне двигателя?
Неплохо бы проверить функционирование и положение пятого (R) переключателя в блоке DIP переключателей.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
Сказали "Спасибо" mike-y-k
|
|
|
31.12.2021, 12:43
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: STM32 HAL CAN не работает
Ошибки возникают? Я как-то мучился с китайским шаговиком: в даташите скорость 100, а фактически оказалась 250! Очень полезно все эти bus fault'ы и т.п. отслеживать.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
09.01.2022, 20:37
|
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
Re: STM32 HAL CAN не работает
Сообщение от mike-y-k
|
Есть уверенность в полной работоспособности железа (CAN) на стороне двигателя?
|
Китаец утверждает что все работает. В последней переписке сказал что стоит драйвер TCAN337. Готовых модулей для проверки не нашел. Только микросхемы. Только непонятно какое напряжение используется шиной. Думаю что то которое я даю для питания двигателя. Это около 18 вольт. Надеюсь стм не сгорит.
Сообщение от mike-y-k
|
Неплохо бы проверить функционирование и положение пятого (R) переключателя в блоке DIP переключателей.
|
Это разобрать двигун?? Так то он дорогой и страшновато. Были попытки но после откручивания всех видимых винтов он не поддался.. скривился и дальше смелости не хватило ломать.
|
|
|
|
09.01.2022, 20:59
|
|
Временная регистрация
Регистрация: 16.09.2008
Сообщений: 87
Сказал спасибо: 25
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: STM32 HAL CAN не работает
Вы не написали какое железо стм-ка какая. Я когда себе делал переходник USB-CAN чтобы отладить can в настройках стм-ки выбираешь замкнут сам на себя и отправляешь и получаешь, если все проходит убираешь настройку туда и обратно, у меня передача так выглядела:
|
|
|
|
09.01.2022, 21:36
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,169
Сказали Спасибо 3,858 раз(а) в 2,928 сообщении(ях)
|
Re: STM32 HAL CAN не работает
worldmasters, а на схему терминатора посмотреть? Проверить сопротивление (без питания двигателя) при обоих положениях 5-го переключателя, оставить ближнее к 120Ω. Если не меняется и сильно выше требуемого - проблема с терминатором.
Оптимальнее всего в положении отключенного терминатора установить в колодке двигателя сопротивление 120Ω между CANH и CANL. Тогда будет полная уверенность в правильной терминации со стороны двигателя, аналогично и на стороне МК.
Питание TCAN337 3V3 и это размах сигнала на шине (смотрите ISO11898-2)
Пробуйте выдавать запрос по шине для инициализации (по данным от продавца). Он таки должен был дать Вам описание протокола обмена.
Смотрите осциллографом (в два канала желательно) на состояние CANH и CANL в процессе обмена. При отсутствии ответа увеличивайте скорость с минимума и до 1Mbit/s или от 1Mbit/s до минимума с некоторым шагом. При отсутствии обмена при таком подходе вопрос о жизнеспособности управления по CAN уже в плоскость контакта с продавцом на предмет разборки модуля управления и проверки (пока предположительно TCA337) на предмет работоспособности.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
Сказали "Спасибо" mike-y-k
|
|
|
10.01.2022, 09:15
|
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
Re: STM32 HAL CAN не работает
Сообщение от mike-y-k
|
Тогда будет полная уверенность в правильной терминации со стороны двигателя, аналогично и на стороне МК.
|
Со стороны МК тоже надо припаять такое сопротивление?? Там я просто два провода вытащил и все.
У меня кабель вроде всего 15см. неужели так критично это сопротивление.
Сообщение от mike-y-k
|
Пробуйте выдавать запрос по шине для инициализации (по данным от продавца). Он таки должен был дать Вам описание протокола обмена.
|
Так даташит с командами представлен. Там нету команд инициализации.
Сообщение от mike-y-k
|
При отсутствии ответа увеличивайте скорость с минимума и до 1Mbit/s или от 1Mbit/s до минимума с некоторым шагом.
|
тут он тоже представил точные параметры настройки скоростей. К сожалению осцилографа нету ... (((
|
|
|
|
10.01.2022, 10:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: STM32 HAL CAN не работает
worldmasters, терминаторы нужны, но в некоторых случаях на низких скоростях и коротких линиях работает и без них.
А что, под рукой нет USB-CAN для проверки? У меня на гитхабе лежит простейший переходничок на STM32F0x2 (там и схема, и PCB; но можно и просто на макетке прошить). Протокол текстовый, устройство выдает себя за PL2303, т.е. должно даже в андроиде работать!
P.S. А осциллограф таки нужен, хоть даже проверить - не попутал ли CANL/CANH.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
10.01.2022, 16:06
|
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
Re: STM32 HAL CAN не работает
Сообщение от eddy
|
А осциллограф таки нужен, хоть даже проверить - не попутал ли CANL/CANH.
|
Ну у меня можно перевернуть разъем. Оно не так не так не работает. Попробую припаять резюк. Может и правда в нем дело.
|
|
|
|
10.01.2022, 19:25
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,169
Сказали Спасибо 3,858 раз(а) в 2,928 сообщении(ях)
|
Re: STM32 HAL CAN не работает
worldmasters, резисторы 120Ω должны соединять CANH и CANL на концах линии. Другие варианты тут не будем рассматривать.
В описании протокола обмена есть что-то типа опроса устройства, на которое оно что-то отвечает?
Без осциллографа Вам придется очень долго гадать о происходящем на шине… Может там просто тишина со стороны MK…
Модель Вашего МК и схему его подключения к CAN в студию.
eddy, ТСА337 у меня на столе с 10см линии без терминаторов не заводились от слова совсем. Выдавали FAULT. С терминаторами работали на всех скоростях.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
Сказали "Спасибо" mike-y-k
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:33.
|
|