Программно остановить DC мотор БЫСТРО. Как?
- Войдите на сайт для отправки комментариев
Обнаружил длинный тормозной путь нашей самокатной тележки, аж в 12 сантиметров.
Разгон до максиума (скорость ок. 1 метра в сек) и после команды "Стоп" (управление через L298N), тележка пролетает ещё 12 сантиметров пока не остановится. Если кратковременно подавать обратное вращение на моторы (до 0.25сек), то тормозной путь сокращается до 7-8 см. Это все равно много.
Как можно значительно сократить тормозной путь до 1-2 см?
Дело в том, что при движении по линии толщина которой всего 2 см. .. такой тормозной путь неприемлем: после обнаружения датчиком края, остановка мотора не приводит к заметной реакции и тележка пролетает за линию "тока так". Долго грешил на датчики - типа не видят линию. Тестирование показало что причина в слишком большом тормозном пути ..
и, как быть? :)
Использовать нормальный драйвер мотора с режимом торможения. Например, TA7291 отлично тормозит.
В тепло кинетическую знергию переводить? Вряд ли "быстро" получится.
Тормозные колодки блокировать колёса?
Сцепление, однако, не безгранично.Пробуксовавать будут.
Справка: Ваша скорость 3.6 километра в час.
http://hurt-abakan.blogspot.ru/2012/05/blog-post_24.html
Спасибо за подсказку по драйверу. Думаете это проблема L298N из-за его "дарлингтонов"? Моторы реально делают большой "выбег" .. дело не в торможении колеса по поверхности.
Да, нет, это не его проблема. Просто в нём такая вещь не предусмотрена. У него есть только режим Stop (когда выходы в высокоимпедансном состоянии). А у TA'шки такой режим тоже есть, но есть ещё и режим break - там он типа (неправильно скажу, но правильно не могу сформулировать) "противодействует току, который генерируется вращающимся мотором". Посмотрите его даташит.
на асинхронных с частотниками применяют баластные резисторы для быстрого торможения. покопайте в этом направлении, может резистором при торможении закорачивать.
или использовать мотор с редуктором, лучше червячным.
Вроде есть у негo и торможение..... https://www.bananarobotics.com/shop/How-to-use-the-L298N-Dual-H-Bridge-Motor-Driver
hg7881 вам в помощь
Ха! Спасибо за детальное описание драйвера. Поскольку участвовал в обсуждении драйвера на мосфетах, и уже собрался делать свой (приехали AO4606 и микросхемки), то помня про тот проект так и управляю этим драйвером: PWM сигнал управляет EN входами, направления IN1,IN2 .. так вот, как раз дабы уменьшить сквозные токи так и делаю:
То есть, судя по описанию, это как раз "режим brake". В этом режиме тормозной путь около 12см. А если делаю так (примерно, там автоматный стиль):
, то тормозной путь 7см. Ставить время взад больше - нет смысла, он начинает крутить колесо взад в реальности.
Посмотрел на hg7881 - слабоват. Только 0.8А в продолжительном режиме. У меня моторы - амперники. Да и пример по управлению на том же сайте, что по ссылке trembo оставляет желать лучшего: пример "быстрого переключения" использует задержку в 1 секунду! Да за 1 сек .. у меня тележка с поля уедет. Пиковая скорость по прямой до 3 метров в сек. От трассы до края - 15см. Только вот пока не получается даже близко к пиковой ехать сохраняя удержание линии .. в лучшем случае 30-50см/сек, ещё "как-то держит", чуть больше и всё, моторы тормозить не успевают. Похоже нужен иной подход.
Ставить время взад больше - нет смысла, он начинает крутить колесо взад в реальности.
Тогда я совсем ничего не понимаю:
при подаче двух "земель" ( или двух "питаний") на мотор он начинает куда-то крутится?
То есть при замыкании клем мотора накоротко?
Тележки не гонял, а краны мостовые и а/м приходилось. Для электродвижителей частый контраток, на а/м аналог, пока АБС не придумали, частое нажатие на педаль тормоза. Эффективность одной длинной блокировки < нескольких коротких.
а это tb6612
trembo, нет конечно. При разрешенном EN, и двух нулях или обоих единичках на управляющих - он никуда не крутится. До ссылки на описание L298N, я считал что ставя 2 нуля, мотор будет в режиме "выбега", а это оказалось не так. Это режим торможения за счет замыкания якоря через землю.
bwm, ну вот что-то подобное и получается: если делать обратное включение до 200мсек, то "выбег" существенно укорачивается, но все равно остается великоват и приходится снижать маршевую скорость по прямой, дабы не вылететь за линию датчиками. Можно попробовать имитировать ABS в виде нескольких частых, но ещё короче импульсов ..
Но, похоже надо идти другим путем: обкатывать трассу "медленно" и строить временные диаграммы мест поворотов, а уже потом ехать "как по карте", только корректируя датчиками точки изменения траектории трассы. Что-то типа "картографа". Чтобы начинать торможение ещё на прямом участке. Или учитывать "пролет" тормозного пути и пофиг на потерю линии датчиком .. знаем на сколько датчик ушел в сторону - довернем когда моторы войдут в режим поворота.. то есть на какое-то время тупо игнорить "маты с датчиков".
valera19701, к сожалению уже ничего прийти не успеет. Есть эти драйвера и буду пока домучивать то что есть. Соревнования уже 26-27 февраля .. а ребенка пока ещё свою програмку и до этого уровня не дописал .. пока спит, пробую свои версии погонять .. блин, нифига оно затягивает! :)
Но, похоже надо идти другим путем: обкатывать трассу "медленно" и строить временные диаграммы мест поворотов, а уже потом ехать "как по карте", только корректируя датчиками точки изменения траектории трассы. Что-то типа "картографа". Чтобы начинать торможение ещё на прямом участке. Или учитывать "пролет" тормозного пути и пофиг на потерю линии датчиком .. знаем на сколько датчик ушел в сторону - довернем когда моторы войдут в режим поворота.. то есть на какое-то время тупо игнорить "маты с датчиков".
Это хорошо получится если такая возможность имеется, а если сразу в бой? Как вариант, вылетели-реверс на заданное время- нашли-поворачиваем. Что по времени выйдет - надо пробовать.
сомневаюсь, что из торможения через управления самим двигателем можно много выжать. хороший драйвер можем помочь, но полностью затормозить мотор не сможет ибо нет обратной связи. Вот был бы шаговый мотор - там драйвер может "клинить" ось в нужном положении, так называемый режим удержания, но это благодаря конструкции именно шагового мотора
в вашем случае реально больших ускорений в торможении можно достичь установив электромагнинтый тормоз - подпружиненные колодки которые принудительно раскрываются электромагнитом
купил новый шуруповерт бошевский. у него явно срабатывает тормоз, скорее всего именно электромагнитный - слышен звук похожий на срабатывание колодок. В итоге патрон затормаживается мгновенно даже с 2000 оборотов/мин и так же в отдичии от многих других при смене инструментм патрон не нужно удерживать от проворачивания - стоит как вкопанный
Да, такая возможность имеется. Трасса фиксена регламентом (отпечатал, дома гоняем по самоделке). Более того, из двух дней - первый "тренировочный", уже непосредственно в зале соревнования, в т.ч. и для настроек по освещению датчиков. Сам соревновательный день имеет тренировку минут 30, потом "квалификация", потом доработку кода и только потом борьба на вылет по олимпийской системе.
Если бы сам выступал, мне этого времени вполне хватило для хронометрирования трассы с секундомером в руках и зашивания в код жестко всех контрольных точек. :)
сомневаюсь, что из торможения через управления самим двигателем можно много выжать. хороший драйвер можем помочь, но полностью затормозить мотор не сможет ибо нет обратной связи. Вот был бы шаговый мотор - там драйвер может "клинить" ось в нужном положении, так называемый режим удержания, но это благодаря конструкции именно шагового мотора
в вашем случае реально больших ускорений в торможении можно достичь установив электромагнинтый тормоз - подпружиненные колодки которые принудительно раскрываются электромагнитом
купил новый шуруповерт бошевский. у него явно срабатывает тормоз, скорее всего именно электромагнитный - слышен звук похожий на срабатывание колодок. В итоге патрон затормаживается мгновенно даже с 2000 оборотов/мин и так же в отдичии от многих других при смене инструментм патрон не нужно удерживать от проворачивания - стоит как вкопанный
Так мгновенная блокировка в данном случае, еще хуже. Сразу перешли в режим скольжения. Я ведь не зря мостовой кран в пример приводил, там именно такая система. Чтобы штатно остановиться, надо за километр в нейтраль ставить (колодки вал блокируют), контрток гораздо эффективней, за счет подергиваний колеса улучшается сцепление с поверхностью. Здесь тоже надо изменять коэффициент сцепления колеса и трассы. Трасса - константа, колесо - увеличение давления (но увеличиваем массу - момент инерции), остается изменение материала и наш контрток. Вместо 7см достигнутых ТС, получим 5см и это максимум. Злой дядька Ньютон все испортил.))) Значит работа в режиме ЧПУ становится самой оптимальной.((((
Кроме ЧПУ (предварительного знания трассы) есть какие-то ещё "способы"? А то остается ощущение, что велосипед изобретаем .. :)
Кроме ЧПУ (предварительного знания трассы) есть какие-то ещё "способы"? А то остается ощущение, что велосипед изобретаем .. :)
Боюсь, что нет. Сохранение энергии однако. Остановим колесо, начнем скользить, остановим одновременно и скольжение (в теории), массивные элементы начнут пробивать себе дорогу. Вспомните наш самописец с Сушки.
Ванюшка, а как измерить силушку богатырскую?
Просто, нянечка! Помножить массушку на ускореньице.
Скорее карта или (если не считается нарушением), то что раньше описывал - поймали конец линии, тормозной путь примерно известен, дозированный реверс, выбор направления и далее. Так честнее. ИМХО.
Поставьте второй датчик, вынесенный вперёд, минимум на 12см. Пусть он отвечает за начало торможения.
Злой дядька Ньютон все испортил.))) Значит работа в режиме ЧПУ становится самой оптимальной.((((
дядька Ньютон не злой, он объективный ) в его законах есть и то, что в помощь и то, что мешает. Искать компромисс - это как раз и интересно
Что ты назваешь "режим ЧПУ"? По мне режим ЧПУ это работа по координатной сетке. В данном случае в чистом виде он не возможен ибо нет жесткой привязки механики к сетке как есть в ЧПУ станке
Насчет баланса между максимально резкой остановкой и скольжением, то здесь как в автомобилях. Первый вариант технически простой - экспериментально подбирать усилия торможения для данных поверхностей и это усилие задавать как параметрические константы. Второй вариант более продвинутый, но технически сложнее - АБС. Анти блокировочная система. Нужны датчики вращения каждого колеса и механизм управления усилием торможения или в целом по системе или в идеале каждого колеса. Но и в этом варианте будут ограничения - возможные отклонения от курса при проскальзывании колес которые датчики вращения не могут детектировать. Следующий шаг - система курсовой устойчивости с датчиками осевых ускорений.
и, как быть? :)
тю. механические тормоза и резину шипованую на колёса телеги.
Предлагаю революционный вариант:
У вас какой тормозной путь?
7 сантиметров?
Вынесите ваш датчик на 7 сантиметров вперёд.
Гарантирую - остановится точно там где надо!
Что ты назваешь "режим ЧПУ"? По мне режим ЧПУ это работа по координатной сетке. В данном случае в чистом виде он не возможен ибо нет жесткой привязки механики к сетке как есть в ЧПУ станке
ЧПУ, образно, где ТС рассматривал вариант тестового прохождения трассы и программной установки точек, перед которыми начинать притормаживать.
Пасибки. Идея с выносом датчика, точнее пары вперед на величину тормозного пути заинтриговала. В текущей конструкции это невозможно, в силу ограничений на размер 200х200х200мм, а у нас сейчас сделана приземистая телега (общий Ц.Т. не выше 60мм) в габарите 195х195 и вынос датчиков от передней оси не более 40мм.
Но, можно "поднять" наш "ардуино-кирпич" и запихать моторы под него, а если кирпич развернуть поперек (он размерами 120х80), то можно ещё сократить межосевое расстояние и тогда вынос датчиков "существенно вперед" - решаемая задача. В таком разе вижу 2 пары датчиков: предварительного слежения за линией - вынесены вперед по максиуму и основная пара, контролирующая линию. Первой парой только принимать решение на поворот и резкие тормоза на кривых участках, а собственно движение по линии контролировать второй парой.
А трасформеры запрещены? Если датчик выдвигать за габариты при движении
Да, запрещены. Это первое что предложил мой ребенок: выдвигать датчики на ходу. Увы.
я правильно понимаю - задача максимально быстро и максимально точно проехать по белой линии?
ребенку респект)
Угу. Вчера катали на реальном треке .. грустна. Без спец. приемов развить скорость больше 30см/сек - не удалось (и это при том, что по прямой едет 175см/сек на этом редукторе!). А ещё было обнаружено что левый и правый моторы ведут себя неодинаково. В одну сторону едет устойчиво, а вот в другую норовит уйти с трассы. Не хватает мотора на "доворот". "враги" говорят что и "это много" (гоняли на территории конкурентов) .. но хочется выжать таки "фсё" из тележки.
Пока что реально достигнутая скорость со вмеси ухищрениями .. около 70см/сек. "врагам" показывать не стали .. :)
Обидно то, что ребенок уже практически освоил программирование на С/С++ "в черне" .. сам пишет код отдельных испытаний .. а вот показать ему приемы оперативной подстройки .. да в "автоматном стиле" (без delay ) .. ох, рановато ещё ..
тогда получается у вас два направления развития
1 совершенствование динамических характеристик тележки - разгон и торможение
это выше обсуждали. по моему без тормозов не обойтись
2 увеличение дальности обнаружения изменения траектории или хотя бы ее предсказания
что если сделать датчик который на удалении будет следить за белой линией по центру? т.е. пока едем прямо и линия впереди прямо датчик говорит "вижу". Как только датчик перестает впереди по центру видеть линию мы тут же сбрасываем скорость до той, на которой можем правильно отреагировать уже от штатного датчика. После поворота как только дальний датчик обнаруживает линию по центру - включаем разгон. Таким образом мы оставляем текущую скорость при маневриваронии, но получаем ускорение на прямых
датчик по обнаружению линии по центру тем хорош, что здесь можно применить фокусировку, ибо точка наблюдения заранее известна
Да, такая возможность имеется. Трасса фиксена регламентом (отпечатал, дома гоняем по самоделке). Более того, из двух дней - первый "тренировочный", уже непосредственно в зале соревнования, в т.ч. и для настроек по освещению датчиков. Сам соревновательный день имеет тренировку минут 30, потом "квалификация", потом доработку кода и только потом борьба на вылет по олимпийской системе.
Если бы сам выступал, мне этого времени вполне хватило для хронометрирования трассы с секундомером в руках и зашивания в код жестко всех контрольных точек. :)
А почему бы, если есть такая возможность, не "картографировать" трассу автоматически.
На тренировочный заезд надеть на оси двигателей энкодеры. Тогда можно записать длину участков трассы. И радиусы поворотов, по разности оборотов на осях, во время поворота.
В принципе можно напечатать энкодерную ленту или диск и наклеить прямо на колёса.
С картографированием трассы пока отложено по двум причинам:
1. Написать ребенку самостоятельно такой код пока ещё не под силу;
2. Ребенка категорически отказался, сославшись на то что "это будет нечестно, даже если не запрещено явно. Получается что мы подгоним робота под заданную трассу".
Проблема с прохождением поворота или с точной остановкой в конце трассы?
Если с прохождением поворота, то можно поробовать написать алгоритм вхождения в поворот без сильного снижения скорости - одни колеса должны ускориться, другие начать вращаться в другую сторону. С резкой остановкой попробуйте не один раз сделать импульс обратного вращения, а 2-3 раза с интервалом.
Проблема не столько с поворотами, сколько в целом с реакцией на линию .. такое ощущение, что датчики периодически жестко глючат .. вынес вопрос в отдельную тему. Опробовали уже несколько вариантов конструкции:
1) 2 мотора + 4WD на шестеренках - каждый мотор управляет своей стороной .. большой габарит, на пределе допустимого, плохой проход крутых поворотов .. практически "ползком". Но это единственный вариант, который дома проходил всю трассу;
2) 2 мотора на задних колесах (увеличение рычага от датчиков до точки вращения робота) + 3-е переднее, пассивное и поворотное колесо .. при клине пассивного колеса (оно вертится не сразу из-за трения) поворот происходит самопроизвольно, независимо от двигателей. После крутых поворотов из-за клина происходит потеря линии;
3) 2 мотора + "лыжа" (ну нет у нас шарика для 3-го колеса!) .. сильно тормозит движение, ШИМ получается очень некузявый, но тоже проезжает трассу, но "медленно" (не более 30 см/сек);
4) задние приводные колеса каждое на своем моторе + серво на поворот передних колес .. маневренность достаточно высока, но пока не удается заставить ехать строго по линии .. периодически или не вращает передние колеса или на перекрестке теряет линию напрочь.
последний вариант на прямой сейчас развивает 75см/сек, или 7.5мм за 10 мсек .. частота управления автоматом if( millis() - previous>waitTime){} .. вот этот самый waitTime сейчас установлен в 2мсек., что по идее должно давать анализ датчиков и реакцию на изменение ситуации каждый 1.5мм .. или 13 раз на ширине линии 2см .. не помогает.
Выделил в отдельную тему проблему с датчиками.
Да, ещё. Домашняя трасса по размерам примерно в 2 раза меньше оригинальной, из-за чего наши повороты существенно круче, а прямые отрезки - короче. печаталось в уменьшенном виде сознательно, типа если тут поедет то на оригинале "порвет всех" .. пока, увы. :(
Да. Датчиков у нас: KY-032 - 1шт (+ IR-08H - 5шт такие же как KY-032 только с одним светодиодом), KY-033 - 1шт, FC-51 (YL-63 он же, который с 1 резистором) - 2шт.
сначала гоняли на двух FC-51, поскольку KY-032 у нас был только 1 .. берут линию не ближе 6см, приходится ставить далеко, из-за чего сильная боковая засветка. Дома едет устойчиво, а "на выезде" сильно засвечивается боковым светом.
Пробовали ставить KY-032 третьим датчиком .. значительно лучше не становится. Это датчики с 2 резисторами и вроде как берут линию с 2см..
Когда пришли 5шт IR-08H (думал что это те же KY-032, оказалось что у них только 1 светодиод, второй отсутствует) пробовали ставить 4 и даже 5 датчиков, но ситуация особо не изменяется .. периодически, в произвольный момент тележка тупо проскакивает линию не делая никаких "телодвижений".
Последние датчики работают с 2 .. 2.5см и сейчас одеты так, что боковая засветка устранена практически полностью. Но как их настраивать .. до сих пор загадка. У них 2 резистора, типа один "дальность", а второй "частота", для отстройки .. нифига. В зависимости от "частоты" датчик может срабатывать по-разному: может просто "дрожать" - то работает, то нет .. может "втягиваться в работу медленно" - то есть меняется подложка и он как-бы постепенно гаснет или включается .. в общем, их настройка для нас пока не очень понятна. Бывает, что настроишь и даже едет .. но в какой-то момент начинает снова дрожать или отключается.
В общем, требуется хелп по этим датчикам..
2. Ребенка категорически отказался, сославшись на то что "это будет нечестно, даже если не запрещено явно.
Правильные императивы у вашего ребёнка.
Из 5 попыток черное обнаруживает не менее 3-4 раз.
Возможно проблема в теории вероятности. Ведь к примеру, если подкидывать монетку 1000000 раз, то усреднено получится 50% орёл, 50% решка. Но бывает цепочка из 10-20 подряд выпавших орла или решки (проверял на валютном рынке).
В общем мысль у меня такая, что проблема может быть в длинной цепочке не правильного распознавания.
Пробовали отслеживать не появление чёрного цвета, а нахождение датчика над белым?
пробовали. "белое" он иной раз выдает и на черном .. особенно когда светодиод датчика "дрожит" - не устойчивое срабатывание. Это как-бы значение "по умолчанию" как понимаю..
У меня недавно 8 инфрарэд дальномеров "дрожали". На аналоговых входах.
Даже не дрожали, а прыгали.
Вроде победил.
Усреднением и массивом мгновенных состояний.
9-10 раз подряд сработало- значит точно сработало.
Прошу прощения, может уже было в теме. Есть предложение следующего типа поставить датчик на опережение, т.е. он должен видеть уход с линии зарание. Допустим есть два датчика которые удерживают тележку на линии - это в право, в лево, добавляем перед. Датчик видит отсутствие линии за 5 - 10 сантиметров и начинает плавно сбрасывать скорость. При этом право и лево продолжают удерживать тележку на линии. К моменту изменения траектории мы находимся на оптимальной скорости движения и идем по линии. Далее датчик вперед видит линию и мы снова набираем скорость.
Здесь предлагали ставить датчик на опережение на 12 см впереди тележки. Поскольку это нельзя - попробуйте поставить опережающий датчик там же где и основной, только поставьте его под углом. Что бы при заданной высоте датчика и углу наклона получить выбег 12 см.
Посмотрел по теме, а зачем выдвигать за габариты. можно продублировать. два датчика ближе к переду, два к заду, один на переднем "бампере". Передний не видит линии. отключаем пару первых, притормаживаем, поварачиваем на небольшой скорости, передний ловит линию, активируем опять первую пару, ускоряемся.
поставить опережающий датчик там же где и основной, только поставьте его под углом.
А совсем по правильному - изменять угол установки в зависимости от скорости, т.к. тормозной путь также изменяется от скорости. Получится дето так, низкая скорость - смотрим под ноги, если долго нет поворотов, начинаем поглядывать в даль и разгонятся, если вдали смена направления, снижаем скорость и смотрим ближе, на приближающуюся точку поворота. И вобще, читаем ПДД для вдохновения - водитель выбирает скорость движения позволяющую остановится в пределах дальности видимости.
Огромное спасибо за советы, но:
1. Датчик "под углом" - нифига не видит. Его светилка работает в конусе 35 градусов согласно описанию. Под углом он просто будет светить в сторону и реагировать больше на внешнюю засветку.
2. Датчики IR-08H - тупо глючат, как выяснилось. Смотрите соотв. тему по датчикам. Перенес обсуждение туда. Здесь давайте оставим методики программного ускоренного торможения .. без разного рода приспособления, типа электро-мех. тормозов.
По этой теме: вынос датчиков сделал за счет смещения взад управляющих колес. Если тележка на трех колесах, и переднее колесо поддерживающее, то разворот тележки происходит вокруг середины задней оси .. что дает очень большое плечо до датчиков - практически вся длина тележки. Помогает. Но так возникает другая проблема, а именно: резкое смещение датчиков и "болтанка" тележки с потерей скорости. Небольшое торможение колесом и небольшой доворот приводит к тому, что срабатывает второй датчик, если оба достаточно близко к линии. Это приводит к тому, что требуется тщательная настройка ширины датчиков, времени торможения и т.д. Гораздо тщательнее чем при обратном положении колес. Пока подобрать чиселки достаточно хорошо не удается: изменение питания батареек приводит к слишком широкому изменению параметров и приходится подстраивать чиселки (времени тороможения, ширину между датчиками, скорость движения и т.д.) по мере падения заряда батареек/аккумуляторов. То, что пригодно для новых батареек, совершенно непригодно для полуразряженных аккумуляторов.
В общем, если ничего лучше сегодня не получится, то оставим этот вариант с подгонкой по мере надобности. Благо на соревнованиях есть периоды "настройки", можно будет подстраиваться по ситуации.
Пусть он помнит, с какой стороны от него линия, с которой он сошел. И сам на линию возвращается.
В идеале ещё через энкодеры оптимальный путь срезания угла до линии просчитывать. Но времени до старта судя по всему у вас маловато.
А заряд аккумуляторов тоже можно мереть на ходу.
Обсуждение от приводов уже отошло, но так, для справки. Я работал с быстродействующими транзисторными приводами на промышленных роботах. Двигатель был болгарский лицензионный Fanuc 5 поперечного независимого возбуждения коллекторный. Управлялся по якорю. Так вот. Для повышения быстродействия привода имели полный мост, где ШИМ был двуполярный. Т.е. якорь всегда принудительно перемагничивали обратным током. Если двигатель стоял, это означало, что половину периода ШИМ на якорь подавали положительное напряжение, а половину - отрицательное. Частота ШИМ была в несколько гилогерц. Тормозил привод подачей полного обратного напряжения на якорь. О КПД лучше умолчать, но быстродействие обеспечивалось.
Интересный вариант с двуполярным ШИМ. В общем проблема оказалась в датчиках. Посмотрел сегодня на еще одну команду "врагов", тоже на базе Ардуино робота, это которые с мотор-колесами и редуктором 48:1 (в широкой продаже) .. ну.. наша тележка даже на самой малой скорости едет раза в три шустрее, несмотря на меньший диаметр колес .. в линию бы ещё попадала... :) В целом, движение по прямой не шустрее 30-35 см/сек.
Итого, после сегондяшних испытаний:
1. Имитация ABS (подача серии коротких обратных импульсов по 16мсек) позволяет сократить полный тормозной путь со скорости в 75см/сек до 4-5см (это предельная скорость на которой пытаемся управлять тележкой). Но у нас на жесткой поверхности соревновательного стола идет мощный "проскальз" колес .. вплоть до того, что колеса крутятся на разгоне, а робот с полсекунды стоит на месте .. китайская резина от лего-совместимых наборов - фигня полная, хотя на баннерной ткани дома на ковровом покрытии - едет "как надо". На лего-колесах, все куда как кучерявее, но они у нас только небольшого диаметра. Есть только "Lego 43.2х29S". До этого пытались ставить лего-совместимые 56.8х30R .. несколько упадет предельная скорость .. со 175см/сек, думаю не критично, запас ещё приличный.
2. Датчики. Сказать что пром. датчики фигня полная - значит не сказать ничего. При ручном перемещении черной полоски под датчиками - "всё как надо", а при движении - могут запросто выдать "серию" нулей длинной в 10-20мсек независимо от поверхности. Похоже надо садиться и паять самопал, только вот времени уже практически не осталось.. в общем, приспособились, подобрав пару относительно стабильно работающих.
3. Поскольку цикл обработки длится не более 500нсек, сегодня обнаглел и втыкнул принты "на каждый чих" .. и увидел забавную картинку: конечный автомат, работающий от предыдущего и текущего состояния датчиков (состояния: "было прямо-теперь-прямо", "было прямо-теперь налево", "было прямо-теперь направо", "было направо-ещё правее", "было направо-теперь прямо" .. и т.д.) при попадании датчика на линию успевает выдать 5-8 команд (это с принтами!) на доворот, выворачивая тем самым рулевые колеса "в упор", что и приводило к резким дерганьям тележки и вылетам за линию ..
то есть проблема не столько в резком программном торможении, сколько в слишком шустром анализе состояния датчиков и достаточно длительной реакцией мех. части .. прямо как в смешариках: "скоро поворот .. а? поворот скоро! чего? поворачивай! не слышу.. да поворачивай же!" .. :)
и вот тут и проблема:
если снижать частоту обработки датчиков, то неизбежно надо снижать скорость движения по трассе .. на тех самых 20-30см/сек похоже как раз наступает некий "баланс" управления и скорости реакции механики.
.. или надо как-то помнить о начале выполнения команды механикой и .. какое-то время игнорить повторный выбор той же самой команды управления .. в общем простой конечный автомат - не выход, а больше проблема. А вовсе не "быстрый останов моторов", как думал когда начинал тему .. в общем, шустрое управление тележкой - задачка оказалась вовсе нетривиальной. :)
мощный "проскальз" колес .. вплоть до того, что колеса крутятся на разгоне, а робот с полсекунды стоит на месте .. китайская резина от лего-совместимых наборов - фигня полная
Попробуйте старый дедовския способ. Берёте простой лейкопластырь (не бактерицидный, а тонкий, такой, который больше на тряпочную изоленту похож). Обклеиваете колеса им прямо по кругу клейкой стороной к колесу. Потом перед заездом берёте ещё кусок такого же пластыря и его клееевой частью прикасаетесь к внещней стороне колёс (к ранее наклееному пластырю) - как бы промокаете колёса по всей окружности. Колеса становятся чуть липкими, достаточно, чтобы не скользить, но недостаточно, чтобы прилипать. Процедуру надо повторять перед каждым заездом, т.к. эта "липкость" быстро забивается пылью и перестаёт работать.
1. Имитация ABS (подача серии коротких обратных импульсов по 16мсек)
Это примерно то, чем занимается тот драйвер с режимом торможения, о котором я писал в самом начале. Двигатель, когда крутится - генерит ток. Так драйвер в ответ на этот ток, даёт "обратку". В этом его режим торможения и состоит.
Да, согласен. Смотрел даташит на ваше предложение .. к сожалению дорога ко мне из Китаю занимает примерно 1.5мес. .. "не судьба". Теперь уже только на будущее.
С колесами, уже определились и опробовали. "Lego 43.2х29S" держат трассу очень неплохо и позволяют развивать вполне нормальную скорость .. на будущее уже присмотрел резину от Лего "Lego 62.4х20HR" на тренировках лего-участников - "красава" .. :)
А вот программное решение задачи управления .. очень жду подсказок.
Задача, "дано":
1. мех. реакция исполнительной системы лежит в пределах 20-150 миллисекунд. Чем больше выделенный временной интервал - тем точнее исполнение системой команды управления. Длительности менее 10-12мсек - ваще "не замечаются" мех. частью. Например: тупое рекурперативное торможение мотора через закорачивание якоря "на землю" (IN1=IN2=0) .. при длительности около 8мсек - внешне слышен просто как небольшой щелчок без видимых проявлений.
2. Время анализа ситуации "очень короткое" .. в пределах 0.3 - 0.5 мсек, что теоретически позволяет принимать решения по управлению очень быстро и часто .. гораздо быстрее исполнения команды.
3. Требуемая "частота" принятия решений И их исполнения лежит в пределах 8-15мсек, то есть несколько МЕНЬШЕ наименьшей полезной реакции исполнительного механизма..
НАДО:
Построить алгоритм анализа ситуации и постановки команд исп. устройству так, чтобы оно "успевало" их выполнять БЕЗ нарушения частоты принятия решений .. то есть как-бы "заранее".
Есть идеи? :)