Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2551 / 2065 / 971
Регистрация: 09.10.2013
Сообщений: 4,904
Записей в блоге: 4

Проект: Контроллер группы сервоприводов MG996R. Выбор МК из доступных. Ограничения этих МК

22.06.2026, 05:28. Показов 3557. Ответов 70
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

Для DIY-проекта а-ля "робот-паук" есть необходимость управлять группой сервоприводов(12 штук).

Предполагается использование MG996R

Угол положения у сервопривода задается длительностью импульса(0.5-2.5 мсек, 50 гц).

Сейчас используется плата на PCA9685, но с ней не получается достичь плавного движения про траектории - слишком низкое разрешение на нужных длительностях импульсов.

Что я бы хотел сделать: получить специализированный контроллер для управления подобными сервоприводами.

Нужна помощь в поиске вариантов реализации на имеющихся у меня МК.
  • stm32f103 / BluePill
  • gd32f103 / BluePill
  • stm32f411 / BlackPill
  • RP2040 / RP Pico
  • RP2350 / RP Pico 2
  • ESP32 / ESP WROOM32

Добавлено через 19 минут
ШИМ контроллеры в чистом виде задействовать вряд ли получится:
- нужно много каналов с раздельным управлением длительностью
- длительность импульса намного меньше периода генерации импульсов.

Таймеров тоже маловато на 12 каналов

Из идей/мыслей:
- Генерация импульса в одном "канале" не обязана быть синхронизирована с другими "каналами"
- период генерации должен быть 20 мсек при макс длительности импульса в 2.5 мсек

То есть получается, что один таймер, работающий с частотой 400 герц, в теории может обслуживать восемь каналов, но понадобится дополнительный OneShot-таймер с частотой около мегагерца.

В RP есть интересная вещь - PIO, но количество их тоже ограничено и также нужно делить время между каналами.

ESP пока не смотрел особо...

Добавлено через 1 час 2 минуты
Цитата Сообщение от Max Dark Посмотреть сообщение
То есть получается, что один таймер, работающий с частотой 400 герц, в теории
Но это только в теории...

На практике достичь мексимальной длительности импульса в 2.5 мсек не выйдет - будет чуть меньше, так как обработчик запуска ведомого таймера будет отнимать время.

Несколько ведомых таймеров по RoundRobbin? - как вариант.

"Мысли в слух"....
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.06.2026, 05:28
Ответы с готовыми решениями:

