Стабилизация Активная - часть II

 
1 69 70 71 72 73 88
UA Non-conformist #18.02.2012 11:52  @Андрей Суворов#18.02.2012 11:23
+
-
edit
 

Non-conformist

аксакал

Понятно. У нашего L3G4200D самый чувственный диапазон 250 dps (x 3 axis x I2C).

А.С.> В Лабвью ...

Тут тоже про это приложение упоминается:

Много про фильтр Калмана и проч. Чистая конкретика, куски ардуинского кода. Если хотим чего-то реального добиться - читать всем заинтересованным лицам!
Skype: a_schabanow  
RU Андрей Суворов #18.02.2012 12:11  @Non-conformist#18.02.2012 11:52
+
-
edit
 

Андрей Суворов

координатор

Non-conformist> Понятно. У нашего L3G4200D самый чувственный диапазон 250 dps (x 3 axis x I2C).
У АД-шных гироскопов более распространён SPI. Самые поздние чипы поддерживают и то, и другое на выбор. 250 или 300 градусов в секунду - самый востребованный диапазон для MEMS гироскопов, на более низких они себя чувствуют неуверенно :) шумы и дрейф сказываются.

А.С.>> В Лабвью ...
Non-conformist> Тут тоже про это приложение упоминается:
Non-conformist> DC motor control with PID - Arduino Forum
Non-conformist> Много про фильтр Калмана и проч. Чистая конкретика, куски ардуинского кода. Если хотим чего-то реального добиться - читать всем заинтересованным лицам!

Фильтр Калмана я так до конца и не вкурил. Смысл его, в основном, в том, что мы считаем срабатывание контакта подъёма гораздо более точным, чем начало движения по МЕМС акселерометру. Т.е. мы априорно знаем, что ракета до КП покоится, продольная ось её вертикальна, ускорение и угловые скорости ограничены, как сверху, так иногда и снизу, а, значит, обрабатывая данные с гироскопов и акселерометров фильтром Калмана, мы получаем более точные сведения за счёт того, что в момент КП они (эти сведения) были абсолютно точными.
 9.09.0
RU shadowjack #18.02.2012 17:47
+
-
edit
 

shadowjack

втянувшийся
Non-conformist, убери пожалуйста задержку delay(5); в файле E24C1024.cpp и попробуй прогнать тест.
 5.0.15.0.1
UA Non-conformist #18.02.2012 17:51  @shadowjack#18.02.2012 17:47
+
-
edit
 

Non-conformist

аксакал

shadowjack> Non-conformist, убери пожалуйста задержку delay(5); в файле E24C1024.cpp и попробуй прогнать тест.
Пробую.

***
Вот ещё что нашёл: pololu/MinIMU-9-Arduino-AHRS - GitHub
Скетч для Ардуино-совместимой платы-носителя с L3G4200D, акселерометром (не LIS331D) и магнетометром. На выходе Ардуина выдаёт абсолютную ориентацию в пространстве. Магнетометр не нужен - может остальное будет полезным...
Skype: a_schabanow  
RU shadowjack #18.02.2012 18:03  @Non-conformist#18.02.2012 17:51
+
-
edit
 

shadowjack

втянувшийся
Non-conformist> На выходе Ардуина выдаёт абсолютную ориентацию в пространстве. Магнетометр не нужен - может остальное будет полезным...
Без магнетометра не будет абсолютного положения. Вообще, такое впечатление, что мы побежали во все стороны одновременно. Давайте сосредоточимся на первоначальной задаче.
 5.0.15.0.1
UA Non-conformist #18.02.2012 18:17  @Non-conformist#18.02.2012 17:51
+
-
edit
 

Non-conformist

аксакал

Первоначальная задача - получить непадающую палку. Роботы-балансеры - это имхо та же непадающая палка, только у нас привод другой - реактивный. Я думал, что оттуда есть что взять в смысле софта - задачи-то совершенно одинаковые... Я говорю про ссылки, которые я приводил в конце предыдущей страницы. Но гироскопы там другие; т.е. последняя ссылка - это попытка подобрать пример готового кода как можно ближе к нашему железу.

***
Попробовал. Скорость записи увеличилась - теперь показывает 3855 операций в секунду. Тест чтения не проходит - получается бесконечный процесс, вверх убегает столбец вида
Address: 13 Should be: 13 Read val: 1
...
И так далее (20 20 2; 27 27 3 - до бесконечности, пока не закроешь монитор).
Skype: a_schabanow  
UA Non-conformist #18.02.2012 18:33  @Non-conformist#18.02.2012 18:17
+
-
edit
 

Non-conformist

аксакал

Если выставить delay(1), то скорость записи получается 732 операций в секунду. С чтением - та же картина. Если в скобках ничего не писать - при компиляции вылазит ошибка, если убрать строчку совсем - тоже ничего хорошего не получается (конкретную картину не помню).
Skype: a_schabanow  
RU shadowjack #18.02.2012 19:21  @Non-conformist#18.02.2012 18:33
+
-
edit
 

shadowjack

втянувшийся
Non-conformist> Если выставить delay(1), то скорость записи получается 732 операций в секунду. С чтением - та же картина. Если в скобках ничего не писать - при компиляции вылазит ошибка, если убрать строчку совсем - тоже ничего хорошего не получается (конкретную картину не помню).
Попробуй заменить метод записи на такой и прогнать тест:
void E24C1024::write(unsigned long dataAddress, uint8_t data)
{
do{
Wire.beginTransmission((uint8_t)((0x500000 | dataAddress) >> 16)); // B1010xxx
Wire.write((uint8_t)((dataAddress & WORD_MASK) >> 8)); // MSB
Wire.write((uint8_t)(dataAddress & 0xFF)); // LSB
Wire.write(data);
}while(Wire.endTransmission() != 0);
}
 5.0.15.0.1
UA Non-conformist #18.02.2012 19:36  @shadowjack#18.02.2012 19:21
+
-
edit
 

Non-conformist

аксакал

Тест прошёл нормально. Запись 520, чтение 1579.
Skype: a_schabanow  
RU shadowjack #18.02.2012 20:06  @Non-conformist#18.02.2012 19:36
+
-
edit
 

shadowjack

втянувшийся
Non-conformist> Тест прошёл нормально. Запись 520, чтение 1579.
О, вот это уже неплохо.
 5.0.15.0.1
UA Non-conformist #18.02.2012 20:10  @shadowjack#18.02.2012 20:06
+
-
edit
 

Non-conformist

аксакал

Ты хочешь писать именно побайтно, чтобы не забирать ОЗУ МК под буфер для постраничной записи?
Skype: a_schabanow  
UA Ckona #18.02.2012 20:10  @Non-conformist#18.02.2012 18:17
+
-
edit
 

Ckona

опытный
★☆
Non-conformist> Первоначальная задача - получить непадающую палку.

Это тоже расширенная задача.
Я бы простейшую задачу обозначил так:
"Ящик, который пускает ток по достижении пороговых величин, измеряя угловые скорости и вычисляя углы, по двум координатам."

Решая эту задачу, получили "Ардуиноскоп" - гораздо более универсальный ящик.
Насколько реальны шансы изготовить второй шилд на протяжении марта ?
 
UA Non-conformist #18.02.2012 20:12  @shadowjack#18.02.2012 20:06
+
-
edit
 

Non-conformist

аксакал

Ты хочешь писать именно побайтно, чтобы не забирать ОЗУ МК под буфер для постраничной записи?
Skype: a_schabanow  
RU shadowjack #18.02.2012 20:21  @Non-conformist#18.02.2012 20:12
+
-
edit
 

shadowjack

втянувшийся
Non-conformist> Ты хочешь писать именно побайтно, чтобы не забирать ОЗУ МК под буфер для постраничной записи?
Нет, я постепенно проясняю не ясные для себя моменты работы данного ППЗУ, которые меня заинтересовали просле прочтения даташита.

Тихо, тихо ползи,
Улитка, по склону Фудзи
Вверх, до самых высот!

Вот набросал тест страничной записи - не знаю, скомпилируется ли, у меня комп по-прежденму в раздрае и ардуино не работает.
Прикреплённые файлы:
 
 5.0.15.0.1
RU shadowjack #18.02.2012 20:22  @shadowjack#18.02.2012 20:21
+
-
edit
 

shadowjack

втянувшийся
И еще.
Прикреплённые файлы:
E24C1024.h (скачать) [1,93 кБ]
 
 
 5.0.15.0.1
UA Non-conformist #18.02.2012 20:44  @shadowjack#18.02.2012 20:21
+
-
edit
 

Non-conformist

аксакал

shadowjack> Тихо, тихо ползи,
shadowjack> Улитка, по склону Фудзи
shadowjack> Вверх, до самых высот!

Нет.


***
Ползет улитка
по склону Фудзи,
Все выше, выше
по склону лезет.
Ползут за нею
два самурая
И их вассалы,
полны отваги,
Чтоб там сразиться,
за что - не ясно.
Решат на месте,
ведь повод к драке
Найти не сложно...
За ними, прячась
В тени драконов,
ползут шпионы.
Все друг за другом
следят серьезно, -
От них не скрыться
ни самураям,
Ни той улитке,
что перед всеми
Ползет все выше,
не пряча рожек!
Рожденный ползать -
штурмует Фудзи!
Ползти рожденный -
восходит в гору!..
Ползут туда же
четыре гейши,
У каждой веер
с рисунком солнца,
Ползут и ниндзя,
и камикадзе,
Ползут крестьяне
с плантаций риса,
Водой залитых -
чтоб не засохли.
И сумоисты,
тяжелым шагом,
Пыхтят, но лезут,
теряя в весе...
Шаман крадется,
сломав свой бубен
Большою палкой,
и два монаха
Твердя молитвы
во славу Будде,
Ползут туда же -
на Фудзияму...

Подумать страшно:
а вдруг улитка
Ползти не сможет?!
Заснет мгновенно
И спрячет рожки,
и слизью тела
Заполнит домик?...
Тогда сорвутся
С вершины Фудзи
два самурая
и их вассалы,
и три дракона,
и пять шпионов,
и сумоисты,
Гремя костями,
подобно скалам,
Катиться станут,
давя шамана,
И двух монахов
с молитвой к Будде...
Все в землю ляжет,
все прахом будет...

Ползи ж, улитка!
Ползи по склону!
Не уставая, -
все выше, выше! -
Пока не станешь
звездой на небе.
Ползи, улитка!
Skype: a_schabanow  
UA Non-conformist #18.02.2012 20:54  @Non-conformist#18.02.2012 20:44
+
-
edit
 

Non-conformist

аксакал

По первому варианту:
'Class E24C1024'has no member named 'write page'
Вот так-то...

зы: в слове 'address' надо писать 'dd'.
Skype: a_schabanow  
RU shadowjack #18.02.2012 21:03  @Non-conformist#18.02.2012 20:54
+
-
edit
 

shadowjack

втянувшийся
Non-conformist> По первому варианту:
Non-conformist> 'Class E24C1024'has no member named 'write page'
Non-conformist> Вот так-то...
Non-conformist> зы: в слове 'address' надо писать 'dd'.
Копируюй ошибки полностью, я все же не телепат 8)
 5.0.15.0.1
RU shadowjack #18.02.2012 21:07  @Non-conformist#18.02.2012 20:54
+
-
edit
 

shadowjack

втянувшийся
Non-conformist> По первому варианту:
это не варианты, нужно все 3 файла заменить - 2 в библиотеке и 1 в примере. Это "комплект".
 5.0.15.0.1
UA Non-conformist #18.02.2012 22:27  @shadowjack#18.02.2012 21:03
+
-
edit
 

Non-conformist

аксакал

shadowjack> Копируюй ошибки полностью, я все же не телепат 8)
Не могу, не работает в том окошке копипаст. Вручную переписываю - ОЦЕНИ. Разве что принтскрином...
Skype: a_schabanow  
RU shadowjack #18.02.2012 22:56  @Non-conformist#18.02.2012 22:27
+
-
edit
 

shadowjack

втянувшийся
Non-conformist> Не могу, не работает в том окошке копипаст. Вручную переписываю - ОЦЕНИ. Разве что принтскрином...
Конечно, давай принтскрином. Завтра постораюсь комп починить, чтобы хотя бы тривиальные ошибки выцеплять.
 5.0.15.0.1
UA Non-conformist #18.02.2012 23:04  @Non-conformist#18.02.2012 22:27
+
-
edit
 

Non-conformist

аксакал

Строчка 78 в .cpp - посмотри внимательно, что-то компилятор ругается. Закрывающей скобки якобы не хватает. Я там уже поправил несколько ошибок, привёл эту строчку в соответствие с такой же в блоке записи. Сейчас обе они выглядят одинаково:

67 Wire.write((uint8_t)(data address & 0xFF)); // LSB

...

78 Wire.write((uint8_t)(data address & 0xFF)); // LSB

Но всё равно пишет ошибку в строке 78: 'expected ')' before 'address'
Я ставил эту скобку - пишет другую ошибку... Короче глюк дебугера какой-то по-моему. Не туда ведёт. Ты посмотри внимательно в этом месте.

Перед этим исправлял 'adress' на 'address' и 'dataAddress' на 'data address'. Иначе писал ошибку, что нет такой переменной. После исправления эти строчки захавал...

***
Разговор немого с глухим, короче. Непродуктивно работаем...
Skype: a_schabanow  
UA Non-conformist #18.02.2012 23:07  @Non-conformist#18.02.2012 23:04
+
-
edit
 

Non-conformist

аксакал

Давай уже завтра принтскрином. Что-то притомился, пора отдыхать.
Skype: a_schabanow  
RU shadowjack #18.02.2012 23:47  @Non-conformist#18.02.2012 23:04
+
-
edit
 

shadowjack

втянувшийся
Non-conformist> 67 Wire.write((uint8_t)(data address & 0xFF)); // LSB
Non-conformist> ...
Non-conformist> 78 Wire.write((uint8_t)(data address & 0xFF)); // LSB
не поправил, а сломал.
Должно быть так (как и было):
67 Wire.write((uint8_t)(dataAddress & 0xFF)); // LSB
78 Wire.write((uint8_t)(dataAddress & 0xFF)); // LSB
А ошибка была тут (опять адрес с одной д написал, должно быть так):
63 int8_t E24C1024::write_page(unsigned long dataAddress, byte *data, int dataSize){
 5.0.15.0.1
AD Реклама Google — средство выживания форумов :)
UA Non-conformist #18.02.2012 23:59  @shadowjack#18.02.2012 23:47
+
-
edit
 

Non-conformist

аксакал

Скомпилилось. Скорость записи 10922. Чтение - та же картина, что я описывал выше: бесконечный столбец, убегающий вверх:

Address: 0 Should be: 0 Read val: 4
Address: 30 Should be: 30 Read val: 6
Address: 31 Should be: 31 Read val: 7
Address: 32 Should be: 32 Read val: 8

и т.д.
Skype: a_schabanow  
1 69 70 71 72 73 88

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru