реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Детекция ЭДС в регуляторе бесколлекторного двигателя.
Lagman
сообщение Jun 9 2018, 13:37
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Цитата(murmur @ Jun 9 2018, 14:29) *
Гироскутеры на них не просто бегают, они на них равновесие держат. Именно этим определяется необходимость в датчиках Холла.


Мне кажется для этих дел уже давно гироскопы используют.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 9 2018, 14:14
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 5 209
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(murmur @ Jun 9 2018, 14:29) *
Гироскутеры на них не просто бегают, они на них равновесие держат. Именно этим определяется необходимость в датчиках Холла.

д.Холла - именно только для определения положения ротора. Для определения наклона доски - гироскоп.
Go to the top of the page
 
+Quote Post
Lagman
сообщение Jun 9 2018, 14:24
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Цитата(jcxz @ Jun 9 2018, 17:14) *
д.Холла - именно только для определения положения ротора. Для определения наклона доски - гироскоп.

Зачем дублировать одну и ту же информацию? Это же не робот у которого надо знать положение колесика.
Go to the top of the page
 
+Quote Post
murmur
сообщение Jun 9 2018, 14:26
Сообщение #19


Местный
***

Группа: Участник
Сообщений: 425
Регистрация: 30-04-11
Пользователь №: 64 708



Цитата(jcxz @ Jun 9 2018, 17:14) *
д.Холла - именно только для определения положения ротора. Для определения наклона доски - гироскоп.

Я предельно ясно выразилась - "держат равновесие". Гироскоп определяет наклон. А Холлы - держат
Go to the top of the page
 
+Quote Post
Lagman
сообщение Jun 9 2018, 14:39
Сообщение #20


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Цитата(jcxz @ Jun 9 2018, 13:33) *
Читать много лень. sm.gif
Для авиа-назначения, можно считать, что нагрузка примерно постоянна (вентиляторная нагрузка)? И можно обойтись без обратной связи? Если так, то можно и синусным ШИМом по-управлять, заранее зная параметры инерции вала с пропеллером.
Но ТС ведь хочет этот моторчик для авто применить. А там уже так не поработать. Обратная связь по положению ротора нужна. И самое простое тут - датчики Холла laughing.gif

На 3d rc вертолетах во всю используют гувернер оборотов (система поддержания постоянных оборотов) либо в регуляторе либо в flybarless system (ФБЛке), если гувернер используют в ФБЛке то, сейчас, обычно берут (цифру) с регулятора, либо используют датчик оборотов в простом случае это припаянные провода на два провода из трех от регулятора к двигателю.
В rc автомобилях, я не знаю, может тоже есть регуляторы оборотов но по моему они там сильно не нужны ведь в руках джойстик и там есть газ, им и можно держать обороты т.е. скорость.


Цитата(murmur @ Jun 9 2018, 17:26) *
Я предельно ясно выразилась - "держат равновесие". Гироскоп определяет наклон. А Холлы - держат

Сделайте простой опыт поставьте на гироскутер мешок картошки и посмотрите как гироскутер будет держать равновесие.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 9 2018, 15:03
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 5 209
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(murmur @ Jun 9 2018, 17:26) *
Я предельно ясно выразилась - "держат равновесие". Гироскоп определяет наклон. А Холлы - держат

Тогда уж скорее мотор "держит". Или управляющее ПО. Но не Холлы. laughing.gif
Go to the top of the page
 
+Quote Post
Lagman
сообщение Jun 9 2018, 15:04
Сообщение #22


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Тут недавно была информация про плату https://www.terraelectronica.ru/news/4985?u...icroelectronics
Вот к ней почти все доступно и исходники и плата.
Можно посмотреть что и как реализовано.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 9 2018, 15:04
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 5 209
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Lagman @ Jun 9 2018, 17:24) *
Зачем дублировать одну и ту же информацию? Это же не робот у которого надо знать положение колесика.

Вы о чём? wacko.gif
Go to the top of the page
 
+Quote Post
Lagman
сообщение Jun 9 2018, 15:12
Сообщение #24


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Цитата(jcxz @ Jun 9 2018, 18:04) *
Вы о чём? wacko.gif

О том что для удержания площадки гироскопа в горизонтальном положении не надо дополнительно никаких датчиков Холла, достаточно гироскопа на самой площадке, ведь там не важно 5 или 10 см он отъедет в сторону для самовыравнивания.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 9 2018, 15:15
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 5 209
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Lagman @ Jun 9 2018, 18:12) *
О том что для удержания площадки гироскопа в горизонтальном положении не надо дополнительно никаких датчиков Холла, достаточно гироскопа на самой площадке, ведь там не важно 5 или 10 см он отъедет в сторону для самовыравнивания.

Вы мне то это зачем пишете? Я разве писал, что д.Холла для определения наклона? Почитайте мои сообщения....
Go to the top of the page
 
+Quote Post
murmur
сообщение Jun 9 2018, 15:51
Сообщение #26


Местный
***

Группа: Участник
Сообщений: 425
Регистрация: 30-04-11
Пользователь №: 64 708



Может вы не будете спорить, а ответите мне про deadtime? Вопрос был на предыдущей странице в конце
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 9 2018, 16:21
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 5 209
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(murmur @ Jun 9 2018, 18:51) *
Может вы не будете спорить, а ответите мне про deadtime? Вопрос был на предыдущей странице в конце

Во-первых: у меня например это только первая страница. Размер страниц тут у всех свой. laughing.gif
А во-вторых: почему отсутствует? Вы на процедуру commutation() внимательно посмотрите. Где там верхний и нижний ключи пересекаются?
Go to the top of the page
 
+Quote Post
Lagman
сообщение Jun 9 2018, 18:55
Сообщение #28


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Еще можете посмотреть исходники BLHeli https://github.com/bitdump/BLHeli , популярная открытая прошивка для регуляторов (авиа: дроны, вертолеты).
Go to the top of the page
 
+Quote Post
murmur
сообщение Jun 10 2018, 13:34
Сообщение #29


Местный
***

Группа: Участник
Сообщений: 425
Регистрация: 30-04-11
Пользователь №: 64 708



Что-то не получается у меня с ЭДС. Господа, взгляните на схему цепочки детектирования в статье в первом сообщении, на ту же схему, но выложенную мной в 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

}

}



Сообщение отредактировал murmur - Jun 10 2018, 13:57
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Lagman
сообщение Jun 10 2018, 14:13
Сообщение #30


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



А если помочь рукой прокрутить, стартует?
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th September 2018 - 10:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01078 секунд с 7
ELECTRONIX ©2004-2016