Разрабатываю частотник для АД, подскажите пожалуйста.

Блоки питания, преобразователи напряжения, UPS'ы - это здесь :)
Oleg.normalniy
Нашел транзистор. Понюхал.
Сообщения: 183
Зарегистрирован: Пн май 28, 2018 11:19:03

Re: Разрабатываю частотник для АД, подскажите пожалуйста.

Сообщение Oleg.normalniy »

asvhmao было-бы очень интересно особенно цифровую часть если вас ето не затруднит
DC-AC
Друг Кота
Сообщения: 3017
Зарегистрирован: Чт июн 26, 2014 00:04:37

Re: Разрабатываю частотник для АД, подскажите пожалуйста.

Сообщение DC-AC »

Ответ по вопросу о формуле расчёта синуса
Олег Олегович писал(а):формулу расчёта табличных значений шим.

Табличные значения рассчитываются под конкретный алгоритм программы.
Общая только функция y=sin(ωt)+Kп*sin(3ωt), Kп - коэффициент предмодуляции третьей гармоникой (0,15-0,20), выбирать исходя их конкретного формирователя ШИМ, как ограничение устроено, исходя из конкретного алгоритма. Подходит и для описания сектора под SVPWM.
На 10квт в звезде пойдёт модуль BSM50, да и 75 само собой.
ωt - образуют угол в радианах, ω - 2пf - угловая частота, t - время. Это стандартная формула. У Вас
Олег Олегович писал(а):y=sin ((2×3.14 × c )/180 )+1 × (a) где С это точка синусоиды то есть от 0 до 180 . А это период таймера
, то-же самое 2п*с/180 - это шаг синусоиды, по 2 градуса шагает.
А множить на период таймера - это что амплитуда?
Олег Олегович
Потрогал лапой паяльник
Сообщения: 347
Зарегистрирован: Вт авг 20, 2019 19:00:41

Re: Разрабатываю частотник для АД, подскажите пожалуйста.

Сообщение Олег Олегович »

DC-AC, Да это амплитуда . То есть получается обе формулы правильные. У вас забиты готовые таблицы или вы находу амплитуду меняете в зависимости от частоты?
Олег Олегович
Потрогал лапой паяльник
Сообщения: 347
Зарегистрирован: Вт авг 20, 2019 19:00:41

Re: Разрабатываю частотник для АД, подскажите пожалуйста.

Сообщение Олег Олегович »

DC-AC, На сколько помню у вас 360 точек то есть при изменении частоты нужно заходит в цикл и переписывать 360 значений массива . И что pic успевает это делать ???Или вы берете массив один и тот же и просто множите его уменьшая или увеличивая значения ?
Аватара пользователя
Sanchogus
Нашел транзистор. Понюхал.
Сообщения: 179
Зарегистрирован: Ср окт 07, 2015 13:13:40
Откуда: МО, г. Воскресенск
Контактная информация:

Re: Разрабатываю частотник для АД, подскажите пожалуйста.

Сообщение Sanchogus »

Зачем считать все, если нужно вычислить только следующее значение?
Олег Олегович
Потрогал лапой паяльник
Сообщения: 347
Зарегистрирован: Вт авг 20, 2019 19:00:41

Re: Разрабатываю частотник для АД, подскажите пожалуйста.

Сообщение Олег Олегович »

Sanchogus, Если частота выростить на 1 герц то нужен полностью пересчитанный массив то есть на 360 градусов синусоиды нужно пересчитать все значения. Вы имеете в виду считать каждый градус ?
Аватара пользователя
Sanchogus
Нашел транзистор. Понюхал.
Сообщения: 179
Зарегистрирован: Ср окт 07, 2015 13:13:40
Откуда: МО, г. Воскресенск
Контактная информация:

Re: Разрабатываю частотник для АД, подскажите пожалуйста.

Сообщение Sanchogus »

Считать только следующий угол, исходя из текущего задания. Как по мне проще держать массив для 100% амплитуды и плясать от него.

Смотрим какая должна быть частота и в зависимости от U(f) = const пересчитываем амплитуду и суем ее в новый угол.
DC-AC
Друг Кота
Сообщения: 3017
Зарегистрирован: Чт июн 26, 2014 00:04:37

Re: Разрабатываю частотник для АД, подскажите пожалуйста.

Сообщение DC-AC »

Зачем всё пересчитывать, просто множатся исходные значения, напряжение не зависит от выходной частоты (в смысле построения программы, можно задать любое на любой частоте просто изменив задание)
Олег Олегович
Потрогал лапой паяльник
Сообщения: 347
Зарегистрирован: Вт авг 20, 2019 19:00:41

Re: Разрабатываю частотник для АД, подскажите пожалуйста.

Сообщение Олег Олегович »

