Создание собственной системы стабилизации

SergDoc

Да в исходниках, в бета версии, лежит его схема, я ещё думал что за хрень, без датчиков, только куча разъёмов…

Какие-то изменения по OpenPilot происходят, последний раз обновлял исхдники (всё надеюсь что i2c поправили) - изменения были …

Забавная вещь, на одном контроллере у меня на данный момент работают гиры и аксель, а на втором маг и баро 😃 надо второй перед первым повесить 😃

SergDoc
Sir_Alex:

Хы хы, пока я тут идеи кидал, Китайцы ужо сделали:

Дык это оно и есть Naze 32 без датчиков, пиратить будут 😃

причём написаны датчики которые использует Таймкоп, интересно если я щас драйвер выложу они микруху допишут в поддерживаемые?

Sir_Alex
SergDoc:

причём написаны датчики которые использует Таймкоп, интересно если я щас драйвер выложу они микруху допишут в поддерживаемые?

Так посмотри, у них есть платы с дочерними платами с сенсорами.
rcopen.com/forum/f123/topic281652

Это именно то что я и хотел. В общем, заказал себе вариантик без сенсоров, поставлю на него свою AllInOne… если найду время на это 😃

SergDoc

Схема и платка в орле, есть ошибка с питателями (корпуса меньшие) но запаять можно, так же библиотека с элементами:

SergDoc:

есть ошибка с питателями (корпуса меньшие)

кстати это изъян в стандартных библиотеках орла, вечно косяки какие-то, в стандартном LQFP 48-ног контактные площадки были 0.13мм по ширине, хотя нормально и 0.25 и даже 0.3мм

SergDoc

О блин ST на семинар приглашали:

Free technical seminars

Save weeks of development time by attending a free seminar on the new STM32 F0 MCU based on the ARM® Cortex™-M0 core. Learn more about the features of the ARM® Cortex™-M0 core (system architecture, connectivity interfaces, advanced digital and analog peripherals) and the ecosystem of STM32 F0 microcontroller (development and programming tools, evaluation and development kits, firmware libraries). More

SergDoc

Немного заглядывая вперёд:
STM32F405RGT6
MPU6000
bmp180 ?
HMC5883L ?
FGPMMOPA6B - GPS модуль на MT3329
как-то так

SergDoc

Из приятного, CP2102 дружит с линуксом определяется как TTYUSB 0 без всяких извращений, так что теперь оба контроллера под одной ОС запускаются…

SergDoc

в фотике CANON PC1475 стоят две гиры ENC-03 SMD 😃

IvanDeft
SergDoc:

MPU6000

Заказал себе 6050. Жду когда придет, начну мучать )))

SergDoc

Хватит, и можно клон NAZE 32 сварганить, я просто хочу по SPI, после СС чёт I2C не вставляет, хотя на данный момент вроде без ошибок работает…

Gapey

ну так ставте 6000 и будет SPI … правда они в отличии от 6050 пока в дефиците …

SergDoc

Первый запуск драйвера ничего не дал, не определилась LSMка 😦

SergDoc

аааа, а в автодетект кто править будет:)

SergDoc

Чёт я не могу въехать

 bool ack = false;
    uint8_t sig = 0;

    ack = i2cRead(ADXL345_ADDRESS, 0x00, 1, &sig); // вот тут немогу разобратся что вычитывается из акселя, я так понимаю что и ack и sig присваивается значение 0хЕ5 это id устройства, к чему привязатся в LSM?
    if (!ack || sig != 0xE5) // но тут же неack
        return false;

Аксель определился, но читатся отказывается…

# statusshow
System Uptime: 863 seconds, Voltage: 0 * 0.1V (2S battery)
Detected sensors: ACC BARO MAG   ACCHW: lsm330acc
Cycle Time: 1150, I2C Errors: 0

# 
SergDoc

Беда с автоопределением, я подцепился к первому регистру (он единственный с ненулевыми показаниями) - определился, но что бы аксель заработал, этот регистр программировать надо, а так как я его щас запрограммировал, аксель уже не определяется, бядааа… 😦

да проверил свою догадку, надо искать другой способ автоопределения…

придумал, оси всегда включены, значит надо вычитать, только три младших байта из регистра, они будут всегда постоянны, вопрос как это сделать?

вычитать регистр, сместить <<5 получим число E0 его и примем за сигнатуру?

Можно ли так записать?


ack = i2cRead(LSM330ACC_ADDRESS, LSM330_CTRL_REG1_A << 5, 1, &sig);
rual

Что то у вас всё сложно. В чём смысл идентификации акселя? В том чтобы не заточенную под железо прошиву определить при старте?
Умолчательное значение 00000111b

bool ack = false;
    uint8_t sig = 0;

    ack = i2cRead(ADXL345_ADDRESS, 0x20, 1, &sig); // если я правильно понимаю параметры функции читаем аксель по адресу 0x20

    if (!ack || sig != 0x07) // тут либо NACK, либо  считанное занчение не равно 7
        return false;  

вот вроде так
ps точнее так
ack = i2cRead(LSM330ACC_ADDRESS, LSM330_CTRL_REG1_A, 1, &sig);
сдвигать внутренний адрес акселя не нужно!