Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
0 / 0 / 0
Регистрация: 22.03.2026
Сообщений: 7

Балансирующий робот на STM32 в среде keil

23.03.2026, 16:11. Показов 861. Ответов 27

Студворк — интернет-сервис помощи студентам
Добрый день уважаемые форумчане.
Немного предыстории вопроса...
Дети решили собрать своего балансирующего робота на шаговых моторчиках. Они имеют небольшой опыт на ардуино. Ну по крайней мере светодиодами научились мигать. Но интерес вроде не пропал.
Я начал немного изучать вопрос и оказалось, что для реализации их задумки потребуются довольно серьезные вычисления.
Управление моторчиками (генерация степ/дир), опрос датчиков и пр. В общем решили, что ардуинки будет не хватать.
Через некоторое время пришли к выводу, что лучше будет если в качестве контроллера использовать что-то побыстрее и поумнее.
Выбор пал на отладочную платку на базе stm32f103c8t6. А в качестве среды разработки keil.
Первое знакомство с этим контроллером у меня было очень давно. Около 10 лет назад. Многое уже забыл. И основная работа ни как не связана с конструированием и электроникой.
Но пока есть желание у детей попробую заинтересовать их этой сферой.
Платку и st-link нашел,

Что известно на текущий момент:
Необходимо 2 счетчика для генерации сигналов степ/дир. на 2 мотора. Возможно в природе существуют библиотеки управления шаговыми моторами. Но мне такое не известно (пока)
Датчик гироскопа имеет интерфейс i2c
Еще есть 4 аналоговых датчика приближения. Пока точных характеристик не подобрали.
Подключение блютус шилда для управления с телефона.
Так как сейчас пока сложно оценить сколько потребуется различных программных модулей решили еще и free rtos изучить и поставить.

И вот спустя некоторое время нам удалось подключиться к плате и даже загрузили на нее блинк светодиода
Сегодня получилось поднять freertos и запустить два потока. В одном светодиод. В другом вычисления тестовые.
Некоторые модули удалось найти в своих старых архивах.

Вопрос: Существуют ли какие-то библиотеки для работы с i2c (cmsis) для работы с данным контроллером?
st.com не доступен. Похоже банят адреса из РФ.

Вопрос 2: После загрузки прошивки на контроллер, он начинает работать только после нажатия кнопки ресет на плате. Это как-то лечится?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.03.2026, 16:11
Ответы с готовыми решениями:

Сравнить программные продукты Keil uVision 5.11.2.0 и Keil ARM 5.29.0.0
прив! программные среды разработки Keil uVision 5.11.2.0 и Keil ARM 5.29.0.0 это просто разные ...

Вопрос по среде keil
Можно ли как-то подключить в keil стандартные виндовые библиотеки, математические, к примеру? Не...

Программа ФВЧ в среде Keil
Доброго времени суток. Пытаюсь запрограммировать перестраиваемый фильтр ФВЧ в Keil. Программа...

27
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3430 / 2749 / 575
Регистрация: 04.09.2018
Сообщений: 8,633
Записей в блоге: 3
23.03.2026, 16:27
1. I2C (TWI) у stm32 встроенный (аппаратный). В интернете смотришь любой пример работы с и2с через cmsis и сразу используешь.
2. В настройках кейла на вкладке прошивки должна быть включена опция "Reset and Run".
1
Windows must die
676 / 860 / 103
Регистрация: 23.11.2021
Сообщений: 5,091
Записей в блоге: 18
23.03.2026, 16:33
Цитата Сообщение от Smith2007 Посмотреть сообщение
stm32f103c8t6
Это - худший МК из серии STM32!
Кстати, вам ведь флоаты наверняка в вычислениях понадобятся, поэтому Cortex-M3 вам точно не нужен: он флоаты не умеет. Берите Cortex-M4, рекомендую STM32G431. Для начала надо выбрать: у какого достаточно таймеров, т.к. на каждый ШД нужен один таймер для генерирования сигнала CLK.

Насчет "кайла" я категорически против: нельзя детей приручать ко всякой гадости! Поставьте им хоть vscode, абы это был обычный IDE, без выкрутасов. Идеальный вариант - работать в линуксе, т.к. маздай все равно в России скоро запретят, да и зачем детей приучать к фашистской идеологии?