DC-AC, Пробовал умножить. Получается вот что: к примеру берём значение из таблицы 500 при периоде таймера 1000, тогда верхний и нижний ключи открыты одинаково (мёртвое время не считаем ), так вот если мы просто множим значение 500 к примеру на 0.2 то получается что амплитуда на выходе падает НО за счет закрытия верхнего ключа, тоесть верхний ключ открыт меньше, а нижний так как он комплементарный больше в следствии чего нижний ключ кипит, а верхний холодный . Я перечитывал таблицу на ходу - для уменьшения амплитуды увеличивал время нулевых векторов . Что скажете, может есть какой-то еще вариант ?
Аватара пользователя
Sanchogus
Нашел транзистор. Понюхал.
Сообщения: 179
Зарегистрирован: Ср окт 07, 2015 13:13:40
Откуда: МО, г. Воскресенск
Контактная информация:

Re: Разрабатываю частотник для АД, подскажите пожалуйста.

Сообщение Sanchogus »

Ну так логично, что надо приводить значение к нужному виду.
У меня таблица в виде от 0 до 1000 для четверти периода
Спойлер

Код: Выделить всё

uint16_t sinTableArray[90] = {                                             //четверть таблицы модифицированного синуса, растянутая с 500...1000 до  0...1000
0    ,   28,   58 ,  88, 118, 148, 178, 208, 238, 268,           //0-9
298, 328, 358, 388, 416, 446, 476, 504, 532, 562,           //10-19
590, 618, 646, 674, 702, 730, 756, 784, 810, 838,           //20-29
864, 872, 880, 888, 896, 904, 912, 918, 924, 932,           //30-39
938, 944, 948, 954, 958, 964, 968, 972, 976, 980,           //40-49
982, 986, 988, 990, 992, 994, 996, 996, 996, 998,           //50-59
998, 998, 996, 996, 996, 994, 992, 990, 988, 986,           //60-69
982, 980, 976, 972, 968, 964, 958, 954, 948, 944,           //70-79
938, 932, 924, 918, 912, 904, 896, 888, 880, 872             //80-89
};

После чего идет расчет амплитуды

Код: Выделить всё

