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

 
 
> Детекция ЭДС в регуляторе бесколлекторного двигателя.
murmur
сообщение Jun 8 2018, 18:29
Сообщение #1


Местный
***

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



Коллеги, есть трупик модельного регулятора скорости бесколлекторного двигателя. Китайский. Плата 4-х слойная, прозвонила ее с трудом. На плате ATmega8.
Во первых Атмега горелая, буду ее менять. Во вторых, хочу залить свою прошивку по ряду причин - отрегулировать напряжение отключения при разряде, добавить изменение направления вращения по команде на пин и др.
В общем, частичный реверсинг.
В принципе схема очень похожа на вот это http://radioparty.ru/prog-avr/program-c/61...bldc-sensorless
С одним лишь отличием - посмотрите как реализована схема детекции обратной ЭДС там, и посмотрите в выложенный мной PDF - это в моем контроллере, для которого хочу писать прошивку.

В статье, которую я привела выше, замечательно расписано, как с помощью компаратора детектируется обратная ЭДС. Но совершенно непонятно, какую функцию выполняют входы ADC0 ADC1 ADC2. Ни в статье это не описано, ни в приведенном коде на С обращения к этим пинам нет.

Посмотрите на мою схему, в прилагающемся PDF. Там немного по другому. Но тоже идут 3 линии к ADC0 ADC6 ADC7.
Для чего же они нужны, какую роль они играют в управлении двигателем?

Ну и, учитывая то, что в моей схеме цепи детекции несколько иные, будет ли отличаться алгоритм обработки поступющих с них сигналов на компаратор и на ADC ?

Сообщение отредактировал murmur - Jun 8 2018, 18:31
Прикрепленные файлы
Прикрепленный файл  Sheet1.pdf ( 24.87 килобайт ) Кол-во скачиваний: 45
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
murmur
сообщение Jun 10 2018, 13:34
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 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

Сообщений в этой теме
- murmur   Детекция ЭДС в регуляторе бесколлекторного двигателя.   Jun 8 2018, 18:29
- - AlexandrY   Цитата(murmur @ Jun 8 2018, 21:29) Ну и, ...   Jun 8 2018, 19:12
- - V_N   Входы ADC0 ADC1 ADC2 это РС1,PC2 и PC3 -аналоговые...   Jun 8 2018, 19:20
- - murmur   ЦитатаВ статье применялся очень маломощный двигате...   Jun 9 2018, 02:57
|- - AlexandrY   Цитата(murmur @ Jun 9 2018, 05:57) И схем...   Jun 9 2018, 06:33
- - murmur   Хм... странно все таки. Почему разработчик моего к...   Jun 9 2018, 07:01
|- - AlexandrY   Цитата(murmur @ Jun 9 2018, 10:01) Хм... ...   Jun 9 2018, 07:59
||- - murmur   Цитата(AlexandrY @ Jun 9 2018, 10:59) Кон...   Jun 9 2018, 08:08
|- - jcxz   Цитата(murmur @ Jun 9 2018, 10:01) Скажит...   Jun 9 2018, 10:11
|- - gosha-z   Цитата(jcxz @ Jun 9 2018, 13:11) А как кс...   Jun 9 2018, 10:23
|- - jcxz   Цитата(gosha-z @ Jun 9 2018, 13:23) ...   Jun 9 2018, 10:33
|- - gosha-z   Цитата(jcxz @ Jun 9 2018, 13:33) Читать м...   Jun 9 2018, 10:41
||- - jcxz   Цитата(gosha-z @ Jun 9 2018, 13:41) ...   Jun 9 2018, 10:50
|- - Lagman   Цитата(jcxz @ Jun 9 2018, 13:33) Читать м...   Jun 9 2018, 14:39
- - gosha-z   АвтоESCи сильно отличаются от авиа. По характеру н...   Jun 9 2018, 08:20
- - murmur   Смущает в коде, что по ссылке в первом сообщении, ...   Jun 9 2018, 11:29
|- - Lagman   Цитата(murmur @ Jun 9 2018, 14:29) Гироск...   Jun 9 2018, 13:37
|- - jcxz   Цитата(murmur @ Jun 9 2018, 14:29) Гироск...   Jun 9 2018, 14:14
|- - Lagman   Цитата(jcxz @ Jun 9 2018, 17:14) д.Холла ...   Jun 9 2018, 14:24
||- - jcxz   Цитата(Lagman @ Jun 9 2018, 17:24) Зачем ...   Jun 9 2018, 15:04
||- - Lagman   Цитата(jcxz @ Jun 9 2018, 18:04) Вы о чём...   Jun 9 2018, 15:12
||- - jcxz   Цитата(Lagman @ Jun 9 2018, 18:12) О том ...   Jun 9 2018, 15:15
|- - murmur   Цитата(jcxz @ Jun 9 2018, 17:14) д.Холла ...   Jun 9 2018, 14:26
|- - jcxz   Цитата(murmur @ Jun 9 2018, 17:26) Я пред...   Jun 9 2018, 15:03
- - Lagman   Тут недавно была информация про плату https://www....   Jun 9 2018, 15:04
- - murmur   Может вы не будете спорить, а ответите мне про dea...   Jun 9 2018, 15:51
|- - jcxz   Цитата(murmur @ Jun 9 2018, 18:51) Может ...   Jun 9 2018, 16:21
- - Lagman   Еще можете посмотреть исходники BLHeli https://git...   Jun 9 2018, 18:55
- - Lagman   А если помочь рукой прокрутить, стартует?   Jun 10 2018, 14:13
- - murmur   Не стартует. К слову, ШИМ у меня сейчас пока нет,...   Jun 10 2018, 14:16
|- - jcxz   Цитата(murmur @ Jun 10 2018, 17:16) Не ст...   Jun 10 2018, 16:38
- - murmur   ЦитатаПопробуйте сначала коммутировать ключи с фик...   Jun 10 2018, 16:45
|- - jcxz   Цитата(murmur @ Jun 10 2018, 19:45) Этот ...   Jun 10 2018, 16:48
- - murmur   Поигралась с настройками - увеличила таймаут, по к...   Jun 10 2018, 18:07
|- - jcxz   Цитата(murmur @ Jun 10 2018, 21:07) Это ч...   Jun 11 2018, 05:37
|- - AlexandrY   Цитата(jcxz @ Jun 11 2018, 08:37) Примерн...   Jun 11 2018, 05:57
|- - Lagman   Цитата(AlexandrY @ Jun 11 2018, 08:57) Во...   Jun 11 2018, 08:45
|- - AlexandrY   Цитата(Lagman @ Jun 11 2018, 11:45) Речь ...   Jun 11 2018, 20:16
|- - khach   Цитата(AlexandrY @ Jun 11 2018, 22:16) Чт...   Jun 12 2018, 08:59
|- - AlexandrY   Цитата(khach @ Jun 12 2018, 11:59) Измеря...   Jun 13 2018, 15:04
- - murmur   Все пока хорошо, но вот почему то запускается двиг...   Jun 10 2018, 19:30
|- - варп   Цитата(murmur @ Jun 11 2018, 01:30) .... ...   Jun 11 2018, 01:24
- - Herz   С ней всё не так. Вообще непонятно, что это: может...   Jun 10 2018, 20:58
- - alexvu   Не касаясь особенностей ШИМ (я в этом не профи), 1...   Jun 13 2018, 18:28
- - Herz   Цитата(alexvu @ Jun 13 2018, 21:28) Не ка...   Jun 13 2018, 20:47


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

 


RSS Текстовая версия Сейчас: 26th August 2025 - 06:10
Рейтинг@Mail.ru


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