Например TDA7294

Форум РадиоКот • Просмотр темы - STM32 и CAN период отправки данных
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт июл 25, 2025 23:45:24

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: STM32 и CAN период отправки данных
СообщениеДобавлено: Чт авг 11, 2016 11:05:17 
Встал на лапы

Зарегистрирован: Ср окт 22, 2014 04:24:01
Сообщений: 84
Рейтинг сообщения: 0
Доброго времени, решил собрать девайс себе в машину работающее по протоколу CAN. Нужные мне ID пакеты вычислил, написал простенький код по примерам из интернета по передаче нужных мне ID пакетов в шину CAN.

Теперь встал вопрос как мне реализовать период передачи для каждого ID пакета. Сейчас в моем варианте выглядит так:
Код:
       Delay(5);
            can1_335();   // период для этого ID должен быть - 10мс
            can2_4F3();   // период для этого ID должен быть -  200мс
            can1_264();  // период для этого ID должен быть -  5мс
            can1_05C();  // период для этого ID должен быть -  50мс
            


т.е. с задержкой в 5мс передаются сразу 4 ID пакета и снова задержка в 5мс. Это очень загружает шину данных и не всегда происходит корректная работа всего в целом.

Как мне реализовать эти временные задержки не прибегая к Delay()?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и CAN период отправки данных
СообщениеДобавлено: Сб авг 13, 2016 20:06:14 
Потрогал лапой паяльник

Карма: 4
Рейтинг сообщений: 26
Зарегистрирован: Вс авг 16, 2015 13:08:53
Сообщений: 333
Рейтинг сообщения: 0
Ну так используй таймер. Примеров в инете уйма. Настраиваешь пределитель на 5мс и все. Если тебе надо динамически менять время задержки, то тогда меняешь значения счетных регистров таймера.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и CAN период отправки данных
СообщениеДобавлено: Сб авг 13, 2016 20:20:27 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4565
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Frosty85 писал(а):
Это очень загружает шину данных и не всегда происходит корректная работа всего в целом.
А шине не по-барабану на чём у вас сделаны задержки ? Каким образом они перегружают её ?
И про какую корректность работы идёт речь ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и CAN период отправки данных
СообщениеДобавлено: Вс авг 14, 2016 00:45:26 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 8
Зарегистрирован: Пт июн 20, 2008 09:38:05
Сообщений: 127
Откуда: Харьков
Рейтинг сообщения: 0
Хм, Не совсем по теме: Влезая в автомобильную шину, уверены вы, что не "заткнете" её? Уверены, в надежности выбранных компонент? На сколько помню в STM32 нету automotive grade серии.
По теме:
Код:
static uint32_t s_uptimeTicks = 0;
void SysTick_Handler(void) {

// при условии Tick per second = 1000;
    s_uptimeTicks++;
    if (!(s_uptimeTicks % 5))
        sendCanPkg_1();
    if (!(s_uptimeTicks % 10))
        sendCanPkg_2();
    if (!(s_uptimeTicks % 50))
        sendCanPkg_3();
    if (!(s_uptimeTicks % 200))
        sendCanPkg_4();
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и CAN период отправки данных
СообщениеДобавлено: Вт авг 23, 2016 09:42:50 
Встал на лапы

Зарегистрирован: Ср окт 22, 2014 04:24:01
Сообщений: 84
Рейтинг сообщения: 0
Спасибо Shapa. Именно через системный таймер будет правильней реализовать. Первый вариант тоже правильный, но при этом придется пожертвовать одним из таймеров.

А по поводу перегрузки шины данных в авто, это я разобрался. Дело было в том что мой девайс выдавал к примеру ID 408 DLC 4 Data: 00 1C 51 12
с периодичностью в 1мс а этот пакет уже присутствует в шине но с другими значениями ID 408 DLC 4 Data: 0B 2F 00 10 с периодичностью 10мс вот и получалось что все блоки что принимают этот пакет отказывались работать, из-за постоянно меняющихся значений. Что и приводило к нестабильности работы всех систем авто по шине комфорта (солона)

Теперь вот стоит задача: При первом запуске считать этот пакет ID 408 DLC 4 Data 0B 2F 00 10 и изменив только последний байт на 12 отправлять его обратно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и CAN период отправки данных
СообщениеДобавлено: Вс сен 04, 2016 22:01:07 
Мудрый кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 5
Зарегистрирован: Ср янв 23, 2008 22:11:54
Сообщений: 1867
Откуда: Калининград
Рейтинг сообщения: 0
Frosty85, у Вас авто VW AG?


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

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: STM32 и CAN период отправки данных
СообщениеДобавлено: Вт сен 13, 2016 10:31:32 
Нашел транзистор. Понюхал.

Карма: -3
Рейтинг сообщений: -2
Зарегистрирован: Сб дек 08, 2012 16:40:40
Сообщений: 160
Рейтинг сообщения: 0
Frosty85 писал(а):
Дело было в том что мой девайс выдавал к примеру ID 408 DLC 4 Data: 00 1C 51 12
с периодичностью в 1мс а этот пакет уже присутствует в шине но с другими значениями ID 408 DLC 4 Data: 0B 2F 00 10 с периодичностью 10мс вот и получалось что все блоки что принимают этот пакет отказывались работать, из-за постоянно меняющихся значений. Что и приводило к нестабильности работы всех систем авто по шине комфорта (солона)

Чёт я не пойму, а как от этого спасёт выдача данных с корректным периодом? Получится что с одним и тем-же периодом будут слать пакеты два девайса и они (пакеты) будут разными. Каким образом исполнительное устройство поймёт, то твой девайс имеет более высокий приоритет, чем штатный? Или вставляешь ты рвёшь шину и у тебя на борту два CAN?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и CAN период отправки данных
СообщениеДобавлено: Чт мар 19, 2020 21:33:19 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Сб июл 05, 2014 08:27:39
Сообщений: 24
Откуда: Казань
Рейтинг сообщения: 0
Хм, Не совсем по теме: Влезая в автомобильную шину, уверены вы, что не "заткнете" её? Уверены, в надежности выбранных компонент? На сколько помню в STM32 нету automotive grade серии.
По теме:
Код:
static uint32_t s_uptimeTicks = 0;
void SysTick_Handler(void) {

// при условии Tick per second = 1000;
    s_uptimeTicks++;
    if (!(s_uptimeTicks % 5))
        sendCanPkg_1();
    if (!(s_uptimeTicks % 10))
        sendCanPkg_2();
    if (!(s_uptimeTicks % 50))
        sendCanPkg_3();
    if (!(s_uptimeTicks % 200))
        sendCanPkg_4();
}


Ни как не пойму как это работает, кто нибудь может объяснить?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и CAN период отправки данных
СообщениеДобавлено: Пт мар 20, 2020 04:50:19 
Нашел транзистор. Понюхал.

Карма: -3
Рейтинг сообщений: -2
Зарегистрирован: Сб дек 08, 2012 16:40:40
Сообщений: 160
Рейтинг сообщения: 0
А что именно не понятно?
% - это операция остаток от деления. Соответственно, если остаток от деления равен 0 (=false для if), то !(false) = true.
Т.е. каждый 5 тик таймера будет выполняться sendCanPkg_1();
Каждый 10-ый - sendCanPkg_2();
Каждый 50-ый - sendCanPkg_3();
Каждый 200-ый - sendCanPkg_4();


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и CAN период отправки данных
СообщениеДобавлено: Сб мар 21, 2020 18:47:19 
Говорящий с текстолитом

Карма: -10
Рейтинг сообщений: 173
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1504
Рейтинг сообщения: 0
А что именно не понятно?
% - это операция остаток от деления. Соответственно, если остаток от деления равен 0 (=false для if), то !(false) = true.
Т.е. каждый 5 тик таймера будет выполняться sendCanPkg_1();
Каждый 10-ый - sendCanPkg_2();
Каждый 50-ый - sendCanPkg_3();
Каждый 200-ый - sendCanPkg_4();

Ну во-первых: реализация безграмотная, поэтому при каждом переходе счётчика через 0 будет сбой периодов;
во-вторых: бессмысленно ресурсоёмкая, так как требует множества операций деления, которые очень тормозные, к тому же в какие-то моменты времени будут выполняться сразу все. И это в ISR.
Такое называют говнокодом.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32 и CAN период отправки данных
СообщениеДобавлено: Сб мар 21, 2020 19:03:01 
Нашел транзистор. Понюхал.

Карма: -3
Рейтинг сообщений: -2
Зарегистрирован: Сб дек 08, 2012 16:40:40
Сообщений: 160
Рейтинг сообщения: 0
jcxz, так выскажи это автору кода. Я лишь ответил на вопрос "как это работает".


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y