Например TDA7294

Форум РадиоКот • Просмотр темы - RSLK от TI (Robotic System Learning Kit)
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Чт авг 13, 2020 04:49:01

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


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



Начать новую тему Ответить на тему  [ Сообщений: 144 ]     ... , , , , 8
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: RSLK от TI (Robotic System Learning Kit)
СообщениеДобавлено: Пт май 08, 2020 19:30:26 
Друг Кота
Аватар пользователя

Карма: 69
Рейтинг сообщений: 541
Зарегистрирован: Ср дек 24, 2008 09:58:58
Сообщений: 3307
Рейтинг сообщения: 0
Медали: 3
Мявтор 1-й степени (1) Мявтор 2-й степени (1) Мявтор 3-й степени (1)
Да, таймеров у EFM32 меньше, чем, например, у ST. Однако, если нужет синхронный захват, то его легко организовать с помощью модуля PRS. Киты их стоят дорого, наверное, потому, что на них установлена уникальная система измерения тока. Вместо Китов дешевле просто распаять МК на своей плате.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: RSLK от TI (Robotic System Learning Kit)
СообщениеДобавлено: Пн май 11, 2020 07:40:06 
Друг Кота
Аватар пользователя

Карма: 45
Рейтинг сообщений: 1169
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 6665
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
По общим параметрам, EFM почти совпадает с MSP432. Тоже 4 таймера, толпа UART/USART, 48МГц тактовая... Но, у тех кристаллов, на которые я нацеливался (Giant Gecko в легкопаябельном корпусе и по-дешевле) у таймеров всего по 2 канала захвата (и отсутствие PRS). Зато есть модуль AES. Так что пока не нашел, чего-нибудь, что меня бы в них привлекло.

Кстати, что меня привлекает в MSP - регистры xxxIV - interrupt vector. Очень облегчают работу в прерываниях. Это я прочувствовал, когда переписывал драйвер под STM - там мне его очень не хватало.

А тут сбылась мечта. Всё время мучался вопросом, как не допустить переразряда батареи. Известно, что LiPo аккамуляторы очень не любят этого. Но вот когда делал плату для нового Linefollower, думал, что надо бы... да вот только все входы АЦП уже были заняты. Зато у робота на MSP432 (хоть там не LiPo, а NiMH) для лабиринта АЦП всё еще не занято, и почему бы не сделать измерение напряжения на батарее? Конечно, со свободными выводами у RSLK-MAX уже становится напряжно, но, пока для облегчения жизни, я решил нагло воспользоваться входом обратной связи предназначенной для "руки" (потому как не вижу, чтобы в curriculum появились бы лекции посвященные этой теме). Так как напряжение батареи 7-8-9 вольт, а максимальное напряжение подаваемое на вход АЦП - 3.3в (в качестве опоры буду использовать напряжение питания), то необходим делитель. Делитель решено было применить 1:3 - тогда верхняя граница будет 10в. А вот из каких номиналов делать этот делитель? Т.е. какое выходние сопротивление этого делителя должно быть? Опыта у меня в таких делах особо нет. Как-то раз делал фирмварь для одного устройства. Там нужно было контролировать напряжение резервной батареи cr2032. Она подключалась через 1 Мом и повторитель на ОУ к АЦП. А тут из параметров АЦП есть только 15пФ и 300 ом. Ну, смеха для решил для начала взять 100 и 200 килоом. Но такой пары не нашел - пришлось напаять 1 мегаом и 470 килоом. Измерил тестером делитель: 7.50в после делителя дали 2.32 - примерно похоже.

Теперь, думаю, надо заняться программной частью. С АЦП уже работал, когда делал 15-ю лабораторную работу "Data acquisition". Там при помощи АЦП считывалась информация с сенсоров дистанции. Начал изучать, что там был понаписавши. Оказалось, для периодичного запуска АЦП использовалось прерывание от таймера... в котором "вручную" делался запуск преобразования и в цикле ожидалось появление результата преобразования. Какой ужос! Т.е. реально - без прерываний. Для лабы это сойдёт, но для серьёзной работы - никуда не годится. Разумеется, я планировал делать не один отсчет, а несколько, с каким-либо периодом и еще пропускать результат через ФНЧ, поэтому меня интересовало, как запускать периодически преобразование и как потом по прерыванию считывать показания. Проблема в том, что свободных таймеров больше нет, поэтому надо бы привязаться к какому-нибудь периодическому процессу. Посмотрел, откуда можно запускать преобразование. Это нужно смотреть в даташите на конкретный контроллер. В MSP432p401r мне показалось удобным использовать TA2.2 (Timer_A2, CCR2). Так что период опроса получился 2.5мс - 400 раз в секнду. При этом, недостаточно просто запустить таймер и загрузить число в CCR, надо еще и задать режим вывода (Set/reset, toggle итп. - потом будет ясно почему). На порт его выводить не нужно, но можно для контроля. После чего сделал еще обработчик прерывания АЦП: так как у меня пока всего один канал, я его написал элементарно - просто считывание буфера, которое уже само по себе снимает запрос прерывания. Итак, делаем запуск - показывает всего 5.4в, вместо 7.5в. Что-то не то.

