Lagman 1 9 июня, 2018 Опубликовано 9 июня, 2018 · Жалоба Гироскутеры на них не просто бегают, они на них равновесие держат. Именно этим определяется необходимость в датчиках Холла. Мне кажется для этих дел уже давно гироскопы используют. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 9 июня, 2018 Опубликовано 9 июня, 2018 · Жалоба Гироскутеры на них не просто бегают, они на них равновесие держат. Именно этим определяется необходимость в датчиках Холла. д.Холла - именно только для определения положения ротора. Для определения наклона доски - гироскоп. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lagman 1 9 июня, 2018 Опубликовано 9 июня, 2018 · Жалоба д.Холла - именно только для определения положения ротора. Для определения наклона доски - гироскоп. Зачем дублировать одну и ту же информацию? Это же не робот у которого надо знать положение колесика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
murmur 0 9 июня, 2018 Опубликовано 9 июня, 2018 · Жалоба д.Холла - именно только для определения положения ротора. Для определения наклона доски - гироскоп. Я предельно ясно выразилась - "держат равновесие". Гироскоп определяет наклон. А Холлы - держат Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lagman 1 9 июня, 2018 Опубликовано 9 июня, 2018 · Жалоба Читать много лень. :) Для авиа-назначения, можно считать, что нагрузка примерно постоянна (вентиляторная нагрузка)? И можно обойтись без обратной связи? Если так, то можно и синусным ШИМом по-управлять, заранее зная параметры инерции вала с пропеллером. Но ТС ведь хочет этот моторчик для авто применить. А там уже так не поработать. Обратная связь по положению ротора нужна. И самое простое тут - датчики Холла :laughing: На 3d rc вертолетах во всю используют гувернер оборотов (система поддержания постоянных оборотов) либо в регуляторе либо в flybarless system (ФБЛке), если гувернер используют в ФБЛке то, сейчас, обычно берут (цифру) с регулятора, либо используют датчик оборотов в простом случае это припаянные провода на два провода из трех от регулятора к двигателю. В rc автомобилях, я не знаю, может тоже есть регуляторы оборотов но по моему они там сильно не нужны ведь в руках джойстик и там есть газ, им и можно держать обороты т.е. скорость. Я предельно ясно выразилась - "держат равновесие". Гироскоп определяет наклон. А Холлы - держат Сделайте простой опыт поставьте на гироскутер мешок картошки и посмотрите как гироскутер будет держать равновесие. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 9 июня, 2018 Опубликовано 9 июня, 2018 · Жалоба Я предельно ясно выразилась - "держат равновесие". Гироскоп определяет наклон. А Холлы - держат Тогда уж скорее мотор "держит". Или управляющее ПО. Но не Холлы. :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lagman 1 9 июня, 2018 Опубликовано 9 июня, 2018 · Жалоба Тут недавно была информация про плату https://www.terraelectronica.ru/news/4985?u...icroelectronics Вот к ней почти все доступно и исходники и плата. Можно посмотреть что и как реализовано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 9 июня, 2018 Опубликовано 9 июня, 2018 · Жалоба Зачем дублировать одну и ту же информацию? Это же не робот у которого надо знать положение колесика. Вы о чём? :wacko: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lagman 1 9 июня, 2018 Опубликовано 9 июня, 2018 · Жалоба Вы о чём? :wacko: О том что для удержания площадки гироскопа в горизонтальном положении не надо дополнительно никаких датчиков Холла, достаточно гироскопа на самой площадке, ведь там не важно 5 или 10 см он отъедет в сторону для самовыравнивания. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 9 июня, 2018 Опубликовано 9 июня, 2018 · Жалоба О том что для удержания площадки гироскопа в горизонтальном положении не надо дополнительно никаких датчиков Холла, достаточно гироскопа на самой площадке, ведь там не важно 5 или 10 см он отъедет в сторону для самовыравнивания. Вы мне то это зачем пишете? Я разве писал, что д.Холла для определения наклона? Почитайте мои сообщения.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
murmur 0 9 июня, 2018 Опубликовано 9 июня, 2018 · Жалоба Может вы не будете спорить, а ответите мне про deadtime? Вопрос был на предыдущей странице в конце Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 9 июня, 2018 Опубликовано 9 июня, 2018 · Жалоба Может вы не будете спорить, а ответите мне про deadtime? Вопрос был на предыдущей странице в конце Во-первых: у меня например это только первая страница. Размер страниц тут у всех свой. :laughing: А во-вторых: почему отсутствует? Вы на процедуру commutation() внимательно посмотрите. Где там верхний и нижний ключи пересекаются? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lagman 1 9 июня, 2018 Опубликовано 9 июня, 2018 · Жалоба Еще можете посмотреть исходники BLHeli https://github.com/bitdump/BLHeli , популярная открытая прошивка для регуляторов (авиа: дроны, вертолеты). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
murmur 0 10 июня, 2018 Опубликовано 10 июня, 2018 (изменено) · Жалоба Что-то не получается у меня с ЭДС. Господа, взгляните на схему цепочки детектирования в статье в первом сообщении, на ту же схему, но выложенную мной в PDF и скажите, будет ли отличаться алгоритм работы с компаратором? У меня ЭДС детектируется, прерывание срабатывает где надо (хотя впрочем, посмотрите на осциллограмму и оцените). Но двигатель пищит и не стартует. ОСЦИЛЛОГРАММА - красный график - вход компаратора, синий - строка PORTD.3=~PORTD.3 в самом начале обработчика прерывания от компаратора, чтобы понять, в какой момент времени он срабатывает. Код (мне его пришлось переделать) привожу #include <mega8.h> #include <delay.h> // Фаза U(Верхнее плечо) #define UH_ON PORTD.4=1; #define UH_OFF PORTD.4=0; // Фаза U(Нижнее плечо) #define UL_ON PORTD.5=1; #define UL_OFF PORTD.5=0; // Фаза V(Верхнее плечо) #define VH_ON PORTC.5=1; #define VH_OFF PORTC.5=0; // Фаза V(Нижнее плечо) #define VL_ON PORTC.4=1; #define VL_OFF PORTC.4=0; // Фаза W(Верхнее плечо) #define WH_ON PORTC.3=1; #define WH_OFF PORTC.3=0; // Фаза W(Нижнее плечо) #define WL_ON PORTB.0=1; #define WL_OFF PORTB.0=0; #define PHASE_ALL_OFF UH_OFF;UL_OFF;VH_OFF;VL_OFF;WH_OFF;WL_OFF; #define SENSE_U ADMUX = 6; // Вход обратной ЭДС фазы U #define SENSE_V ADMUX = 7; // Вход обратной ЭДС фазы V #define SENSE_W ADMUX = 0; // Вход обратной ЭДС фазы W #define SENSE_UVW (ACSR&(1 << ACO)) // Выход компаратора #define START_PWM 10 // Минимальный ШИМ при запуске #define WORK_PWM 100 // Рабочий уровень ШИМ unsigned char start_stop = 0; unsigned char current_phase = 0; volatile unsigned char motor_pwm = WORK_PWM; volatile unsigned char commutation_step = 0; volatile unsigned char rotor_run = 0; // Счетчик импульсов обратной ЭДС // Крутим по часовой стрелке void commutation(unsigned char startup) { switch (commutation_step) { case (0): if(!SENSE_UVW || startup) { UH_ON; // На фазе U - ШИМ WH_OFF; // Фаза W отключена SENSE_W; // Активируем вход фазы W commutation_step = 1; // Следующий шаг TCNT0 = 0; // Обнуляем счетчик T0 } break; case (1): if(SENSE_UVW || startup) { VL_OFF; // На фазе V - лог. 0 WL_ON; // На Фазе W - лог. 1 SENSE_V; // Активируем вход фазы V commutation_step = 2; TCNT0 = 0; // Обнуляем счетчик T0 } break; case (2): if(!SENSE_UVW || startup) { UH_OFF; // Фаза U отключена VH_ON; // На фазе V - ШИМ SENSE_U; // Активируем вход фазы U commutation_step = 3; TCNT0 = 0; // Обнуляем счетчик T0 } break; case (3): if(SENSE_UVW || startup) { UL_ON; // На фазе U - лог. 1 WL_OFF; // На Фаза W - лог. 0 SENSE_W; // Активируем вход фазы W commutation_step = 4; TCNT0 = 0; // Обнуляем счетчик T0 } break; case (4): if(!SENSE_UVW || startup) { VH_OFF; // Фаза V отключена WH_ON; // На фазе W - ШИМ SENSE_V; // Активируем вход фазы V commutation_step = 5; TCNT0 = 0; // Обнуляем счетчик T0 } break; case (5): if(SENSE_UVW || startup) { UL_OFF; // На фазе U - лог. 0 VL_ON; // На Фазе V - лог. 1 SENSE_U; // Активируем вход фазы U commutation_step = 0; TCNT0 = 0; // Обнуляем счетчик T0 } break; } } // Обработчик прерывания по компаратору. Детектор обратной ЭДС // Analog Comparator interrupt service routine interrupt [ANA_COMP] void ana_comp_isr(void) { PORTD.3=~PORTD.3; rotor_run++; // инкрементируем импульсы if(rotor_run > 200) rotor_run = 200; if(rotor_run == 200) // Если импульсы обратной ЭДС присутствуют, крутим наполную { commutation(0); } } // Обработчик прерывания по переполнению Т0. Работа двигателя без сигналов обратной ЭДС interrupt [TIM0_OVF] void timer0_ovf_isr(void) { commutation(1); // Если сработало прерывание, есть пропуски импульсов обратной ЭДС rotor_run = 0; // Сбрасываем счетчик импульсов } // Timer2 overflow interrupt service routine interrupt [TIM2_OVF] void timer2_ovf_isr(void) { /* // // ЭТО ПОПЫТКА СДЕЛАТЬ ПРОГРАМНМНЫЙ ШИМ, РАЗБЕРУСЬ ПОТОМ if (commutation_step==0) UH_ON; if (commutation_step==2) VH_ON; if (commutation_step==4) WH_ON; */ } // Timer2 output compare interrupt service routine interrupt [TIM2_COMP] void timer2_comp_isr(void) { // ЭТО ПОПЫТКА СДЕЛАТЬ ПРОГРАМНМНЫЙ ШИМ, РАЗБЕРУСЬ ПОТОМ /* if (commutation_step==0) UH_OFF; if (commutation_step==2) VH_OFF; if (commutation_step==4) WH_OFF; */ } void main(void) { // Порты ввода/вывода DDRD.4=1; // UH DDRD.5=1; // UL DDRC.5=1; // VH DDRC.4=1; // VL DDRC.3=1; // WH DDRB.0=1; // WL DDRD.3=1; PORTD.3=0; /* while(1) { PORTD.4=1; // UH PORTD.5=0; // UL PORTC.5=1; // VH PORTC.4=0; // VL PORTC.3=1; // WH PORTB.0=0; // WL delay_ms(10); PORTD.4=0; // UH PORTD.5=0; // UL PORTC.5=0; // VH PORTC.4=0; // VL PORTC.3=0; // WH PORTB.0=0; // WL delay_ms(10); } */ // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: 15,625 kHz // Mode: Normal top=0xFF // OC2 output: Disconnected ASSR=0x00; TCCR2=0x02; OCR2=20; // T0 - для старта и работы двигателя без сигналов обратной ЭДС TCCR0=0x05; TIMSK |= (1 << TOIE0)| (1 << TOIE2)|(1 << OCIE2); // Разрешаем прерывание по переполнению T0 PHASE_ALL_OFF; // Выключаем все фазы // Аналаговый компаратор ADCSRA &= ~(1 << ADEN); // Выключаем АЦП SFIOR |= (1 << ACME); // Отрицательный вход компаратора подключаем к выходу мультиплексора АЦП ACSR |= (1 << ACIE); // Разрешаем прерывания от компаратора #asm("sei") // Глобально разрешаем прерывания start_stop=1; if(start_stop) { ACSR |= (1 << ACIE); // Разрешаем прерывание от компаратора TIMSK |= (1 << TOIE0)| (1 << TOIE2)|(1 << OCIE2); // Разрешаем прерывание по переполнению T0 if(rotor_run == 200) // Если импульсы обратной ЭДС присутствуют, можем менять ШИМ { // OCR2=0x0F; } } else { PHASE_ALL_OFF; // Все фазы выключены ACSR &= ~(1 << ACIE); // Запрещаем прерывание от компаратора TIMSK &= ~(1 << TOIE0); // Запрещаем прерывание по переполнению T0 } } Изменено 10 июня, 2018 пользователем murmur Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lagman 1 10 июня, 2018 Опубликовано 10 июня, 2018 · Жалоба А если помочь рукой прокрутить, стартует? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться