Перейти к содержанию

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


Рекомендуемые сообщения

Приветствую всех!

Товарищи, подскажите, пожалуйста, не нашел нормальных диаграмм в темах, которые здесь созданы.

Существует задача: сформировать сигнал для микросхемы ikcm15f60. Представляет собой трехфазный драйвер для двигателя.

Подскажите, как нужно задействовать комплементарные пары, чтобы получить нужный сигнал. 
Например, я понимаю, как выдать синус в двухтактном режиме: на первой ноге выдаем полуволну в первый период, на втором периоде(цикле) выдаем полуволну, но уже инверсную.

Если использовать комплементарные выводы TIM1(stm32f103), то, получается, просто выводить полуволну, а она автоматически на другой ноги проинвертируется + если нужно, то ставим дэдтайм

Теперь про подключение: Например, есть HIN(1-3), LIN(1-3). Подключать 1 фаза: прямой выход на HIN1, инверсный: LIN1 и так для каждой фазы соответственно?

Вот, что имею: image.thumb.png.1a96591a6f760115d66a140c3024ef6a.png

Спойлер

image.thumb.png.94aef6a0e588c864f34f2f0056a07379.png


Если не трудно, подскажите, прав ли я или нет. Просто пока драйвер в пути, нет возможности преверить. По поводу мертвого времени: он устанавливается аппаратно драйвером, в контроллере этого делать не нужно.

В дополнение, код:
 

Спойлер
void FreqConverter::timer_initialize()
{
   // RCC->APB2ENR |= RCC_APB2ENR_TIM1EN; // включаем TIM1 (тактирование от APB2 - 72 MHz)
    //RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
    RCC->APB2ENR |= RCC_APB2ENR_TIM1EN | RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPBEN; // включаем тактирование портов А и В
    

    TIM1->PSC = (F_CPU / _SIGNAL_FREQUENCY_MIN / _ARR_VALUE / _DISCRETIZE) - 1;
    TIM1->ARR = _ARR_VALUE-1;
    
    TIM1->CCER      = TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E;
    TIM1->CCER      |= TIM_CCER_CC1NE | TIM_CCER_CC2NE | TIM_CCER_CC3NE;             
    // включаем выход 1, 2, 3 каналов ножек как выход
    // устанавливаем норм. полярность(1 - высокий)
    TIM1->BDTR      = TIM_BDTR_MOE;                                                    // разрешили работу выводов


    TIM1->CCMR1     |= (0b110 << TIM_CCMR1_OC1M_Pos) | (0b110 << TIM_CCMR1_OC2M_Pos) | TIM_CCMR1_OC1PE | TIM_CCMR1_OC2PE;   // установили работу каналов 1,2 как PWM1
    TIM1->CCMR2     |= (0b110 << TIM_CCMR2_OC3M_Pos) | TIM_CCMR2_OC3PE;                                   // установили работу канала 3 как PWM1
    TIM1->CCMR1     |= TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1;

    TIM1->CR1       &= ~TIM_CR1_DIR;
    TIM1->CR1       &= ~TIM_CR1_CMS;
    TIM1->DIER      = TIM_DIER_UIE;
    NVIC_EnableIRQ(TIM1_UP_IRQn);


    // установим выводы каналов как alternative push-pull выходы
    GPIOA->CRH &=   ~(GPIO_CRH_MODE8 | GPIO_CRH_MODE9 | GPIO_CRH_MODE10); //mode 01 - alernative push-pull
    GPIOA->CRH |=   GPIO_CRH_MODE8_1 | GPIO_CRH_MODE9_1 | GPIO_CRH_MODE10_1;

    GPIOA->CRH &=   ~(GPIO_CRH_CNF8 | GPIO_CRH_CNF9 | GPIO_CRH_CNF10);
    GPIOA->CRH |=   (GPIO_CRH_CNF8_1 | GPIO_CRH_CNF9_1 | GPIO_CRH_CNF10_1);//cnf 10 - mode output

    GPIOB->CRH &=   ~(GPIO_CRH_MODE13 | GPIO_CRH_MODE14 | GPIO_CRH_MODE15); //mode 01 - alernative push-pull
    GPIOB->CRH |=   GPIO_CRH_MODE13_1 | GPIO_CRH_MODE14_1 | GPIO_CRH_MODE15_1;

    GPIOB->CRH &=   ~(GPIO_CRH_CNF13 | GPIO_CRH_CNF14 | GPIO_CRH_CNF15);
    GPIOB->CRH |=   (GPIO_CRH_CNF13_1 | GPIO_CRH_CNF14_1 | GPIO_CRH_CNF15_1);//cnf 10 - mode output


    TIM1->CR1  |=   TIM_CR1_CEN;
/*
    TIM2->ARR = ((_F_CPU / (1 << _BITNESS)) - 1);
    TIM2->PSC = 0;

    TIM2->DIER = TIM_DIER_UIE;
    NVIC_EnableIRQ(TIM2_IRQn);

    TIM2->CR1 |= TIM_CR1_CEN;
*/
}

extern "C" void TIM1_UP_IRQHandler()
{
    if (TIM1->SR & TIM_SR_UIF)
    {
        static uint8_t 
            _counter_phase{0};
        TIM1->CCR1 = FreqConverter::phase_A[_counter_phase];
        TIM1->CCR2 = FreqConverter::phase_B[_counter_phase];
        TIM1->CCR3 = FreqConverter::phase_C[_counter_phase];

        if(++_counter_phase == _DISCRETIZE)
            _counter_phase = 0;
        TIM1->SR = 0;
    }
}


phase_A 
        {   // полуволна( T = Пи )
        /*
            128, 136, 144, 152, 160, 167, 175, 182, 189, 196, 203, 209, 215, 221, 226, 
            231, 236, 240, 243, 247, 249, 251, 253, 254, 255, 255, 255, 254, 252, 250, 
            248, 245, 242, 238, 234, 229, 224, 218, 213, 206, 200, 193, 186, 179, 171, 
            163, 156, 148, 140, 132, 123, 115, 107, 99, 92, 84, 76, 69, 62, 55, 
            49, 42, 37, 31, 26, 21, 17, 13, 10, 7, 5, 3, 1, 0, 0, 
            0, 1, 2, 4, 6, 8, 12, 15, 19, 24, 29, 34, 40, 46, 52, 
            59, 66, 73, 80, 88, 95, 103, 111, 119, 127 
        */
        
            0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 87, 95, 102, 110, 
            117, 124, 131, 138, 145, 151, 158, 164, 170, 176, 182, 187, 193, 198, 203, 
            208, 212, 217, 221, 225, 228, 232, 235, 238, 241, 244, 246, 248, 250, 251, 
            252, 253, 254, 255, 255, 255, 255, 254, 253, 252, 251, 250, 248, 246, 244, 
            241, 238, 235, 232, 228, 225, 221, 217, 212, 208, 203, 198, 193, 187, 182, 
            176, 170, 164, 158, 151, 145, 138, 131, 124, 117, 110, 102, 95, 87, 80, 
            72, 64, 56, 48, 40, 32, 24, 16, 8, 0     
        
        }

 


 

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

2 minutes ago, Иван Рогожников said:

Если использовать комплементарные выводы TIM1(stm32f103), то, получается, просто выводить полуволну, а она автоматически на другой ноги проинвертируется + если нужно, то ставим дэдтайм

Именно так. И это в принципе как раз то что надо. Только имхо выводить надо не полуволну, а смещенный в центр диапазона (значений счетчика таймера) полный синус. Так проще будет.

Изменено пользователем Rafiq
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

18 часов назад, Rafiq сказал:

а смещенный в центр диапазона (значений счетчика таймера) полный синус

Будьте любезны, объясните, пожалуйста. Не совсем понял Вас

 

14 часов назад, Praktic сказал:

Да и шимят, кажется, только нижнее плечо, зачем сразу оба? 


На микросхеме 6 входных каналов: HIN(1-3), LIN(1-3). На них нужно подавать сигналы, которые управляют соответствующими ключами.
Верно ведь?

Ссылка на комментарий
Поделиться на другие сайты

5 hours ago, Иван Рогожников said:

Будьте любезны, объясните, пожалуйста. Не совсем понял Вас

Предположим для простоты, что таймер считает от 0 до 65536, и пусть аргумент i пробегает от 0 до 360 градусов с шагом 1 градус, тогда

регистр_сравнения = (int)int(32768 * sin(i) + 32768)

Чтобы не высчитывать вручную, можно написать скрипт на компьютере, который это вычислит и сгенерирует описание массива на C, которое можно копипастнуть в исходный код прошивки.

Транзисторы моста должны быть мосфетами, либо к ним (если это биполяры или IGBT) должны быть подключены встречно-параллельные диоды между коллектором и эмиттером. У некоторых IGBT вроде такие диоды уже есть в животе, но могу ошибаться, проверяй по даташиту.

На самом деле будет вполне достаточно таймеру считать до 256, да и аргумент можно брать не с шагом 1 градус, а больше и соответственно будет меньше значений.

Ссылка на комментарий
Поделиться на другие сайты

21 hours ago, Praktic said:

Да и шимят, кажется, только нижнее плечо, зачем сразу оба? 

Можно и так, только это немного не так, как ты описал:)

Когда синус больше нуля, шимится верхний ключ, нижний закрыт, когда синус меньше нуля, шимится только нижний ключ. В закрытых ключах работают обратные диоды.

Ну это когда есть сдвиг фаз между током и напряжением.

Ссылка на комментарий
Поделиться на другие сайты

13 минут назад, Rafiq сказал:

Когда синус больше нуля, шимится верхний ключ, нижний закрыт, когда синус меньше нуля, шимится только нижний ключ.

В закрытых ключах работают обратные диоды.

Может быть. Я делал контроллер для бесщеточного мотора на MC33035 и там шимится только нижний ключ при ограничения тока или регулировке оборотов. Но это не синус, а прямоугольник.  На велосипедных контроллерах с переключением прямоугольник -синус, тоже шимится только нижний ключ.  Синфазное управление не встречал. Но и не исключаю.

Это побочные диоды и на них никогда не рассчитывают работать. Их только учитывают.

Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, Rafiq сказал:

Чтобы не высчитывать вручную, можно написать скрипт на компьютере, который это вычислит и сгенерирует описание массива на C, которое можно копипастнуть в исходный код прошивки.

А! Вы про это..Да. У меня уже сгенерирована таблица значений на таймер. Спасибо

Собственно, хочу подытожить: мой сигнал на фотографиях соответствует правильному?
Т.е прямой сигнал подаю на HIN1, его комплементарный - на LIN1, чтобы добиться того, что плечо не было открыто.
Соответственно, для фазы 2(сдвинута на 120) на HIN2/LIN2.

 

Я правильно понимаю?

Ссылка на комментарий
Поделиться на другие сайты

В 06.12.2021 в 18:34, Иван Рогожников сказал:

Если не трудно, подскажите, прав ли я или нет.

нет. посмотрите эту статью http://privod.news/news/dlya-spetsialistov/teoriya_i_praktika_elektroprivoda/elem441087/

1. счетчик ШИМа должен быть  симметричным возрастающие-убывающий, рис.9 статьи
2. для каждого полумоста: Для верхнего ключа  97%ШИМ соответствует максимум синусоиды, 50% ноль синусоиды, 3% минимум синусоиды. Для нижнего соответственно  инверсно, с учетом дедтаймов.
3. если Вы сформируете ШИМ в виде чистой синусоиды рис.1 , то на выходе получите , амплитуду синусоиды в половину напряжения питания рис.2, те при таком способе для получения 0,4кВ потребуется питание 1132В.
4. чтобы этого избежать ШИМы формируется  по кривым рис.3, на выходе получаем 3х фазный синус рис.4

ну как-то так...

Ссылка на комментарий
Поделиться на другие сайты

Спасибо за ответ!
 

3 часа назад, IMXO сказал:

1. счетчик ШИМа должен быть  симметричным возрастающие-убывающий, рис.9 статьи

Разве это влияет как-то? По сути, мой табличный метод начинается с 0 и заканчивается им же, что и есть симметрия?

 

3 часа назад, IMXO сказал:

3. если Вы сформируете ШИМ в виде чистой синусоиды рис.1 , то на выходе получите , амплитуду синусоиды в половину напряжения питания рис.2, те при таком способе для получения 0,4кВ потребуется питание 1132В.

понял, спасибо

 

3 часа назад, IMXO сказал:

4. чтобы этого избежать ШИМы формируется  по кривым рис.3, на выходе получаем 3х фазный синус рис.4

Спойлер

image.png.37702b0a2e33316a8ba8c7dec9c44418.png

Подскажите по формулам, если не сложно.

Из статьи:

Цитата

 

Umax - максимальное из напряжений инвертора

Umin - минимальное из напряжений инвертора

 

т.е, как я понимаю, это значения, которые мы получим, если подключим инвертор к уже выпрямленному напряжению?
Таким образом, у нас Umax примет 310 В, Umin = 0 В?
а Ua - это моя функция, формирующая таблицу?
 

bitness = 8
Y = round((((2^bitness)-1) / 2)*sin(T) + ((2^bitness - 1)/2));

 

Ссылка на комментарий
Поделиться на другие сайты

13 минут назад, Иван Рогожников сказал:

мой табличный метод начинается с 0 и заканчивается им же

Причем здесь таблица? Речь о самом способе формирования ШИМ, 
их два: 
первый не симметричный, счетчик инкриминируется от 0 до МАХ,
по переполнению сбрасывается в 0 (те получается пилообразный сигнал), в 0е выход устанавливается в лог.1 , по совпадению со скважностью выход сбрасывается в лог.0,
второй симметричный (показанный на картинко) счетчик инкриминируется от 0 до МАХ, по достижении МАХ дискриминируется  до 0 (получается треугольный сигнал). если счетчик<сважность на выходе лог.1, если счетчик>=сважность на выходе лог.0
на картинко цветными линиями значение скважности, черной инкремент/декремент счетчика.

Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, IMXO сказал:

Причем здесь таблица? Речь о самом способе формирования ШИМ

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

Вопрос по напряжениям: какие значения подставлять в них?
Подскажите, пожалуйста

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Иван Рогожников сказал:

Таким образом, у нас Umax примет 310 В, Umin = 0 В?

откуда вы взяли 310????
380 линейного это 540 постоянного т.е. =1,  разбивается на  -0,5/+0,5 т.е. 540/2=270 , 270 это амплитудное (оно же мин/мах) , или 270/sqrt(2)=191 действующего фазного , получаем действующее линейное: 191∙√3=330В.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Иван Рогожников сказал:

//

Делайте таблицу на полный период, и выбирайте по счетчику для каждой фазы значение со смещением 120.  Если будете регулировать обороты, вам еще скалярность пригодится. 

Изменено пользователем Yuriy.pv
Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, Иван Рогожников сказал:

а Ua - это моя функция, формирующая таблицу?

да
197056558__.jpg.654f6bceb57d5228cbf37444ce66dcf9.jpg

только не спрашивайте как это получилось B)
если не заморачиватся с углом начала фазы Uab
выражения можно упростить до
762927541___1.jpg.4b2957a84e67e788a6b50f35efa8206c.jpg

Ссылка на комментарий
Поделиться на другие сайты

10 часов назад, Yuriy.pv сказал:

Делайте таблицу на полный период, и выбирайте по счетчику для каждой фазы значение со смещением 120.  Если будете регулировать обороты, вам еще скалярность пригодится. 

Собственно, у меня уже есть таблица на полный период для каждой фазы со сдвигом в 120 градусов. Но, как уже заметили здесь, он совершенно не годится по этому:

16 часов назад, IMXO сказал:

3. если Вы сформируете ШИМ в виде чистой синусоиды рис.1 , то на выходе получите , амплитуду синусоиды в половину напряжения питания рис.2, те при таком способе для получения 0,4кВ потребуется питание 1132В.

Я генерировал обычный шим сигнал по син. закону. Теперь нужно реализовать более эффективный метод. Мне предоставили ссылку на статью, где, в принципе, и указаны законы изменения. Но, к сожалению, я не понимаю, как сформировать по ним таблицу..

 

8 часов назад, IMXO сказал:

только не спрашивайте как это получилось B)

Спасибо, конечно, за вашу помощь.

Но я хочу понять, как это все дело работает :unsure:

Ссылка на комментарий
Поделиться на другие сайты

5 часов назад, Иван Рогожников сказал:

Но, как уже заметили здесь, он совершенно не годится

И почему не годится? Он какой год крутит у меня двигатель...

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Yuriy.pv сказал:

И почему не годится? Он какой год крутит у меня двигатель...

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

Вот, что получилось:
 

Спойлер

image.png.f892fd528c15612d8cf978958fc5c13e.pngimage.png.6430ea3c80b922204808e57e5a64cddb.png



В общем, разобрался в итоге, как сформировать этот сигнал. Только не понятно, как сдвинуть уже отмодулированный сигнал по фазе?

Если каждую функцию (sin(t), 1/6sin(3t)) сдвинуть по фазе(чтобы получить модулированный сигнал уже сдвинутым), то получится ерунда какая-то.

Спойлер

image.png.17e5f42f9abc498acb9fd7ba5722a516.png



Теперь, подскажите, пожалуйста, по поводу самой подачи сигнала: сам dead-time для моего драйвера не нужен. Из этого следует, что я просто подаю половину периода(2 рисунок в спойлере) на комплементарную пару. Прямой сигнал - на вернее плечо, комплементарный - на нижнее?Для каждой фазы, разумеется, со сдвигом в 120* ?


Спасибо большое всем ответившим в этой теме! 

Изменено пользователем Иван Рогожников
Ссылка на комментарий
Поделиться на другие сайты

5 часов назад, Иван Рогожников сказал:

по поводу самой подачи сигнала: сам dead-time для моего драйвера не нужен. Из этого следует, что я просто подаю половину периода(2 рисунок в спойлере) на комплементарную пару. Прямой сигнал - на вернее плечо, комплементарный - на нижнее?

:wall: на каждый полумост подаешь свой ШИМ  !!!  , на импульсе ШИМа открываешь верхний ключ, на паузе ШИМа нижний .
 

Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, Иван Рогожников сказал:

Если каждую функцию (sin(t), 1/6sin(3t)) сдвинуть по фазе(чтобы получить модулированный сигнал уже сдвинутым), то получится ерунда какая-то.

:wall: что-бы не делать три таблицы создаешь таблицу для Ua на полный период, по какой картинке пох, размер таблицы делается кратным 3, лучше 6ти.  тогда для ШИМ_фазыВ к индексу массива ШИМ_фазыА прибавляем треть размера массива  с контролем переполнения, для ШИМ_фазыС прибавляем две трети размера массива.
к примеру у тебя размер таблицы N=102 [0..101]
тебе надо выдать отсчет n=80:
для ШИМ_фазыА это будет индекс [n]=[80]
для ШИМ_фазыВ это будет индекс [n= (n+N/3)<N ? n+N/3 : n-2*N/3)] = [12]
для ШИМ_фазыC это будет индекс [n= (n+2*N/3)<N ? n+2*N/3 : n-N/3)] = [46]

ЗЫ какие-то кривые у тебя рагатые получились...

 

таблица ШИМ.xls

Ссылка на комментарий
Поделиться на другие сайты

6 часов назад, Иван Рогожников сказал:

Только не понятно, как сдвинуть уже отмодулированный сигнал по фазе?

Ну я ж писал, а вы не приняли. Да и IMXO вам говорит. Ваш сигнал помещаете в ОДНУ таблицу, создаете три переменные индекса счетчтка для контроля переполнения, и делите вашу таблицу на 3 части. Эти индексы и будут вам для загрузки в регистры шим  каждой фазы. 

Ссылка на комментарий
Поделиться на другие сайты

Да, понял, спасибо большое. Сразу почему-то не дошло :(

Приду домой - попробую!

 

Спасибо вам еще раз за консультацию!!

Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...