if (angle < 90)                                                      //   0-89
   {
      buffer = sg_inverter.tim_arr_half + (sg_inverter.tim_arr_half * sinTableArray[angle] * sg_inverter.amplitude) / 100000;
      return buffer;

Беру половину периода таймера в данный момент (он у меня плавает в процессе работы) sg_inverter.tim_arr_half и прибавляю к нему еще кусок из половины периода*текущий угол*амплитуда (0-100) и делю на хитропопое число (100 от амплитуды*1000от макс табличного ШИМ).
В итоге получаю при нулевой амплитуде ровно половину периода (т.е. меандр), который по мере увеличения амплитуды становиться синусом.
Для остальных четвертей свои расчеты, но аналогично.
Спойлер

Код: Выделить всё

//по заданному углу и амплитуде возвращает коэф. заполнения ШИМ
uint32_t sg_inverter_pwm_calc(uint16_t angle, uint16_t *amplitude, uint16_t *freq)            //т.к. таблица только на одну четверть синуса, то недостающие углы вычисляем нехитрыми математическими операциями
{
   uint32_t buffer;
   if (angle > 359) angle-= 359;   //если как-то убежали за диапазон, то возвращаемся в него, по идее надо выпилить отсюда
   if (sg_inverter.amplitude > 100) sg_inverter.amplitude = 100;
   
   if (angle < 90)                                                      //   0-89
   {
      buffer = sg_inverter.tim_arr_half + (sg_inverter.tim_arr_half * sinTableArray[angle] * sg_inverter.amplitude) / 100000;
      return buffer;
   }
   else
      if(angle < 180)                                                   //   90-179
      {
         buffer = sg_inverter.tim_arr_half + (sg_inverter.tim_arr_half * sinTableArray[179 - angle] * sg_inverter.amplitude) / 100000;
         return buffer;
      }
      else
         if(angle < 270)                                                //   180-269
         {
            buffer = sg_inverter.tim_arr_half - (sg_inverter.tim_arr_half * (sinTableArray[angle - 180]) * sg_inverter.amplitude) / 100000;
            return buffer;
         }
         else                                                               //   270-359
         {
            buffer = sg_inverter.tim_arr_half - (sg_inverter.tim_arr_half * (sinTableArray[359 - angle]) * sg_inverter.amplitude) / 100000;
            return buffer;
         }
};
Олег Олегович
Потрогал лапой паяльник
Сообщения: 347
Зарегистрирован: Вт авг 20, 2019 19:00:41

Re: Разрабатываю частотник для АД, подскажите пожалуйста.

Сообщение Олег Олегович »

У вас период таймера не константа?
Аватара пользователя
Sanchogus
Нашел транзистор. Понюхал.
Сообщения: 179
Зарегистрирован: Ср окт 07, 2015 13:13:40
Откуда: МО, г. Воскресенск
Контактная информация:

Re: Разрабатываю частотник для АД, подскажите пожалуйста.

Сообщение Sanchogus »

Нет. Я периодом таймера задаю выходную частоту. При этом держу частоту ШИМ в диапазоне 3-6 кГц.
На низких частотах повторяю один и тот же цикл несколько раз.
При ускорении начинаю выкидывать углы. До 50 Гц шаг 3 градуса, после 6 и выше.

Рассматривал вариант с DDS генератором, но чет до конца не вкурил, как при низкой частоте тактирования обеспечить стабильную выходную частоту без дрожания фронтов.
Олег Олегович
Потрогал лапой паяльник
Сообщения: 347
Зарегистрирован: Вт авг 20, 2019 19:00:41

Re: Разрабатываю частотник для АД, подскажите пожалуйста.

Сообщение Олег Олегович »

Sanchogus, А какой мк используете ? Я пока f103 но заказал f303 хочу на неё перейти .

Добавлено after 1 minute 58 seconds:
Сегодня дополню формулу чтоб была и амплитуда .Выложу.
Аватара пользователя
Sanchogus
Нашел транзистор. Понюхал.
Сообщения: 179
Зарегистрирован: Ср окт 07, 2015 13:13:40
Откуда: МО, г. Воскресенск
Контактная информация:

Re: Разрабатываю частотник для АД, подскажите пожалуйста.

Сообщение Sanchogus »

F103c8t6, но рисую вариант stm32g070kb. Удобный корпус для пайки 32 пина, 2 ноги питания, норм цена, 2.5 Мсемпла ацп и куча таймеров.
В качестве силы был stgips20k60 (точнее он и сейчас есть), сейчас смотрю под ikcm20l60, ибо дешевле (500-600 р за модуль). Целевая мощность 1.5-2.2 кВт в зависимости от модуля.
Олег Олегович
Потрогал лапой паяльник
Сообщения: 347
Зарегистрирован: Вт авг 20, 2019 19:00:41

Re: Разрабатываю частотник для АД, подскажите пожалуйста.

Сообщение Олег Олегович »

arr_pwm_1 [a_] =(( sin ((2 * 3.14) * a_ / 180) +1 )* amplituda_ + (500 - amplituda_)); Такая получилась формула .Изменяя amplituda_ можно менять время работы нулевых векторов соответственно и амплитуду на выходе .
Аватара пользователя
Sanchogus
Нашел транзистор. Понюхал.
Сообщения: 179
Зарегистрирован: Ср окт 07, 2015 13:13:40
Откуда: МО, г. Воскресенск
Контактная информация:

Re: Разрабатываю частотник для АД, подскажите пожалуйста.

Сообщение Sanchogus »

Для проверки построить в экселе график для всех углов с ячейкой под задание амплитуды.
Если при нулевой амплитуде будет линия по уровню 50%, а при 100% синус на полный размах от нуля до макс заполнения в вершинах, то норм.
Олег Олегович
Потрогал лапой паяльник
Сообщения: 347
Зарегистрирован: Вт авг 20, 2019 19:00:41

Re: Разрабатываю частотник для АД, подскажите пожалуйста.

Сообщение Олег Олегович »

Sanchogus, Смотрел значения в массиве так и есть .
Аватара пользователя
Starichok51
Модератор
Сообщения: 19040
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Разрабатываю частотник для АД, подскажите пожалуйста.

Сообщение Starichok51 »

Олег Олегович писал(а):arr_pwm_1 [a_] =(( sin ((2 * 3.14) * a_ / 180) +1 )* amplituda_ + (500 - amplituda_))
ошибочка тут закралась.
чтобы перевести градусы в радианы, либо не должно быть двойки, либо делить на 360.
а поскольку все равно используется плавающая точка (число 3,14), то проще угол делить сразу на величину 1 радиана в градусах.
в итоге, вместо такого нагромождения приходим к выражению:
sin (a_ / 57.29578)
и к слову, 3,14 - очень грубое приближения числа Пи для подобных расчетов.
а также вся формула ошибочна.
нет необходимости прибавлять 1 к значению синуса.
я считаю, должно быть так:
arr_pwm_1 [a_] = 500 + sin (a_ / 57.29578) * amplituda_.
как я понял из последних постов, 500 - это среднее значение ШИМ, означающее нулевое значение напряжения (нулевую амплитуду).
вот, к этому среднему и прибавляем значение синуса, умноженного на требуемую амплитуду.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
Sanchogus
Нашел транзистор. Понюхал.
Сообщения: 179
Зарегистрирован: Ср окт 07, 2015 13:13:40
Откуда: МО, г. Воскресенск
Контактная информация:

Re: Разрабатываю частотник для АД, подскажите пожалуйста.

Сообщение Sanchogus »

А значения синуса раскидать по таблице, т.к. нечего на МК считать операции с плавающей точкой без FPU. :)

я считаю, должно быть так:
arr_pwm_1 [a_] = 500 + sin (a_ / 57.29578) * amplituda_.

Может амплитуду еще на полпериода (500) умножить?
Если будет угол, который сделает синус единицей, то получим при 100% амплитуде 500 + 1*100, что несколько недотягивает до тысячи, ну и при вычислении синуса = -1 получим выражение 500-1*100 = 400, вместо нуля.
Амплитуду умножить на полупериод и поделить на сотню еще. Ну или использовать амплитуду 0...1.


Пользуясь случаем: Есть у кого под рукой названия хороших книг посвященных управлению асинхронным двигателем и векторному управлению АД, желательно с практической точки зрения. :idea:
Ответить

Вернуться в «Питание»