Цитата Сообщение от Smith2007 Посмотреть сообщение
Возможно в природе существуют библиотеки управления шаговыми моторами
Это очень просто, и на гитхабе такого полно. Привожу свое: управление тремя независимыми ШД с ОС по инкрементальным энкодерам и управление восемью независимыми ШД без ОС (не хватило таймеров).

Цитата Сообщение от Smith2007 Посмотреть сообщение
интерфейс i2c
С этим никаких проблем нет даже у F103.

Цитата Сообщение от Smith2007 Посмотреть сообщение
блютус шилда для управления с телефона.
USART'ов тоже предостаточно.

Цитата Сообщение от Smith2007 Посмотреть сообщение
freertos
МЕГАМИНУС в "карму". Не надо это дерьмо использовать! Особенно там, где оно вообще не нужно!

Цитата Сообщение от Smith2007 Посмотреть сообщение
Существуют ли какие-то библиотеки для работы с i2c (cmsis) для работы с данным контроллером?
Они не нужны. Там все просто, за неделю можно самому написать. Не надо идти по пути "абдурины".
1
0 / 0 / 0
Регистрация: 22.03.2026
Сообщений: 7
23.03.2026, 16:36  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
2. В настройках кейла на вкладке прошивки должна быть включена опция "Reset and Run".
Эта опция включена в настройках.
Миниатюры
Балансирующий робот на STM32 в среде keil  
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3430 / 2749 / 575
Регистрация: 04.09.2018
Сообщений: 8,633
Записей в блоге: 3
23.03.2026, 17:52
Smith2007, отладчик какой? ST-Link?

Добавлено через 1 минуту
И да, Eddy_Em верно говорит - для шагового управления выбран не тот камень. Управлять конечно можно, но не будет плавности..
0
0 / 0 / 0
Регистрация: 22.03.2026
Сообщений: 7
23.03.2026, 18:25  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
отладчик какой? ST-Link?
ST-Link - v2