Начал ломать голову на тему, а не воткнуть ли мне после делителя повторитель на ОУ (благо на плате RSLK-MAX есть один лишний). Но пока собирался это сделать, продолжал размышлять. Похоже, что из-за высокого выходного сопротивления делителя постоянная времени получается выше, чем время, выделенное на длительность sampling-а. Можно увеличить время этого самплинга (сейчас есть 32tclk, но можно увеличить до 192). И тут я вспомнил, что у этого АЦП есть такой режим, как Extended Sampling (в отличии от Pulse sampling). Вот не могу вспомнить, встечал ли я такой режим у других микроконтроллеров (или просто не обращал внимание)? Так вот pulse sampling - это когда фронт импульса запускает череду процессов - накопление заряда на измерительном конденсаторе и следом сам процесс преобразования. Extended Sampling, в свою очередь делает так, что всё время пока длится запускающий импульс - накопительный конденсатор подключен к входной цепи (т.е. постоянно сэмплируется), а по окончании импульса запускается процесс преобразования. Поэтому, я могу его растянуть аж до 2.4мс! В общем, поменял этот битик в конфиге (с pulse на extended) и сразу показания стали 7.6в. Потом, немного по подбирал коэффициенты, так как они были расчиты исходя из номиналов делителя и опоры 3.3в, которые на самом деле не являются точными, пока не получил показаний совпадающих с показаниями тестера.

Подключил к лабораторному БП и проехался в диапазоне 6.2в - 10.0в - показания примерно совпадают (минус 0.1в). Эта погрешность возникает из-за того,что я измеряю напряжение после ключа , подающего питание на схему и на котором тоже немного падает напряжение. Это я вижу замеряя тестером напряжение на батарее и после ключа - напряжения различаются как раз примерно на 0.1в. Подключался после ключа а не до, чтобы при выключенном питании этот делитель не разряжал батареи. Мммм, подключать к калибратору, я пожалуй не буду - для моих целей показометр получился достаточно хорош. В противном случае, надо бы использовать в качестве опоры внутренний опорник REF_A и делитель делать на более низкое напряжение, так как этот модуль может выдавать 1.2, 1.45 и 2.5в.

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: RSLK от TI (Robotic System Learning Kit)
СообщениеДобавлено: Чт май 14, 2020 07:05:01 
Друг Кота
Аватар пользователя

Карма: 45
Рейтинг сообщений: 1169
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 6665
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Смотрел на днях вебинар от ST про Machine Learning Core. Толком ничего не понял, видимо, это еще не про меня. Да и пример, где приводилось обучение, был слишком тривиальный - его вполне можно сделать простым алгоритмом, без искусственного интеллекта. Но, там рассматривались варианты размещения вычислительных мощностей. И для систем требующих быстрого принятия решений указывалось, что лучше если этот MLC находится у сенсоре, а не где-то вдали, куда требуются каналы связи, которые могут иметь низкую пропускную способность или надёжность. А так как в этом вебинаре для прмера использовался датчик ускорения, я начал снова думать на тему, которая меня уже пол-года мучает.

Когда-то возникла мысль, а не сделать ли так, чтобы положение робота в пространстве определять не с помощью таходатчиков, а с использованием 6-осных акселерометров. Даже начал у себя искать - был когда-то один такой модуль купивши - но это оказался всего трёхосный акселерометр. Поэтому, в феврале был заказавши на e-bay модуль шестиосного акселерометра. Правда, он еще до сих пор до меня так и не добрался.

Немного порывшись по интернету, вычитал, что на самом деле шести осей недостаточно. Из-за неточности интегрирования имеется "дрейф" абсолютных координат. Для этого желательно использовать еще 3 оси - магнитометр. Правда, у меня на памяти один случай, когда у одной команды в соревнованиях FolkRace робот в одном месте внезапно разворачивался, возможно из-за проходящей под полом в том месте железной трубы.

Но у меня же есть плата Thunder Sense 2 - а там есть акселерометр с магнитометром. И вычисление координат можно было бы делать на процессоре EFM, что стоит на той плате, а роботу просто передавать готовый результат. Проблема еще, конечно, с размещением. Лучше, было бы чтобы сенсор находился по середине колёсной оси. иначе, придётся делать коррекцию от положения сенсора к центру робота (смещение с учетом направления, куда повернут робот). Но там находится шасси. Ближайшее место получается прямо под платой LaunchPad. Еще вопрос, удастся ли туда этот Thunder Sense засунуть.

Следующее, нужно бы написать софт, который по этим ускорениям проделает кучу интегрирований и даст текущие координаты. Но тут подумал, а ведь эта проблема так и просится быть решенной, неужели никто, даже среди квадрокоптерщиков, её еще не решил? Ведь, наверняка есть уже готовые проекты? Может, кто уже видел? Я тоже поищу, когда окажусь у нормального интернет-соединения, но может кто может дать наводку сразу?

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Шестое юбилейное мероприятие в процессе
Не в сети
 Заголовок сообщения: Re: RSLK от TI (Robotic System Learning Kit)
СообщениеДобавлено: Вт июн 02, 2020 17:18:09 
Друг Кота
Аватар пользователя

Карма: 45
Рейтинг сообщений: 1169
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 6665
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Акселерометры пока не прониклись... зато, получил новый модуль для детектирования цвета. Встречайте модуль VEML6040 производства Vishay. У меня нет большого опыта, но из трёх сенсоров цвета, котрые я подержал в руках - этот самый простой, пожалуй. Общается по i2c имеет всего один конфигурационный регистр и 4 регистра для считывания результата. Всё. Нет даже статуса, сообщающего, что измерения выполнены и результаты доступны. В конфигурационном регистре можно выставить время интегрирования от 40мс до 1280мс, ручной или автоматический режим запуска, бит для ручного запуска и бит выключающий сенсор. Поэтому, чтобы им пользоваться достаточно записать 0 в конфиг и сенсор начнёт работать в автоматическом режиме с временем интеграции 40мс. Хм, для проверки валидности данных (что они взяты из одного цикла интегрирования), пожалуй, надо сделать повторное считывание и сравнение. Ну и принимать данные как валидные, если оба раза считались одинаковые данные.

Ну а теперь, надо бы заняться реальным определением цвета. Изначальный, мною реализованный алгоритм был крайне туп: превышение некоего порога указывает на наличие соответсвующего цвета. Но это меня не очень устраивало - хотелось подвести какую-нибудь математическую базу. Поэтому попытался для начала попытаться разместить показания сенсоров в трёхмерном пространстве RGB и вычислять расстояния до координат точек, соответствующим ожидаемым цветам. Например красный: 255,0,0; зелёный 0,255,0 итд.
Изображение
Ну и то расстояние, которое в этом пространстве окажется меньше (и меньше определенного порога) - и является требуемым результатом. Да вот с порогом у меня как-то не сошлось. Если интенсивность освещения мала - цвет не определяется, если большая - начинает видеть цвета и на "белом" фоне. Поэтому ничего глупее не придумал, как провести нормализацию уровней:
Rнорм = R/(R+G+B)
Gнорм = G/(R+G+B) итд. Вот это был fail. Функция стала возвращать почти всегда один результат - черный цвет. Проведя моделирование в Excel понял, что в этом случае все контрольные точки имеют среди кратчйших расстояний и расстояния до "черной координаты" (0,0,0). А так как проверка начинается именно с неё, то на этом варианте всё и заканчивается. Короче, я понял что это не решает мою задачу.

Ну для определения цвета существует еще куча возможностей.. Есть CIELAB, CIELUV, HSI. Ну, первые два очень крутые способы описания цветового пространства, поэтому решил воспользоваться обычным ширпотребным HSI - Hue, Saturation, Intensity. Вот этот Hue и есть искомая вещь. Жаль только, что она выражается в виде угла круга. Ну и для выяснения, нужно ли выделять цвет, можно воспользоваться параметром насыщенности: если насыщенность недостаточна - цвет белый (оттенки не волнуют).

I = (R+G+B)/3 - интенсивность
S = 1 - min(R,G,B)/I - насыщенность.

Так как сама по себе интенсивность мне не нужна, формулу для насыщенности сделал такой:
inv_saturation = 3 * min(R,G,B) / (R+G+B);
вычитание из единицы тоже выкинул - мне без разницы какое сравнение делать.

Это была самая лёгкая часть. А вот формула для вычисления Hue (ой, мне лень вырисовывать корни и дроби, потому вставлю всю картинку):
Изображение

Вот этот арктангенс и есть небольшой камень преткновения. Если тупо считать дробь, то ничего не получится. Потому как простой арктангенс может вернуть результат только от -90 до +90 градусов. Т.е. первый и четвёртый квадрант. После вычисления дроби информация о втором и третьем квадранте теряются. Поэтому, проще оказалось эту дробь рассматривать как координату в плоскости XY:
X = 2*R - G - B, Y= sqrt(3)*(G - B). И вот знаки X и Y указывают на квадрант в котором находится точка.

Изображение
Если нарисовать этот круг, получается, что красный находится на 0 градусе, желтый на 60, зелёный - 120, светлоголубой 180, синий -120, фиолетовый - -60. Кстати, если взять синус и косинус от каждой координаты, то выяснится, что координата X принимает значения плюс-минус 1 и 0.5, а координата Y - 0 и плюс-минус корень из 3 пополам. Поэтому, вычислять углы нет особого смысла. И можно из формулы для координаты Y выбросить этот "корень из 3". Тогда если Y близок к нулю цвет или красный, или голубой (в зависимости от знака X), а если Y примерно равен X, то остальные 4 цвета (и тоже определются знаками X и Y). Причем, это "близко к нулю" можно поставить на границе в 30 градусов. А синус 30 есть 0.5 - поэтому "порог" можно ставить как раз на этом уровне - если Y находится в диапазоне от -0.5 до +0.5 - это близко к 0, иначе - всё остальное.

Попробовал написать код исходя из этих предпосылок - всё вроде работает, кроме одного - ни разу не удалось отдетектировать синий цвет. Почему-то G - B всегда даёт положительный результат. Всё что мне кажется "синим" подставляю под сенсор - синего не вижу - всегда присутствует зелёная составляющая с большей, чем синяя амплитудой. Надо будет попробовать в сенсор посветить синим светодиодом. Даже, если под сенсор подсунуть белый лист бумаги, красная и зелёная составляющие равны, а вот синяя почти в два раза меньше. Может, "белый" светодиод имеет очень слабую "синюю составляющую? На взляд, он имеет желтоватый оттенок.

====

На позапрошлой неделе задумался о том, что хорошо, что сделал плавный разгон, а вот как быть с плавным торможением? Проблема в том, как вычислить с какого расстояния надо начинать тормозить. И пока я кручу эту мысль в голове, вдруг вывалилась мысль, что у меня еще одно из самых тормозных мест - поворот робота. При этом, я всегда знаю, на сколько я хочу повернуться и всегда примерно знаю, на сколько уже повернулся. Поэтому в функцию поворота вставил код разгона. Сначала, сделал так, что робот половину поворота разгоняется, а вторую половину - тормозит. Но, оказалось, что делать разгон с минимума до указанной в конфиге скорости поворота, а после 45 градусов (если поворот на 90) делать торможение до минимума, выходит, что почти половину поворота робот выполняет на минимальной скорости. Поэтому, решил, что задаваемая в конфигурации скорость поворота будет минимальной скоростью, до которой робот будет при торможении сбавлять скорость. При разгоне, решил разрешить разгоняться до максимальной скорости. Погоняв робота по трассе, так же решил сместить точку начала торможения на 60 градусов (тоже для 90 градусного поворота). Но, похоже, просто введу в конфиг еще парочку параметров, чтобы при необходимости я мог быстро изменить эти углы в любую сторону в зависимости от обстоятельств.

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
Быстро и просто. Разработка бюджетного неизолированного источника питания на контроллере VIPer122

С помощью VIPer122 можно создавать как изолированные, так и неизолированные сетевые источники питания. Разберем самый простой и бюджетный вариант – разработку неизолированного понижающего источника питания с выходным током в несколько сотен миллиампер без трудоемких расчетов трансформаторов и компонентов обвязки.

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

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


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

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


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

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


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