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

rual

выкладываю остатки, если вдруг затруднения возникнут

/// это в загловочном файле макросы для фиксации ошибок и2с
typedef enum _IMU_ERR{
LBSY = 0, /* длительная занятость */
OVBUF, /* выход за пределы буфера */
IFERR, /* ошибка интерфейса */
ACKF /* нет ответа ведомого */
}IMU_ERR;
#define IMU_I2C_MAXTIM 250*8 /* макс. занятость интерфейса в микросек. */
#define IMU_I2C_SetErr(Err) {imu_i2c_err|= (1<<Err);}
#define IMU_I2C_ClrErr(Err) {imu_i2c_err&= ~(1<<Err);}
#define IMU_I2C_ClrAllErr() {imu_i2c_err = 0;}
#define IMU_I2C_GetErr() (imu_i2c_err)

typedef enum _IMU_ERR{
LBSY = 0, /* длительная занятость */
OVBUF, /* выход за пределы буфера */
IFERR, /* ошибка интерфейса */
ACKF /* нет ответа ведомого */
}IMU_ERR;
#define IMU_I2C_MAXTIM 250*8 /* макс. занятость интерфейса в микросек. */
#define IMU_I2C_SetErr(Err) {imu_i2c_err|= (1<<Err);}
#define IMU_I2C_ClrErr(Err) {imu_i2c_err&= ~(1<<Err);}
#define IMU_I2C_ClrAllErr() {imu_i2c_err = 0;}
#define IMU_I2C_GetErr() (imu_i2c_err)

/// инициализация и2ц
/* настойка и2ц ИНС */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);
/* Configure I2C1 pins: PB6->SCL and PB7->SDA */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;
GPIO_Init(GPIOB, &GPIO_InitStructure);

I2C_DeInit(I2C_IMU);
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_16_9;
I2C_InitStructure.I2C_OwnAddress1 = 1;
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_ClockSpeed = 100000; /* 100kHz */
I2C_Cmd(I2C_IMU, ENABLE);
I2C_Init(I2C_IMU, &I2C_InitStructure);
/* настройка прерывания И2Ц ИНС */
NVIC_EnableIRQ(I2C1_ER_IRQn);
NVIC_EnableIRQ(I2C1_EV_IRQn);
NVIC_SetPriority(I2C1_EV_IRQn, 5);
/* разрешаем прерывание от и2ц */
I2C_ITConfig(I2C_IMU, I2C_IT_EVT|I2C_IT_BUF|I2C_IT_ERR, ENABLE);

всё это обращается к стандартным перефирийным библиотекам

RaJa
SergDoc:

STM32F103VET6, под него удобное IDE есть и ардупилот32 на нём легче организовать

Подскажите, Сергей, а что за IDE под него. У меня платка усть miniSTM32 STRIVE v2.1, там такой же проц, руки все до нее не доходят никак.

Dimm168pin:

я с орлом после sprint layout вообще не разобрался, в diptrace вроде понемногу освоился, смотрю что вроде такая же ерунда что и с мегами, кварц, пару емкостей и полетели)

А не поделитесь библиотеками компонентов для него? а то в нем даже элементарных вещей часто нет вроде светодиода SMD.

soliada
SergDoc:

Кто-нибудь под мультивий писал код под LSM330DL

Спросите Дмитрия, ник Омегапрайм,он таким датчиком давно пользуется.

rual
SergDoc:

У меня мама оттуда родом

если будете, в наших краях , ссобщите - пообщаемся

SergDoc:

Кто-нибудь под мультивий писал код под LSM330DL, нужен для портирования в NAZE32

я использую LSM330DL, правда у меня с ней глубоко аппаратный обмен, поэтому арду-подобные ИДЕ мне не идут. могу помочь с заголовочным файлом и данными инициализации.

/* умолчантельное заполнение настроечной структуры */
void Gyro::SetDefaultInitStruct(GYRO_CR* gyro_cr)
{
gyro_cr->CTRL_REG1_G = LSM330_G_DR400BW50
+ LSM330_G_PD
+ LSM330_Zen + LSM330_Yen + LSM330_Xen; /* Частота преобразования/ФНЧ1 400/50 Гц все оси вкл. */
gyro_cr->CTRL_REG2_G = LSM330_G_HPM0 + LSM330_G_HPC8; /* ФВЧ нижняя граница 0.1 Гц */
gyro_cr->CTRL_REG3_G = LSM330_G_I2_DRDY; /* вызвать прирывание по готовности данных на I2_DRDY */
gyro_cr->CTRL_REG4_G = LSM330_BDU /*+ LSM330_BLE*/ /* чтение блоком , первый мл.байт */
+ LSM330_G_FS2000; /* предел 2000 гр/с */
gyro_cr->CTRL_REG5_G = 0; /* буфер отключен, ФВЧ и ФНЧ2 отключены */
}
void Accel::SetDefaultInitStruct(ACC_CR* acc_cr)
{
acc_cr->CTRL_REG1_A = LSM330_A_ODR_50
+ LSM330_Zen + LSM330_Yen + LSM330_Xen; /* Частота преобразования 50 Гц все оси вкл.*/
acc_cr->CTRL_REG2_A = 0; /* ФВЧ отключен */
acc_cr->CTRL_REG3_A = LSM330_A_I1_DRDY1; /* прирывание по готовности данных */
acc_cr->CTRL_REG4_A = LSM330_BDU /*+ LSM330_A_HR*/ /* чтение блоком , первый мл.байт */
/*+ LSM330_BLE*/ + LSM330_A_FS16G; /* предел 16G */
acc_cr->CTRL_REG5_A = 0; /* буфер отключен, ФВЧ и ФНЧ2 отключены */
acc_cr->CTRL_REG6_A = 0; /* буфер отключен, ФВЧ и ФНЧ2 отключены */
}

LSM330def.rar

SergDoc

Небольшой предытог: Исправил некоторые кривости в платке псевдо NAZE32 буду изготавливать, сколько не крутил не вертел (три разбитых аппарата) всё равно свернул, хоть и на ARM, но к мультивию, мучения конечно мои ещё незакончены - надо ещё её запустить (детали ещё не отгрузили), дааа заимел хоть и не совсем но CopterControl (его ещё облетать надо, а новые моторы ещё в пути), надеюсь хоть в итоге видео полёта (и одной и днругой платки) будет 😃

SergDoc:

как пообещал знакомый программист не без исключения зачатков искуственного интеллекта (надеюсь)

А вот за это пусть сам программер (Аникейщик блин) и оправдывается 😁

SergDoc

Есть корпуса от НК401, думал туда программатор засунуть, а может сделать IMU и туда запихнуть?

8 days later
SergDoc

Даа ожидание страшная вещь (моторы застряли на таможне), есть некоторое предположение перебросит контроллер который псевдоCopterControl, на мультивий, точнее fy90q с прошивкой baseflight от Таймкопа, но нужна схема этой самой фишки, она в природе существует?

SergDoc

Ну вот собрал пепилац, трёшка - DT700, басики перепрошитые tgy прошивкой, ну и псевдоCopterControl, большОй (500мм радиус между центрами движков) аппарат получился, дома выше экрана поднять не решился, на экране ведёт себя хорошо, жду лётной погоды…

SergDoc

Вчера облетал свою пташку - минус два пропа (не расчитал расстояния влетел в какой-то колючий куст все руки обцарапал пока доставал), немного тянет назат и вправо причём только в висении при полёте как по рельсам, скорей всего надо аксель тщательней калибровать, в висении так же есть проблемы с курсом (при незначительном порыве ветра тут же поворачивает хвостом против ветра - меня как неопытного пилота это давольно сильно напрягает - путаю педали 😃 ), ну тут с гирами надо экспериментировать, коэффициент выставил пока меньше расчётного (шумят), дёрганий впринципе никаких как буд-то прибит в одной плоскости, буду учится летать чтоб хоть на какое видео наскрести 😃

SergDoc

Сегодня баловался с коэффициентами гир, получил более менее приемлимые результаты, но появились осцилляции, теперь уже ПИДами баловаться надо, плохо ветер сильный и аппарат по прежнему тянет назад и вправо, скорей всего у меня ампула уровня приклеена кривовато и есть ощущение что текстолит слегка прогнулся на раме, ну это пока не существенно аппарат не переворачивается, но пока нужно держать на стике воюю дальше…

SergDoc

нахожу знакомые черты:) какой-то сборный прообраз CC, NAZE32 и всё на LSM330 -

www.youtube.com/watch?v=Eop6qx3kjeA

и самое обидное F405 который я так и не купил:(

у кого - нибудь есть инфа по этому делу?

Dimm168pin

вы свое то живое выкладывайте, и видео испытаний) интересно ж)

Dimm168pin
SergDoc:

Да показывать то пока особо нечего 😦
Не ржать!!! летать я не умею!!! надеюсь пока 😃

главное что оно летает) а с пропами беда, могу порекомендовать с himodel 10x4,5 и 12x4.5 , ими можно падать в кусты, стричь траву , декоративные деревца и т.д, 11x4,5 жестче , по этому еще не полностью испытал, только травку стриг, а эти у вас после падения на дерево -2 пропа стекло) у меня так себя вели с HK 10x6, муха села , нет пропа)

кстати 10x4,5 я уронил на даче треху в дерево соседу с высоты метров в 25-30 ,что-то у меня с пидами не заладилось и курс не держал нормально, снял , полетел дальше, все целое)

SergDoc

Это GWSы дешовые пачтой для испытаний - лучше пусть они чем что-нибудь другое, чесно я сейчас совсем на мели, так что рисковать движками или даже профилем (ближайший в Минске) не могу, мне если чесно даже неловко, но нет пока у меня золотого запаса, я из тех беларусов что в статистику непопадают, да и Бентли у меня то же нет(странно а веть должен быть:) )…

Dimm168pin:

могу порекомендовать с himodel 10x4,5 и 12x4.5

да думаю что как раз 12Х4.5 мне и надо, на 700 движках…

SergDoc:

мне если чесно даже неловко, но нет пока у меня золотого запаса, я из тех беларусов что в статистику непопадают, да и Бентли у меня то же нет(странно а веть должен быть )…

Это не к кому не обращаясь просто накатило что-то… блин…

ОФФ ТООП невзначай меня сейчас одна девушка задела, всмысле высшей математики, спросил о квартенионах, сказала что она математик, но о такой х…не не слышала, и даже о Эвклидовом четырёхмернном пространсве, может математика то же по полу различается? 😃

HikeR

очень много “математиков” вполне могли не слышать про катернионы, это всего лишь частный случай гиперкомплексного числа. также математики редко имеют дело с 3D-графикой из которой и выросли все те кватернионы, которые вы имеете ввиду.
я, честно говоря, не вижу причины использовать такое наименование в области стабилизации, более того, все катернионные операции легко заменяются на более понятные матричные 😉

SergDoc
SergDoc:

у кого - нибудь есть инфа по этому делу?

нашел ещё одно видео по этой теме, запущена на CC3D, маг и баро не работают…

с моей штукой которая CC - уже висит, но крутит по курсу - надо постоянно держать стик…

HikeR

CC3D изначально кроме других акселя и гиры ничем не отличался от обычного CC.

HikeR

на видео не CC3D, а исчо один контроллер по мотивам, скоро можно будет сказать “тысячи их…”

адаптировать прошивку CC под чуть-чуть другое железо получилось уже у многих, а вот добавить что-то новое — пока не очень.