ArduCopter Mega: порт на обычную Arduino (тестим)
выставить триммером (ага) на пульте 1500 и перекалибровать радио
Аппы бывают разные, и механически и программно…
Во блин ребята у вас заморочек-то… Я когда с минусами все решил, пиды подкрутил - сразу плетел без всяких виброизоляций, уверенно и четко. Можно было опыты проводить по его бросанию…
Спасибо за отличный проект Олегу!!! И всем кто его продолжает развивать!
С сегодняшнего дня я больше не МегаПират, простите уж 😢
Коптер свой продал в хорошие руки вертолетчика…
Но жизнь не стоит на месте, возможно когда-нибудь вернусь в ряды МегаПиратов…
Конфигурация моего (бывшего) Х коптера:
Движки 1050 KV; Регули 20А; Диаметр по осям движков 420 мм; Винты ЕРР 10х4,5; Мозг Seeeduino Mega + AllInOne; Вес 980г с батареей 3S 3000 мАч; Время спокойного полета 15-18 мин.
Мои настройки для стабрежима рол, питч:
P=0,1
I=0,08
D=0,05
Стабильно летел, не крутился, не качался, на высоте 1м висел как вкопанный, без ветра, с ветром - сносило по ветру. Видео не будет.
Вот.
А кто нибудь вообще знает, какая вибрация безопасна для квадрика?
Ну например, снимаем винты и запускаем двигатели. Квадрик лежит на столе. Колебания датчиков при этом не должны превышать ±50 (при газе от 0 до 100%).
У меня без винтов при максимальном газе колебания датчиков не превышают ±18. Так что, видимо, зря я грешил на сильную вибрацию рамы. То есть либо Глеб прав насчет железных фильтров на гире, либо у меня под платой датчиков хорошая-таки виброизоляция, или и то и другое 😃
ИБО!
Я-таки полетел. С новой рамой - я говорил, деревянную сделал. Правда разворота по YAW при взлете так и не избежал, но если не обращать внимание на этот момент, то вообще-то на подъем даже в квартире идет довольно ровненько, практически не качаясь. Мне (с моим-то отсутствующим опытом пилотирования) даже удалось в комнате немножко повисеть. Впервые!
Но вот на улицу выбежал, а опять засада: пищат регули по диагонали (передний правый и задний левый) будто некалиброванные. С чего бы вдруг? Ну, вернулся домой, проверил все-все контакты, перекалибровал регули - а тут и дождик… Так что опять уличный облет переносится на предстоящие выходные. Но теперь уже нет сомнений, что все пройдет на ура. Ведь поведение в комнате этой версии в отличии от убитой предыдущей в разы стабильнее. Видео только снять некому, да и самостоятельно снять не удается - камера в отъезде, а телефон, стоящий на ребре на столе, просто падает от ветра, когда коптер на взлет идет 😃
Сообщение от SovGVD
забейте на вибрации на мегапирате… и в новом мультивие тоже, на самой гире стоит фильтр железный, который убивает почти всю паразитную вибрацию крутите пиды лучше
Как же убивает, если я на графике вижу ее (В планере, показания сенсоров). Если двигатели не запущены, колебания идут ±20, запускаешь ±100 (цифры условные, я просто сейчас не помню).
Опс… Ну не знаю. У меня, как уже говорил, при включенных на 100% двигателях максимальные колебания в планнере ±18. Когда двигатели стоят, колебания на графиках видно только когда график автоматически начинает увеличивать масштаб и составляют где-то ±6 (ну может 8). Плата AllInOne с модулем GPS, версия на 5 вольт, но запитана все-таки на 3 вольта. Может в этом дело - у тебя какая версия и чем питаешь?
Добавлено:
Если кому интересно:
- двигатели RCtimer 2830-14 (на 750kv) - вот такие _http://www.rctimer.com/index.php?gOo=goods_details.dwt&goodsid=123&productname= - я их пока так и не балансировал пока, может буду а может и обойдусь
- винты оттуда же EPP 10х4.5, брал сразу набор из 12 пар правых-левых вот этот _http://www.rctimer.com/index.php?gOo=goods_details.dwt&goodsid=123&productname= - также не балансированные
- регули опять же оттуда на 30А
- мозг Arduino Mega 1280 (именно ардуина, не седуина, не кардуина, хотя не уверен, что это имеет значение)
- датчики - уже выше писал - 5v. AllInOne + GPS
- акум IMPACT 3S 3300mAh 20C
- рама: центральная пластина из 5(6?) миллиметровой фанеры, лучи из чего-то хвойного 20х20мм, расстояние между валами соседних моторов чуть более 40см (по диагонали между валами ровно 58см), ноги в виде “бублика” из теплоизоляции для труб.
- основной крепеж - пластиковые стяжки, между моторами-регулями и регулями-“повербоардом” никаких коннекторов, все пропаяно
- какая-то банка из Икеи в качестве герметичной кабины-фюзеляжа.
Вот так просто, без изысков - но это рама для освоения-обучения. Для красоты, для души, жду от rc-carbon.com “маленького шпиона” - правда что-то долго жду, что-то там у него случилось. Ну зато я ее и не убью сразу без навыков, а имею время потренироваться на самоделках.
Всего общий взлетный вес выходит 1250гр включая батарею. Прежняя алюминиевая весила на 300 граммов больше, и то взлетала примерно на 60% газа. Эта приподнимается, когда еще до половины газа стик не доходит.
при включенных на 100% двигателях максимальные колебания в планнере ±18.
Тезка, это нормально. У меня 20 тоже показывает и ничего. Там дискрет 6-8 единиц (скачок на графике), т.е. 3 скачка размах. Если настораживает, открой график, выставь частоту обновления 20-50Гц и балансируй движки, включая их по одному на полгаза, наклеивая арм. скотч на края пропов, пока вибрация не будет 1-2 дискрета на каждом. Это вообще идеал.
не должны превышать ±50 (при газе от 0 до 100%). Ставим винты, проделываем то же самое, вибрация не должна превышать ±100
+50 это уже вибростенд фирмы “П…ц”, не уверен, что полетит.
выставить триммером (ага) на пульте 1500 и перекалибровать радио
Извини, может туплю, но хочу уточнить… Верно ли я понял, что надо сделать вот так:
- подключаю коптер к планнеру
- включаю пульт-передатчик
- открываю в программе RAW SENSOR VIEW (и, соответственно, вкладку radio)
- триммирую руль направления (yaw) НА ПЕРЕДАТЧИКЕ до тех пор, пока в программе не увижу 1500 в нейтральном положении стика
- после этого в терминале перекалибровываю радио
Если все так - то после всей этой процедуры триммирование на передатчике оставить или убрать? И если оставить - то для чего тогда перекалибровывать радио?
Аппы бывают разные, и механически и программно…
А это ты о том, что триммировать yaw на передатчике можно не только кнопкой под стиком, но и через настройки сабтриммеров?
триммирование на передатчике оставить или убрать? И если оставить - то для чего тогда перекалибровывать радио?
Оставить, а перекалибровывать заново, чтобы диапазон изменившийся учесть… Я думал ты уже сделал и летать пошел 😃
А это ты о том
Нет, я о том, что в разных аппаратурах даже одной серии при отпущенных стиках и триммере в 0 ширина импульса может быть не 1500, а больше или меньше.
По-хорошему, надо бы “мертвый диапазон” расширить по руддеру в пирате…
сегодня забрал платки для датчиков … завтра попробую напаять и оттестировать …
Я думал ты уже сделал и летать пошел
А у меня понедельник-среда-пятница “присутственные” дни на работе. Так что я торчу в офисе. Тем более, что утром погода была нелетная ну абсолютно - даже в Шереметьево-Домодедово-Внуково самолеты на посадку не шли - уходили на запасные аэродромы. Куда уж мне, любителю, профессиональных пилотов-то переплюнуть???😁
Gapey
сегодня забрал платки для датчиков
Пустые платки продавать будете?
может даже на 38 прошивку…
Поставил 38 прошивку. Квадр переворачивается направо. В чем дело - не пойму. Ставлю прошивку Олега В8 летает как по-рельсам. А ставлю прошивки от Менно (33, 38) квадр тут же переворачивается. Триммирование не помогает. Рама одна и та же. Народ летает на этих прошивках, а я даже взлететь не могу. Хрень какая-то!
Хрень какая-то!
сетап заново? проверить датчики? посмотреть чего показывает в планере?
сетап заново? проверить датчики? посмотреть чего показывает в планере?
А как же? И сетап, и компас, и все остальное. Левел делал. В планере все супер
Пустые платки продавать будете?
будут и пустые платы и готовые … и наборы для самостоятельной сборки в разной комплектации …
Поставил 38 прошивку. Квадр переворачивается направо. В чем дело - не пойму. Ставлю прошивку Олега В8 летает как по-рельсам.
Это знак свыше 😁
Если получится победить, скажи как. Норберт тоже хочет затестить, но кувыркается.
будут и пустые платы и готовые … и наборы для самостоятельной сборки в разной комплектации …
Ну что же, ждёмс.
Если получится победить,
Хватит побед! Я летать хочу!!!
Интересно, где в 38 выбираются датчики? В библиотеке теперь нет.
В библиотеке теперь нет.
Как нет? C:\arduino-0022\libraries\AP_ADC\AP_ADC_ADS7844.cpp Вот здесь.
Наверное у нас разные библиотеки. В библиотеке прошивки 2.0.38 Нет упоминаний Аллинон илиФФМУ.
нас разные библиотеки
Как разные? Я скачивал отсюда www.rcgroups.com/forums/showpost.php?p=18990466&po… . А Ваша откуда? Может по-этому я не могу взлететь?
Странно… Я не там скачивал. И название прошивки Arducopter2.0.38. Там совсем другая библиотека. Похоже это оригинальный у меня релиз, не Мегапиратовский. В их библиотеке совсем нет дефайнов на платы датчиков, у них же своя
/*
AP_ADC_ADS7844.cpp - ADC ADS7844 Library for Ardupilot Mega
Code by Jordi Mu�oz and Jose Julio. DIYDrones.com
Modified by John Ihlein 6 / 19 / 2010 to:
1)Prevent overflow of adc_counter when more than 8 samples collected between reads. Probably
only an issue on initial read of ADC at program start.
2)Reorder analog read order as follows:
p, q, r, ax, ay, az
This library is free software; you can redistribute it and / or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
External ADC ADS7844 is connected via Serial port 2 (in SPI mode)
TXD2 = MOSI = pin PH1
RXD2 = MISO = pin PH0
XCK2 = SCK = pin PH2
Chip Select pin is PC4 (33) [PH6 (9)]
We are using the 16 clocks per conversion timming to increase efficiency (fast)
The sampling frequency is 400Hz (Timer2 overflow interrupt)
So if our loop is at 50Hz, our needed sampling freq should be 100Hz, so
we have an 4x oversampling and averaging.
Methods:
Init() : Initialization of interrupts an Timers (Timer2 overflow interrupt)
Ch(ch_num) : Return the ADC channel value
// HJI - Input definitions. USB connector assumed to be on the left, Rx and servo
// connector pins to the rear. IMU shield components facing up. These are board
// referenced sensor inputs, not device referenced.
On Ardupilot Mega Hardware, oriented as described above:
Chennel 0 : yaw rate, r
Channel 1 : roll rate, p
Channel 2 : pitch rate, q
Channel 3 : x / y gyro temperature
Channel 4 : x acceleration, aX
Channel 5 : y acceleration, aY
Channel 6 : z acceleration, aZ
Channel 7 : Differential pressure sensor port
*/
extern “C” {
// AVR LibC Includes
#include <inttypes.h>
#include <avr/interrupt.h>
#include “WConstants.h”
}
#include “AP_ADC_ADS7844.h”
// Commands for reading ADC channels on ADS7844
static const unsigned char adc_cmd[9] = { 0x87, 0xC7, 0x97, 0xD7, 0xA7, 0xE7, 0xB7, 0xF7, 0x00 };
static volatile uint16_t _filter[8][ADC_FILTER_SIZE];
static volatile uint8_t _filter_index;
static unsigned char ADC_SPI_transfer(unsigned char data)
{
/* Wait for empty transmit buffer */
while ( !( UCSR2A & (1 << UDRE2)) );
/* Put data into buffer, sends the data */
UDR2 = data;
/* Wait for data to be received */
while ( !(UCSR2A & (1 << RXC2)) );
/* Get and return received data from buffer */
return UDR2;
}
ISR (TIMER2_OVF_vect)
{
uint8_t ch;
uint16_t adc_tmp;
//bit_set(PORTL,6); // To test performance
bit_clear(PORTC, 4); // Enable Chip Select (PIN PC4)
ADC_SPI_transfer(adc_cmd[0]); // Command to read the first channel
for (ch = 0; ch < 8; ch++){
adc_tmp = ADC_SPI_transfer(0) << 8; // Read first byte
adc_tmp |= ADC_SPI_transfer(adc_cmd[ch + 1]); // Read second byte and send next command
// Fill our Moving average filter
_filter[ch][_filter_index] = adc_tmp >> 3;
}
// increment our filter
_filter_index++;
// loop our filter
if(_filter_index == ADC_FILTER_SIZE)
_filter_index = 0;
bit_set(PORTC, 4); // Disable Chip Select (PIN PC4)
//bit_clear(PORTL,6); // To test performance
TCNT2 = 104; // 400 Hz
}
// Constructors ////////////////////////////////////////////////////////////////
AP_ADC_ADS7844::AP_ADC_ADS7844()
{
}
// Public Methods //////////////////////////////////////////////////////////////
void AP_ADC_ADS7844::Init(void)
{
pinMode(ADC_CHIP_SELECT, OUTPUT);
digitalWrite(ADC_CHIP_SELECT, HIGH); // Disable device (Chip select is active low)
// Setup Serial Port2 in SPI mode
UBRR2 = 0;
DDRH |= (1 << PH2); // SPI clock XCK2 (PH2) as output. This enable SPI Master mode
// Set MSPI mode of operation and SPI data mode 0.
UCSR2C = (1 << UMSEL21) | (1 << UMSEL20); // |(0 << UCPHA2) | (0 << UCPOL2);
// Enable receiver and transmitter.
UCSR2B = (1 << RXEN2) | (1 << TXEN2);
// Set Baud rate
UBRR2 = 2; // SPI clock running at 2.6MHz
// Enable Timer2 Overflow interrupt to capture ADC data
TIMSK2 = 0; // Disable interrupts
TCCR2A = 0; // normal counting mode
TCCR2B = _BV(CS21) | _BV(CS22); // Set prescaler of 256
TCNT2 = 0;
TIFR2 = _BV(TOV2); // clear pending interrupts;
TIMSK2 = _BV(TOIE2) ; // enable the overflow interrupt
}
// Read one channel value
int AP_ADC_ADS7844::Ch(unsigned char ch_num)
{
uint16_t result = 0;
//while(adc_counter[ch_num] < 2) { } // Wait for at least 2 samples in accumlator
// stop interrupts
cli();
// sum our filter
for(uint8_t i = 0; i < ADC_FILTER_SIZE; i++){
result += _filter[ch_num][i];
}
// resume interrupts
sei();
// average our sampels
result /= ADC_FILTER_SIZE;
return(result);
}
// Read one channel value
int AP_ADC_ADS7844::Ch_raw(unsigned char ch_num)
{
return _filter[ch_num][_filter_index]; // close enough
}
Пришу прощения за путаницу!
Это я маху дал, похоже, а у Вас правильная прошивка. Буду пробовать Вашу.