F103C8 сейчас есть уже в наличии.
Поищу STM32G431. Но пока будет подопытным экземпляром. Нужна в виде отладочной платы. Чертить эл.схемы и разводить платы - нет такой задачи, да и времени столько нет.
Все же это должны делать дети, а я только "направлять" (хотя пока сам до конца не понимаю куда направлять

зы. Usart тоже нашел.
подключили к компу. Уже можно вывести какое-то сообщение

ззы. есть вариант использования драйверов с шиной i2c. Тогда не нужно будет генерировать шаги и как следствие снизится требование к железке.
Изучаю вопрос.
0
Windows must die
676 / 860 / 103
Регистрация: 23.11.2021
Сообщений: 5,091
Записей в блоге: 18
23.03.2026, 18:38
С генерированием шагов проблем не будет: там флоаты не нужны. У меня даже STM32F072 справлялся на ура (ссылку на гитхаб я выше дал).
Флоаты для некоторых датчиков могут понадобиться. А могут и не понадобиться.

Но F103 — такая забаженная штука, что замучаетесь errata читать! И для работы с I2C нужно очень строго следовать документации. И тоже в errata посматривать.

Дети хоть английский знают? Иначе самому все делать придется…
0
0 / 0 / 0
Регистрация: 22.03.2026
Сообщений: 7
23.03.2026, 18:45  [ТС]
Цитата Сообщение от Eddy_Em Посмотреть сообщение
С генерированием шагов проблем не будет: там флоаты не нужны.
В одной формуле есть использование float. Но может получится от него избавится. Например ввести множитель 1000 и в целых числах все сделать.
От датчиков вообще код Int будет (с АЦП)

С математикой пока не сильно разбирался. Но там что-то подобное PID системы. И подбором коэф можно обеспечить устойчивость робота.

Цитата Сообщение от Eddy_Em Посмотреть сообщение
Но F103 — такая забаженная штука, что замучаетесь errata читать!
errata - это ошибки шины i2c?

Есть ли какие группы в максе на тему stm32? я не смог найти.
0
Windows must die
676 / 860 / 103
Регистрация: 23.11.2021
Сообщений: 5,091
Записей в блоге: 18
23.03.2026, 18:59
Цитата Сообщение от Smith2007 Посмотреть сообщение
В одной формуле есть использование float.
А не нужно ее использвать, полно целочисленных алгоритмов. Шаговику флоаты не нужны.
Цитата Сообщение от Smith2007 Посмотреть сообщение
ввести множитель 1000 и в целых числах все сделать
Конечно! Или fixed point.
Цитата Сообщение от Smith2007 Посмотреть сообщение
errata - это ошибки шины i2c?
Я не пойму, как вы преподаете микроконтроллеры, если с документацией не знакомы? Errata - это список выявленных багов на той или иной линейке МК.
До того, как начинать с МК, нужно внимательно прочитать datasheet, manual и errata. Еще неплохо почитать различные appnout'ы.
Я ж и говорю: пока английский не будет на уровне "уверенно читаю техническую литературу", в микроконтроллеры лучше и не соваться, иначе будет только хуже: уровень абдурины или калокуба - и конец! Очень редко люди могут вылезти из этого болота. Поэтому если уж и учить, то сразу учить правильно: никаких абдурин, калокубов, маздаев и прочей дряни, превращающей мозг в кашу.

Добавлено через 1 минуту
Цитата Сообщение от Smith2007 Посмотреть сообщение
Есть ли какие группы в максе на тему stm32?
Это же самый убогий мессенджер, еще и russian-only.
Вы на реддите больше помощи найдете, чем там! А еще неплохо на stackoverflow заглянуть, да и по гитхабу пошукать.
0
0 / 0 / 0
Регистрация: 22.03.2026
Сообщений: 7
23.03.2026, 19:11  [ТС]
Цитата Сообщение от Eddy_Em Посмотреть сообщение
Я не пойму, как вы преподаете микроконтроллеры, если с документацией не знакомы?
я не преподаю электронику или МК. Я работаю в сфере металлообработки. Фрезеры, токарники, лазеры и пр ЧПУ машины.
Пытаюсь помочь детям (своим) робота такого сделать. В свободное от работы время. И может их это увлечет.

Когда-то давно пытался использовать CubeMX, чисто ради интереса, но ни чего путного не вышло.
Слишком непонятный комбайн.
0
Windows must die
676 / 860 / 103
Регистрация: 23.11.2021
Сообщений: 5,091
Записей в блоге: 18
23.03.2026, 19:21
Цитата Сообщение от Smith2007 Посмотреть сообщение
Пытаюсь помочь детям (своим) робота такого сделать
А как вы им физику объясняете? Или дети уже закончили школу?
Скажем, те же кватернионы - штука и не для каждого взрослого понятная… А без кватернионов невозможно ориентироваться в пространстве.
Да много чего нужно знать, прежде чем за роботов браться. Но, возможно, им будет интересно. Пусть сначала английский подучат, да и в линуксе хотя бы bash и основы разработки на С освоят.
Цитата Сообщение от Smith2007 Посмотреть сообщение
CubeMX
Адская дрянь. Эдакое мозгоразжижающее средство. Что-то сродни ардуине, но для более продвинутых МК. В общем, тупиковый путь.

Качайте с github CMSIS, готовьте Makefile, стартап и ld-скрипт, читайте документацию - и можно будет начинать светодиодиком мигать.
Причем, некоторые вещи удобно делать в отладчике: чтобы своими руками "пощупать", как те или иные изменения в регистрах МК сказываются на периферии.
1
1477 / 490 / 73
Регистрация: 22.09.2023
Сообщений: 1,520
23.03.2026, 20:02
А шаговый двигатель уже выбран? Может стоит посмотреть на BLDC? Оно и плавно будет и как-то более правильно. Можно воспользоваться библиотекой SimpleFOC
0
62 / 187 / 31
Регистрация: 14.02.2013
Сообщений: 1,701
24.03.2026, 08:54
Цитата Сообщение от Eddy_Em Посмотреть сообщение
т.к. маздай все равно в России скоро запретят
повеселил однако.
0
339 / 98 / 6
Регистрация: 19.07.2024
Сообщений: 543
24.03.2026, 17:16
Цитата Сообщение от wizard41 Посмотреть сообщение
И да, Eddy_Em верно говорит - для шагового управления выбран не тот камень. Управлять конечно можно, но не будет плавности..
Бред. На STM32F103 у меня построен 3D-принтер. В нём имеется куча шаговых двигателей (по разным осям и т.п.). И никаких проблем с "плавностью" у него не наблюдается. Да и не может быть в принципе. Быстродействия F103 за глаза хватит для плавного управления пачкой шаговиков. Что я и вижу на примере своего принтера.

То, что решили сразу работать под РТОС - правильно! И не слушайте персонажей, не сумевших освоить РТОС, и потому хаящих её.

Добавлено через 2 минуты
Цитата Сообщение от Smith2007 Посмотреть сообщение
F103C8 сейчас есть уже в наличии.
Поищу STM32G431.
Для начинающего абсолютно без разницы - F103 или самый навороченный из STM32F4xx. "Навороченные" для начинающих даже хуже, так как у них (как правило) и периферия сложнее. Разбираться в ней будет сложнее.

Добавлено через 4 минуты
Цитата Сообщение от Smith2007 Посмотреть сообщение
есть вариант использования драйверов с шиной i2c.
Это неверный путь. Изучайте блок I2C в контроллере. Нет там ничего сложного. Хотя говорят, что I2C у старых F103 плохой. Тут не могу ничего сказать - сам я плотно работал только с новыми STM32F103VE. Там никаких проблем в работе I2C нет.

Добавлено через 2 минуты
Цитата Сообщение от Smith2007 Посмотреть сообщение
float. Но может получится от него избавится. Например ввести множитель 1000 и в целых числах все сделать.
Правильный путь!

Добавлено через 2 минуты
Цитата Сообщение от Smith2007 Посмотреть сообщение
errata - это ошибки шины i2c?
Есть ли какие группы в максе на тему stm32?
errata - это документ из состава документации на МК. Необходимый минимум для знакомства с любым МК: даташит + мануал + еррата. Всё это есть на сайте STM. Вводите там название своего МК; переходите в раздел "документация"; скачиваете эти 3 документа и изучаете. С этого должна начинаться работа с любым МК.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3430 / 2749 / 575
Регистрация: 04.09.2018
Сообщений: 8,633
Записей в блоге: 3
24.03.2026, 17:24
Цитата Сообщение от jcxz Посмотреть сообщение
На STM32F103 у меня построен 3D-принтер. В нём имеется куча шаговых двигателей (по разным осям и т.п.). И никаких проблем с "плавностью"
Не знаю, не знаю..
Принтер немного неправильно сравнивать с тем, что хочет автор. В принтере все движения обычно рассчитаны заранее. Автору же необходимо фактически в реальном времени считывать и обрабатывать сигналы с датчиков, сразу же управляя несколькими ШД...
0
339 / 98 / 6
Регистрация: 19.07.2024
Сообщений: 543
24.03.2026, 17:34
Цитата Сообщение от Dushevny Посмотреть сообщение
А шаговый двигатель уже выбран? Может стоит посмотреть на BLDC?
Для детей (начинающих) это наверное будет слишком сложно.

Цитата Сообщение от wizard41 Посмотреть сообщение
Принтер немного неправильно сравнивать с тем, что хочет автор. В принтере все движения обычно рассчитаны заранее. Автору же необходимо фактически в реальном времени считывать и обрабатывать сигналы с датчиков, сразу же управляя несколькими ШД...
Вы видимо говорите о необходимом быстродействии? Причём тут тогда плавность?
Хватит или нет быстродействия - зависит от алгоритма и от умений автора. STM32F103 не такой уж и тормозной МК - 72МГц если подходить с умом - хватит для многого. И для нескольких ПИД-регуляторов - хватит вполне. Даже если они будут выполняться на частоте в несколько десятков кГц. А несколько десятков кГц - куда ещё плавнее то? Для балансирвоки робота (что бы под этим не понималось) - думаю и 1...10 кГц должно хватить.

PS: 72МГц/10кГц = 7200 тактов. Если не использовать эмулированную плавучку, а только fixed point, то 7200 тактов на расчёт, это = дофига!

PPS: И да, кстати - здесь тоже "все движения нужно рассчитывать заранее". Как и в 3D-принтере. Никакой разницы.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3430 / 2749 / 575
Регистрация: 04.09.2018
Сообщений: 8,633
Записей в блоге: 3
24.03.2026, 17:44
jcxz, ну я имел в виду примерно следующее: принтер может постоять "подумать" секунду-две, ничего страшного не произойдет. Робот же за это время может тупо упасть набок.
Плавность здесь заключается в том, чтобы отслеживать и реагировать на бОльшее кол-во точек в интервалах. Если МК "слабоват", то до воздействия на ШД может пройти значительное время и оно будет с запозданием. Промежуточные точки регулирования "потеряются" и система начнет раскачиваться..

Я конечно не утверждаю на 100%, что автору точно не подходит его МК к его задаче. Тем более, до конца не ясна структура поделки: сколько ШД/датчиков и их взаимодействие.
Но очень может быть, что автор упрется в "железные" ограничения МК и будет долго вокруг этого ходить. Я бы все-таки для таких вещей взял бы камень чутка помощнее..

Добавлено через 2 минуты
Цитата Сообщение от jcxz Посмотреть сообщение
здесь тоже "все движения нужно рассчитывать заранее". Как и в 3D-принтере.
Здесь вы этого не сможете сделать. Расчет и конкретное регулирование будет исходить из того, куда сейчас "падает" робот.. И прочие внешние возмущения. Этого нельзя заранее предсказать.
0
339 / 98 / 6
Регистрация: 19.07.2024
Сообщений: 543
24.03.2026, 17:53
Цитата Сообщение от wizard41 Посмотреть сообщение
jcxz, ну я имел в виду примерно следующее: принтер может постоять "подумать" секунду-две, ничего страшного не произойдет.
Вы видимо только слышали о 3D-принтерах. И никогда не имели дела.
Не может он такого. Иначе получится сопля на детали. Или ещё какой брак. Печать должна идти непрерывно! Без каких-либо остановок. Остановка это - баг. Так как пластик из экструдера течёт непрерывно. С установившейся скоростью вытекания, определяемой текущей температурой экструдера.
Цитата Сообщение от wizard41 Посмотреть сообщение
Этого нельзя заранее предсказать.
При регулировании с частотами хотя бы в неск. кГц - все вычисления и реакции программы уже будут априори - "заранее". Так как механические движения не происходят с такими высокими скоростями. Пока робот хотя бы начнёт крениться куда-то, пройдут тысячи вызовов управляющего алгоритма. Который всё успеет скорректировать. Заранее.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3430 / 2749 / 575
Регистрация: 04.09.2018
Сообщений: 8,633
Записей в блоге: 3
24.03.2026, 18:03
Цитата Сообщение от jcxz Посмотреть сообщение
Который всё успеет скорректировать. Заранее.
Ох, не скажите! Смотря что еще за система и из чего состоит..
Цитата Сообщение от jcxz Посмотреть сообщение
И никогда не имели дела.
Имел дело. Еще раз: движения механизмов при обработке заготовки весьма планомерные и известные заранее (задолго), т.к. заранее посчитаны и зашиты координаты, на основании чертежа.
У автора вопроса - конкретное регулирование объекта с неизвестными векторами движения, которые определяются буквально на ходу. Реакция на эти движения должна быть незамедлительная..
0
Windows must die
676 / 860 / 103
Регистрация: 23.11.2021
Сообщений: 5,091
Записей в блоге: 18
24.03.2026, 18:16
Чего вы спорите, пока вообще непонятно, что там в итоге в этом роботе будет! А то, вполне возможно, что даже Cortex-M0+ за глаза хватит (если избавиться от деления).
Главное - всякие "калокубы" и "ртоси" не тащить, иначе и H7 не хватит ☺
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.03.2026, 18:16
Помогаю со студенческими работами здесь

В среде Keil 5 при повторном запуске в режиме эмуляции программа виснет
Доброго времени суток. MK STM32F103C8T6. Запускаю в режиме эмуляции - работает. При повторном...

STM32 + KEIL. Найти смещение функции в прошивке
Привет, коллеги! Столкнулся с проблемой - надо найти адрес и размер функции, а также все что к...

STM32, Keil, передача массива в функцию
Использую uVision 4.60.00. Есть функция, которая выполняет расчёт контрольной суммы (CRC). Для её...

C++ в Keil + STM32
Доброго времени суток. Пытаюсь написать небольшой проектик на С++ под STM32 в Keil, но что то не...

CMSIS STM32 проект в Keil - это просто
Пишу небольшую обзорную статейку про CMSIS, это её часть ... Скачайте у ST последний HAL и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru