Re: Робот-шпион. Сборка робота. Этап 8. Электронные платы
intel писал(а):
так что скорее будет ик дальномер типо шарпавской сборки он тоже кстати только на пол метра бьет
Дай-то бог, а то у меня в зверьке за 3.5 рубля ИК дальномер работает на 4 метра, причем именно дальномер, а тут 0.5 метра и непонятно будет он что то мерить или только определять препятствие.
23 апр 2012, 09:09
intel
Зарегистрирован: 20 апр 2012, 09:50 Сообщения: 14
Re: Робот-шпион. Сборка робота. Этап 8. Электронные платы
koma220 писал(а):
intel писал(а):
так что скорее будет ик дальномер типо шарпавской сборки он тоже кстати только на пол метра бьет
Дай-то бог, а то у меня в зверьке за 3.5 рубля ИК дальномер работает на 4 метра, причем именно дальномер, а тут 0.5 метра и непонятно будет он что то мерить или только определять препятствие.
а что за зверек ссылочку можно так для общего развития и какой именно в нем дальномер???
Re: Робот-шпион. Сборка робота. Этап 8. Электронные платы
intel писал(а):
koma220 писал(а):
intel писал(а):
так что скорее будет ик дальномер типо шарпавской сборки он тоже кстати только на пол метра бьет
Дай-то бог, а то у меня в зверьке за 3.5 рубля ИК дальномер работает на 4 метра, причем именно дальномер, а тут 0.5 метра и непонятно будет он что то мерить или только определять препятствие.
а что за зверек ссылочку можно так для общего развития и какой именно в нем дальномер???
Roboquad от wowwee сейчас пролистал инструкцию в ней написано до нескольких метров, но где то попадались точные цифры. Что за дальномер незнаю.
25 апр 2012, 16:20
Chemicman
Зарегистрирован: 27 апр 2012, 12:23 Сообщения: 11 Откуда: Москва
Re: Робот-шпион. Сборка робота. Этап 8. Электронные платы
Я тоже разобрался с I2C протоколом управления платой движков. I2C адрес платы UC0 -- 0x40. Байт по адресу 0x00 - управляет левым движком, а по адресу 0x01 - правым. Старший байт управляет реверсом, остальные 7 - скорость.
В принципе могу уже управлять этой тележкой без второй платы. Очень радует, что можно заставить крутится независимо колеса правое от левого, т.е. правое может крутиться вперед, а левое назад и при этом можно выставить совершенно любую скорость двум колесам (разворачиваться на месте )...
При чтении из платы первых 32 байт по адресу данных 0x00 получены следующие данные:
********************************* : Read current address
Re: Робот-шпион. Сборка робота. Этап 8. Электронные платы
Контроллер откликается на адрес 0х40. 0х00 левый мотор. 0х01 правый мотор. 0х02 скорость левого мотора. 0х03 скорость правого мотора. 0х04 дистанция. Направление задается в добавочном коде.
Пример посылки команды I2C:
0х40 0х00 0х40 включит левый двигатель вперед на 50% 0х40 0х01 0х40 включит правый двигатель вперед на 50%
0х40 0х00 0хBF включит левый двигатель назад на 50% 0х40 0х01 0хBF включит правый двигатель назад на 50%
0х40 0х02 0х05 задаем скорость левого мотора. 0х40 0х03 0х05 задаем скорость правого мотора. 0х40 0х04 0х0А задаем дистанцию. (робот ее отрабатывает и останавливается).
Последний раз редактировалось Alarus 28 апр 2012, 05:21, всего редактировалось 1 раз.
27 апр 2012, 20:01
emax
Зарегистрирован: 12 апр 2012, 17:28 Сообщения: 41 Откуда: Пермь
Re: Робот-шпион. Сборка робота. Этап 8. Электронные платы
Alarus писал(а):
Не водите людей в заблуждение. Контроллер откликается на адрес 0х80. ........
Вроде по спецификации I2C может адресоваться до 127 устройств, а 0х80 - это 128 ?
Re: Робот-шпион. Сборка робота. Этап 8. Электронные платы
Извиняюсь, значит 0х40, просто я посылаю в двоичном коде вот его адрес 0b10000000. Согласно спецификации I2C самый младший бит посылки отвечает за чтение запись.
28 апр 2012, 05:19
Chemicman
Зарегистрирован: 27 апр 2012, 12:23 Сообщения: 11 Откуда: Москва
Re: Робот-шпион. Сборка робота. Этап 8. Электронные платы
Вот и я то думаю, что не так я сделал, хотел проверить с новым адресом, но потом тоже обратил внимание на то, что 0х80 больше 127. Правда есть и восьми битная адресация, там уже за чтение\запись девятый байт отвечает.
28 апр 2012, 08:06
Chemicman
Зарегистрирован: 27 апр 2012, 12:23 Сообщения: 11 Откуда: Москва
Re: Робот-шпион. Сборка робота. Этап 8. Электронные платы
Ура!!! Я разобрался с командами по I2C. Если нам нужно просто управлять скоростью движков, то адреса 0х00 (левое) и 0х01 (правое), самый старший байт (7) отвечает за направление движение колеса, а остальные скорость. Здесь мы просто задали скорость и направление вращения колеса, и они так и будут крутить, пока не поступит следующая команда.
А вот адреса с 0х02 по 0х04 работают в связке. По адресу 0х02 мы задаем (время выполнения, или расстояние (кому как)) далее в пачке данных по адресам 0х03 (левое) и 0х04 (правое) задается скорость и направление движения (так же как и написано выше), и телега едет заданное время\расстояние по установленным скоростям и направлениям для каждого мотора. Как то так.....
Re: Робот-шпион. Сборка робота. Этап 8. Электронные платы
Я вот так до конца не разобрался с адресами 0х02 0х03 0х04, при записи разных значений так и не могу понять логику работы.
28 апр 2012, 18:16
ASGinfo
Зарегистрирован: 30 апр 2012, 21:25 Сообщения: 1
Re: Робот-шпион. Сборка робота. Этап 8. Электронные платы
Здравствуйте уважаемые Alarus, Chemicman,
Я только успел подключиться осциллографом, сделал осциллограммы, собирался уже импульсы считать, а вы уже с большинством команд разобрались.. Как вам это удалось? Со своего контроллера команды подавали, или как то с компьютера?
Re: Робот-шпион. Сборка робота. Этап 8. Электронные платы
Обнаружил адреса 0х0А 0х0С что то типа шагового режима.
01 май 2012, 08:34
Chemicman
Зарегистрирован: 27 апр 2012, 12:23 Сообщения: 11 Откуда: Москва
Re: Робот-шпион. Сборка робота. Этап 8. Электронные платы
Написал программу для микроконтроллера считывающюю первые 32 байта и увеличивающую номер ID устройства каждый раз и выводящую в сериал порт данные, так при чтении с адреса 0х40 колеса перестали крутиться, а дальше уже подбирал команды.
Re: Робот-шпион. Сборка робота. Этап 8. Электронные платы
Обнаружил следующие адреса при которых моторы начинали крутиться: 0х21 типа командного регистра надо разбираться с битами. 0х33 левое колесо 0х34 правое колесо 0х45 левое колесо 0х46 правое колесо
01 май 2012, 11:41
Chemicman
Зарегистрирован: 27 апр 2012, 12:23 Сообщения: 11 Откуда: Москва
Re: Робот-шпион. Сборка робота. Этап 8. Электронные платы
К выше описанным адресам добавлю еще адрес 0х32 (о нем чуть ниже напишу), более ничего не нашел.
Немного добавлю про то, что выявил: 0х0А и 0х0С - Такое ощущение, что записывая в эти адреса, контроллер отсчитывает число (опираясь на опто-датчики) записанное по адресу и тормозит, что то типа счетчика. При чем, скорость по ходу максимальная. Я думаю, что это регистры корректировки положения телеги.
0х21 - если по этому адресу записываем любое число меньше 0х80 (180 DEC), то движки плавно включаются, а если больше, то плавно выключаются.
Теперь пачка адресов 0х32, 0х33, 0х34 (по аналогии 0х02, 0х03, 0х04): 0х32 - расстояние 0х33 - л.к. 0х34 - пр.к. т.е. пишем в устройство ---- start | ID_UC0 write | 0x32 ( или 0x02) | расстояние | л.к. | пр.к. | stop ГДЕ: ID_UC0 = 0х40; | - ack Замечено, что остановка колес происходит плавно (это зависит от параметра расстояние), чем большее число мы запишем в этот параметр, тем дольше будет движение и плавнее остановка.
0х45 и 0х46 - очень загадочные адреса! После того как с ними поигрался, потом решил задать команду по адресам 0х02 - 0х04, что бы телега проехала и остановилась, она это сделала, но плавно набирая скорость и так же плавно останавливаясь.
Интересны и считанные данные с UC0 по I2C (первые 32 байта), если кому интересно, то могу описать.
Re: Робот-шпион. Сборка робота. Этап 8. Электронные платы
Не знаю, но при одинаковых значениях крутятся на максимальной скорости. Меняешь соотношение например 0х0А и 0х75 левое на минимальной скорости а правое на максимальной. Регистр 0х02 вообще разные значения запихиваю каждый раз разный результат.
02 май 2012, 16:18
Chemicman
Зарегистрирован: 27 апр 2012, 12:23 Сообщения: 11 Откуда: Москва
Re: Робот-шпион. Сборка робота. Этап 8. Электронные платы
Так записывать надо не просто 1 байт по адресу 0х02, а пачку из 3 байт. то есть: немного кода.....
Код:
Wire.beginTransmission(0x40); // Думаю понятно... Wire.write(0x02); //с какого адреса начинаем запись 0х02 Wire.write(data[1]); //первая пачка (как раз адрес 0х02) расстояние Wire.write(data[2]); //вторая пачка (адрес 0х03) левое колесо Wire.write(data[3]); //третья пачка (адрес 0х04) правое колесо Wire.endTransmission(); // конец трансляции
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять Фото