Выбор МК для контроля сервоприводов
Добрый день новичок, хотелось бы услышать совет, какой мк на 32 бита приобрести (хочется сразу...

Безвентиляторные частотные преобразователи для сервоприводов
Подскажите, видел ли кто - нибуть серийно выпускаемые безвентиляторные частотные преобразователи...

Управление сервоприводом
есть сервомашинка переделанная под постоянное вращение(убран реостат и ограничитель хода).....

70
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2551 / 2065 / 971
Регистрация: 09.10.2013
Сообщений: 4,904
Записей в блоге: 4
24.06.2026, 18:16  [ТС]
Студворк — интернет-сервис помощи студентам
По таймингам выходить как то так:


Только нужно "размножить" - всего нужно 12 "каналов"
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,082
24.06.2026, 18:40
Цитата Сообщение от Eddy_Em Посмотреть сообщение
Но вот прежде, чем разрабатывать алгоритм "хождения", ТСу стоит исследовать динамику сервиков: ведь обратной связи не планируется, поэтому нужно точно знать минимальную угловую скорость под максимальной нагрузкой
Вот это лучше делать, когда железо будет готово. А то теоретизировать можно до бесконечности, а толку не будет.
Цитата Сообщение от Max Dark Посмотреть сообщение
На нужный диапазон длительности импульсов получается слишком грубая регулировка:
счетчик 12 бит, из них на задание длины импульса остается только 1/8.
Полный диапазон 2 мс от периода 20 мс составляет 0.1.
12 бит это 4096 отсчетов. 0.1 от 4096 отсчетов это 409.6 отсчетов. 410 положений сервы, дискретность 0,44 градуса. Какое у нее там аппаратное ограничение на разрядность не знаю, но интуиция подсказывает, что у дешевых "игрушечных" серв люфты съедят больше.
Цитата Сообщение от Max Dark Посмотреть сообщение
По таймингам выходить как то так:
Зачем? Почему вы не хотите переключать таймеры синхронно или около-синхронно? Не вижу, как разбиение интервала на 4 участка хоть на что-то положительно повлияет.
1
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2551 / 2065 / 971
Регистрация: 09.10.2013
Сообщений: 4,904
Записей в блоге: 4
24.06.2026, 18:54  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Полный диапазон 2 мс от периода 20 мс составляет 0.1.
Значит я ошибся в расчетах и причина "дерганности" движений в чем то другом.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Зачем?
Попытка обойти ограничения в количестве таймеров.
Но это навенрно больше от незнания особенностей конкретных МК.
0
Windows must die
613 / 885 / 105
Регистрация: 23.11.2021
Сообщений: 5,196
Записей в блоге: 19
24.06.2026, 18:58
Лучший ответ Сообщение было отмечено Max Dark как решение

Решение

Цитата Сообщение от Max Dark Посмотреть сообщение
причина "дерганности" движений в чем то другом.
Возможно, ты выдаешь слишком большие смещения. Скажем, если нужно двигаться со скоростью 10 градусов в секунду, то за каждый такт (20мс) нужно поворачивать ротор на 0.2°. Но не факт, что серва будет за этим успевать...

Добавлено через 1 минуту
Цитата Сообщение от Max Dark Посмотреть сообщение
обойти ограничения в количестве таймеров.
Там нужно или 3 (если охота заморачиваться с тем, что ноги будут "делить" между собой таймеры), или 4 таймера всего-то!
1
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2551 / 2065 / 971
Регистрация: 09.10.2013
Сообщений: 4,904
Записей в блоге: 4
24.06.2026, 19:14  [ТС]
Цитата Сообщение от Eddy_Em Посмотреть сообщение
или 4 таймера всего-то!
То есть на 12 серв - 12 таймеров.

Делить все равно нужно получается.
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,082
24.06.2026, 19:22
Цитата Сообщение от Max Dark Посмотреть сообщение
Значит я ошибся в расчетах и причина "дерганности" движений в чем то другом.
Вот это как раз проверяется легко. Берете одну серву и крутите ее между максимумом и минимумом сначала скачком, потом плавно.
Как вариант, мог случиться рассинхрон, если 50 Гц сервы и 50 Гц таймера недостаточно совпадали. Я не знаю какой там допуск. Или, скажем, в из-за бага в коде туда писалось что-то не то или не вовремя. Или, не менее дурацкое предположение, что для угла использовался 8-битный счетчик, который регулярно сбрасывался. Ладно, что-то меня понесло...
---
В любом случае, вариант, когда интерполяцией значений занимается отдельный контроллер, все еще имеет смысл.
Цитата Сообщение от Eddy_Em Посмотреть сообщение
Возможно, ты выдаешь слишком большие смещения.
Тогда бы серва просто прокрутилась до нужного угла и встала. А вот что возможно - если "плавное" разбиение слишком медленное. Задается очередной угол, серва быстро на него встает и замирает. Потом задается следующий угол, серва снова туда прыгает. И вот как с этим бороться, я не знаю.
Хотя ради теста можно одну серву расковырять и вывести сигнал с потенциометра на АЦП. Чтобы не на глазок оценивать, как оно там дергается, а отталкиваться от объективных данных.
Цитата Сообщение от Eddy_Em Посмотреть сообщение
Там нужно или 3 (если охота заморачиваться с тем, что ноги будут "делить" между собой таймеры), или 4 таймера всего-то!
Я так и не понял, ТС вот этим извращением на одноплатнике занимался (там и правда каналов ШИМ может не хватить) или это только планы на МК.
Если на МК, то просто берете камень с достаточным количеством каналов ШИМ - да хоть ту же stm-ку. Или то, что я уже описывал с реализацией ШИМ через DMA. Оно посложнее, зато хватит одного таймера.
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2551 / 2065 / 971
Регистрация: 09.10.2013
Сообщений: 4,904
Записей в блоге: 4
24.06.2026, 19:23  [ТС]
Что бы хоть как то ограничить догадки по характерситикам МК возьму плату "BluePill" на STM32F103C8

У самой пплаты часть ног МК уже занята и не все можно использовать.
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,082
24.06.2026, 19:24
Лучший ответ Сообщение было отмечено Max Dark как решение

Решение

Цитата Сообщение от Max Dark Посмотреть сообщение
То есть на 12 серв - 12 таймеров.
Не 12 таймеров, а 12 каналов ШИМ. В той же stm32 у таймеров по 4 канала. У вас же период фиксированный, нет необходимости каждый канал настраивать независимо. Вам достаточно настроить все 3 таймера на период 20 мс, а дальше уже дергать только регистры сравнения.
1
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2551 / 2065 / 971
Регистрация: 09.10.2013
Сообщений: 4,904
Записей в блоге: 4
24.06.2026, 19:39  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Я так и не понял
На SBC программа, которая по I2C отправляет в PCA9685 задание длительности импульсов.

Перенос части на МК пока только в планах.

Это больше проект "jsut for fun" - поиграться со связкой SBC <-> МК, посмотреть как одну задачу можно сделать на разных МК.

Добавлено через 8 минут
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Вам достаточно настроить все 3 таймера на период 20 мс, а дальше уже дергать только регистры сравнения.
Спасибо.
Попробую так сделать.
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,082
24.06.2026, 19:52
Цитата Сообщение от Max Dark Посмотреть сообщение
Спасибо.
Попробую так сделать.
Ждем, когда отпишетесь об успехах!
0
Windows must die
613 / 885 / 105
Регистрация: 23.11.2021
Сообщений: 5,196
Записей в блоге: 19
24.06.2026, 20:18
Цитата Сообщение от Max Dark Посмотреть сообщение
на 12 серв - 12 таймеров.
Нет! Один таймер имеет до четырех (а в некоторых случаях даже больше) ШИМ-выходов!
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Тогда бы серва просто прокрутилась до нужного угла и встала.
Это если в процессе движения не дать другое смещение в обратную сторону... А еще, если требовать от нее невозможного, тоже будет дергаться. Я-то поэкспериментировал, было дело.
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
И вот как с этим бороться, я не знаю.
Давать достаточно малые смещения, сравнимые с люфтом - это если надо двигаться медленно и равномерно.
1
343 / 135 / 10
Регистрация: 19.07.2024
Сообщений: 775
25.06.2026, 15:14
Цитата Сообщение от Max Dark Посмотреть сообщение
По сути нужно что то похожее на генератор импульсов с частотой 50 Hz и длительностью 0.5-2.5 милисекунд.
С этого надо было начинать. Для таких длительностей никакие таймеры не нужны: можно всё программно в обработчике прерываний сгенерить. И МК подойдёт любой, лишь бы ног хватило.

Ещё нужно указывать: С какой дискретностью эти 0.5 мсек нужно формировать? Если не нужно с дискретностью до такта CPU, то всё можно сделать в ISR. И почти на любой из ваших плат.
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2551 / 2065 / 971
Регистрация: 09.10.2013
Сообщений: 4,904
Записей в блоге: 4
25.06.2026, 19:50  [ТС]
Цитата Сообщение от jcxz Посмотреть сообщение
С какой дискретностью эти 0.5 мсек нужно формировать?
Судя по документации сервоприводы различают длительность с шагом 5 наносек.

Но скорее всего такая точность не нужна.

1 мсек примерно равно 90º угла поворота, то есть ~= 0.011 мсек.

Центр диапазона - 1.5 мсек.

±90º == ±1 мсек
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2551 / 2065 / 971
Регистрация: 09.10.2013
Сообщений: 4,904
Записей в блоге: 4
26.06.2026, 07:40  [ТС]
С "BluePill" выходит как то так:



CubeMX


Осталось "начать и закончить":
- разобаться с рассчетом периода таймеров и длительности импульсов
- придумать как данные запихнуть

"Мысли в слух"
USB - сложновато, но более универсально выйдет(тем более пины под него заняты уже).
SPI - не пробовал на стороне Линукса заводить.
I2C - говорили про какие то проблемы в самом чипе есть...
UART - Если задействовать ModBus RTU то может интересно получиться, но на имеючемся у меня SBC он уже занят под другое - нужно смотреть есть ли еще.
Вложения
Тип файла: 7z stm32_pwm_x12.7z (2.0 Кб, 3 просмотров)
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,082
26.06.2026, 10:55
Цитата Сообщение от Max Dark Посмотреть сообщение
Предполагается использование MG996R
Угол положения у сервопривода задается длительностью импульса(0.5-2.5 мсек, 50 гц).
...
- период генерации должен быть 20 мсек при макс длительности импульса в 2.5 мсек
Цитата Сообщение от jcxz Посмотреть сообщение
С этого надо было начинать.
Цитата из первого поста темы, если что. Куда там еще более "с этого начинать"?!
Цитата Сообщение от jcxz Посмотреть сообщение
С какой дискретностью эти 0.5 мсек нужно формировать?
Открываем первую попавшуюся документацию на сервомоторчики. Там пишут, что импульсу 0.5 мс соответствует -90, а 2.5 - +90. Регулятор линейный. Соотношение времени и угла хоть теперь посчитать сможете?
Добавляем сюда, что сервы, скорее всего, "игрушечные", не рассчитанные под серьезное применение. То есть неизбежно будут люфтить. Собственно, рассчитывать больше чем на градус точности я бы не стал.
Цитата Сообщение от jcxz Посмотреть сообщение
Если не нужно с дискретностью до такта CPU, то всё можно сделать в ISR.
Вот в ISR как раз худшее решение. Уж больно много накладных расходов на вход - выход в прерывание. И точность потеряем, и производительность. Которую можно потратить с большей пользой. Например, на интерполяцию значений.
Когда такое делают на Ардуине - понятно, там других вариантов нет. Но в случае ТС любое использование аппаратных средств будет лучше. Хоть таймеров, хоть DMA. Правда, использование DMA в таком режиме не слишком очевидно, если у ТС недостаточно опыта, это займет время. Да и смысла сейчас нет, раз нашлись нормальные таймеры.
Цитата Сообщение от Max Dark Посмотреть сообщение
- разобаться с рассчетом периода таймеров и длительности импульсов
Раз уж "мысли вслух", давайте сначала выслушаем ваши соображения.
Цитата Сообщение от Max Dark Посмотреть сообщение
- придумать как данные запихнуть
А тут-то в чем вопрос? Пишем в регистры сравнения, да и все. При такой низкой частоте можно даже не заморачиваться с синхронизацией. Вот что важно - это убедиться, что используются теневые регистры. То есть что записанные вами данные применяются не сразу при записи, а в начале периода.
Цитата Сообщение от Max Dark Посмотреть сообщение
USB - сложновато, но более универсально выйдет(тем более пины под него заняты уже).
Это да. USB довольно сложный интерфейс. Плюс вам, возможно, пригодятся USB на одноплатнике под что-нибудь другое.
Цитата Сообщение от Max Dark Посмотреть сообщение
I2C - говорили про какие то проблемы в самом чипе есть...
Да, I2C тоже довольно сложный. И в f103 с багами. Обойти их, конечно, можно, но, как по мне, оно того не стоит.
Цитата Сообщение от Max Dark Посмотреть сообщение
UART - Если задействовать ModBus RTU
При таких скоростях UART можно задействовать просто как текстовый командный интерфейс без всей этой возни со специальными протоколами.
Хотя я тут посмотрел распиновку одноплатника. А там всего полтора UART выведено. UART2 (отладочный?) и UART4. Зато вот I2C куча...
---
В общем, лично я бы воспользовался USB. Если чего-то будет не хватать, на том же контроллере можно будет реализовать переходник. Но я-то с USB довольно много разбирался. Впрочем, вдруг вы готовы тоже потратить время на изучение USB, мало ли...
1
343 / 135 / 10
Регистрация: 19.07.2024
Сообщений: 775
26.06.2026, 11:30
Цитата Сообщение от Max Dark Посмотреть сообщение
Судя по документации сервоприводы различают длительность с шагом 5 наносек.
Но скорее всего такая точность не нужна.
Здесь уже нужно вам как разработчику решать - нужна или нет.

Если "нужна": Тогда берём МК, у которого таймеры работают на частоте >=200МГц и выделяем по таймеру на каждый ШИМ. Никакие колхозы на прерываниях или даже DMA+ногодрыге требуемой точности не обеспечат даже близко.
Но 200МГц тут даже XMC4xxx не хватит, надо искать что-то серьёзнее.

Если "не нужна": Тогда всё решается элементарно на любом МК (из вашего списка я бы разве что ESP в этом случае выкинул, остальные должны справиться легко). Скажем - требуемая дискретность == 100мкс. Тогда запускаем периодическое прерывание с частотой 10кГц и в нём программно рулим всеми ШИМами. Да - джиттер каждого ШИМ будет приличный (может даже сотни тактов), но он будет заведомо кратно ниже дискретности.
1
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,082
26.06.2026, 13:45
Цитата Сообщение от Max Dark Посмотреть сообщение
Судя по документации сервоприводы различают длительность с шагом 5 наносек.
При максимальном диапазоне 2 мс шаг 5 нс составляет 400 000 отсчетов. 19 бит точности или 0,00045 градусов. Вообще не верю, вот никак.
Для наглядности: если привязать к такой серве палку длиной километр и повернуть на один шаг, конец палки сдвинется на 8мм.
Вот в 5 мкс поверить еще можно. Это 9 бит точности или пол-градуса.
Еще раз говорю: у вас точность определяется не дискретностью мозгов сервы, а механикой. Какие люфты у нее, какие люфты у вас.
1
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2551 / 2065 / 971
Регистрация: 09.10.2013
Сообщений: 4,904
Записей в блоге: 4
26.06.2026, 18:56  [ТС]
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Вот в 5 мкс поверить еще можно.
Тут скорее всего я ошибся - постоянно путаюсь с порядком...

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Какие люфты у нее, какие люфты у вас.
3D печать на бюджетном принтере с доработкой напильником - так что точность деталек так себе..

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Раз уж "мысли вслух", давайте сначала выслушаем ваши соображения.
С доступом к документации сейчас "403 forbidden" - st.com на VPN тоже ругается...

Если примерно:
- определить на какой частоте работают таймеры(TIM[2..4] вроде бы на APB1 сидят... Нужно уточнять, а с доступом к докам проблемы)
- посчитать делители для частоты == 50Hz
- сами таймеры имеют счетчики 16 бит - длительность импульса рассчитывается примерно так же как и для PCA9685

Clock config
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,082
26.06.2026, 20:51
Цитата Сообщение от Max Dark Посмотреть сообщение
С доступом к документации сейчас "403 forbidden"
Вот уж reference manual на f103 скачать вообще никакой проблемы. Он где только не выложен. Вот, например, с первой страницы выдачи.
1
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2551 / 2065 / 971
Регистрация: 09.10.2013
Сообщений: 4,904
Записей в блоге: 4
26.06.2026, 21:51  [ТС]
По таймерам нашел документ "AN4776 - General-purpose timer cookbook for STM32 microcontrollers"

Сижу, изучаю...

Нашел datasheet на MCU, в нем "Clock tree", но пока что не понял какая же частота у таймера выходит при моих настройках.

stm32f103 clock tree
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.06.2026, 21:51

Сервопривод Belimo NV24-MFT
Прошу помочь разобраться с сервоприводом типа фирмы Belimo NV24-MFT. Можно управлять с помощью...

Управление множеством сервоприводов
Доброго времени, сразу хочу извиниться если повторяюсь с данной темой. как реализовать цепь из МК?...

По поводу сервоприводов для человекоподобной руки
Всем привет. Собираюсь собрать роботоподобную человеческую руку, показанную в этом ролике:...

Контроль сервопривода (servo library)
Здравствуйте. Подскажите как сделать чтобы серва не возвращался на начальную позицию (0). Перекопал...

Контроль сервопривода
Да, хотел сам реализовать. Благодаря ссылочкам raxp определился с тем что мне нужно. Сделаю на...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru