Разрабатываю частотник для АД, подскажите пожалуйста.
-
Oleg.normalniy
- Нашел транзистор. Понюхал.
- Сообщения: 183
- Зарегистрирован: Пн май 28, 2018 11:19:03
Re: Разрабатываю частотник для АД, подскажите пожалуйста.
asvhmao было-бы очень интересно особенно цифровую часть если вас ето не затруднит
Re: Разрабатываю частотник для АД, подскажите пожалуйста.
Ответ по вопросу о формуле расчёта синуса
Табличные значения рассчитываются под конкретный алгоритм программы.
Общая только функция y=sin(ωt)+Kп*sin(3ωt), Kп - коэффициент предмодуляции третьей гармоникой (0,15-0,20), выбирать исходя их конкретного формирователя ШИМ, как ограничение устроено, исходя из конкретного алгоритма. Подходит и для описания сектора под SVPWM.
На 10квт в звезде пойдёт модуль BSM50, да и 75 само собой.
ωt - образуют угол в радианах, ω - 2пf - угловая частота, t - время. Это стандартная формула. У Вас
А множить на период таймера - это что амплитуда?
Олег Олегович писал(а):формулу расчёта табличных значений шим.
Табличные значения рассчитываются под конкретный алгоритм программы.
Общая только функция y=sin(ωt)+Kп*sin(3ωt), Kп - коэффициент предмодуляции третьей гармоникой (0,15-0,20), выбирать исходя их конкретного формирователя ШИМ, как ограничение устроено, исходя из конкретного алгоритма. Подходит и для описания сектора под SVPWM.
На 10квт в звезде пойдёт модуль BSM50, да и 75 само собой.
ωt - образуют угол в радианах, ω - 2пf - угловая частота, t - время. Это стандартная формула. У Вас
, то-же самое 2п*с/180 - это шаг синусоиды, по 2 градуса шагает.Олег Олегович писал(а):y=sin ((2×3.14 × c )/180 )+1 × (a) где С это точка синусоиды то есть от 0 до 180 . А это период таймера
А множить на период таймера - это что амплитуда?
-
Олег Олегович
- Потрогал лапой паяльник
- Сообщения: 347
- Зарегистрирован: Вт авг 20, 2019 19:00:41
Re: Разрабатываю частотник для АД, подскажите пожалуйста.
DC-AC, Да это амплитуда . То есть получается обе формулы правильные. У вас забиты готовые таблицы или вы находу амплитуду меняете в зависимости от частоты?
Re: Разрабатываю частотник для АД, подскажите пожалуйста.
В HD Восьмикруте множится на ходу, но исходная U/f в таблице
-
Олег Олегович
- Потрогал лапой паяльник
- Сообщения: 347
- Зарегистрирован: Вт авг 20, 2019 19:00:41
Re: Разрабатываю частотник для АД, подскажите пожалуйста.
DC-AC, На сколько помню у вас 360 точек то есть при изменении частоты нужно заходит в цикл и переписывать 360 значений массива . И что pic успевает это делать ???Или вы берете массив один и тот же и просто множите его уменьшая или увеличивая значения ?
- Sanchogus
- Нашел транзистор. Понюхал.
- Сообщения: 179
- Зарегистрирован: Ср окт 07, 2015 13:13:40
- Откуда: МО, г. Воскресенск
- Контактная информация:
Re: Разрабатываю частотник для АД, подскажите пожалуйста.
Зачем считать все, если нужно вычислить только следующее значение?
-
Олег Олегович
- Потрогал лапой паяльник
- Сообщения: 347
- Зарегистрирован: Вт авг 20, 2019 19:00:41
Re: Разрабатываю частотник для АД, подскажите пожалуйста.
Sanchogus, Если частота выростить на 1 герц то нужен полностью пересчитанный массив то есть на 360 градусов синусоиды нужно пересчитать все значения. Вы имеете в виду считать каждый градус ?
- Sanchogus
- Нашел транзистор. Понюхал.
- Сообщения: 179
- Зарегистрирован: Ср окт 07, 2015 13:13:40
- Откуда: МО, г. Воскресенск
- Контактная информация:
Re: Разрабатываю частотник для АД, подскажите пожалуйста.
Считать только следующий угол, исходя из текущего задания. Как по мне проще держать массив для 100% амплитуды и плясать от него.
Смотрим какая должна быть частота и в зависимости от U(f) = const пересчитываем амплитуду и суем ее в новый угол.
Смотрим какая должна быть частота и в зависимости от U(f) = const пересчитываем амплитуду и суем ее в новый угол.
Re: Разрабатываю частотник для АД, подскажите пожалуйста.
Зачем всё пересчитывать, просто множатся исходные значения, напряжение не зависит от выходной частоты (в смысле построения программы, можно задать любое на любой частоте просто изменив задание)
-
Олег Олегович
- Потрогал лапой паяльник
- Сообщения: 347
- Зарегистрирован: Вт авг 20, 2019 19:00:41
Re: Разрабатываю частотник для АД, подскажите пожалуйста.
DC-AC, Пробовал умножить. Получается вот что: к примеру берём значение из таблицы 500 при периоде таймера 1000, тогда верхний и нижний ключи открыты одинаково (мёртвое время не считаем ), так вот если мы просто множим значение 500 к примеру на 0.2 то получается что амплитуда на выходе падает НО за счет закрытия верхнего ключа, тоесть верхний ключ открыт меньше, а нижний так как он комплементарный больше в следствии чего нижний ключ кипит, а верхний холодный . Я перечитывал таблицу на ходу - для уменьшения амплитуды увеличивал время нулевых векторов . Что скажете, может есть какой-то еще вариант ?
- Sanchogus
- Нашел транзистор. Понюхал.
- Сообщения: 179
- Зарегистрирован: Ср окт 07, 2015 13:13:40
- Откуда: МО, г. Воскресенск
- Контактная информация:
Re: Разрабатываю частотник для АД, подскажите пожалуйста.
Ну так логично, что надо приводить значение к нужному виду.
У меня таблица в виде от 0 до 1000 для четверти периода
После чего идет расчет амплитуды
Беру половину периода таймера в данный момент (он у меня плавает в процессе работы) sg_inverter.tim_arr_half и прибавляю к нему еще кусок из половины периода*текущий угол*амплитуда (0-100) и делю на хитропопое число (100 от амплитуды*1000от макс табличного ШИМ).
В итоге получаю при нулевой амплитуде ровно половину периода (т.е. меандр), который по мере увеличения амплитуды становиться синусом.
Для остальных четвертей свои расчеты, но аналогично.
У меня таблица в виде от 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: Разрабатываю частотник для АД, подскажите пожалуйста.
Нет. Я периодом таймера задаю выходную частоту. При этом держу частоту ШИМ в диапазоне 3-6 кГц.
На низких частотах повторяю один и тот же цикл несколько раз.
При ускорении начинаю выкидывать углы. До 50 Гц шаг 3 градуса, после 6 и выше.
Рассматривал вариант с DDS генератором, но чет до конца не вкурил, как при низкой частоте тактирования обеспечить стабильную выходную частоту без дрожания фронтов.
На низких частотах повторяю один и тот же цикл несколько раз.
При ускорении начинаю выкидывать углы. До 50 Гц шаг 3 градуса, после 6 и выше.
Рассматривал вариант с DDS генератором, но чет до конца не вкурил, как при низкой частоте тактирования обеспечить стабильную выходную частоту без дрожания фронтов.
-
Олег Олегович
- Потрогал лапой паяльник
- Сообщения: 347
- Зарегистрирован: Вт авг 20, 2019 19:00:41
Re: Разрабатываю частотник для АД, подскажите пожалуйста.
Sanchogus, А какой мк используете ? Я пока f103 но заказал f303 хочу на неё перейти .
Добавлено after 1 minute 58 seconds:
Сегодня дополню формулу чтоб была и амплитуда .Выложу.
Добавлено after 1 minute 58 seconds:
Сегодня дополню формулу чтоб была и амплитуда .Выложу.
- Sanchogus
- Нашел транзистор. Понюхал.
- Сообщения: 179
- Зарегистрирован: Ср окт 07, 2015 13:13:40
- Откуда: МО, г. Воскресенск
- Контактная информация:
Re: Разрабатываю частотник для АД, подскажите пожалуйста.
F103c8t6, но рисую вариант stm32g070kb. Удобный корпус для пайки 32 пина, 2 ноги питания, норм цена, 2.5 Мсемпла ацп и куча таймеров.
В качестве силы был stgips20k60 (точнее он и сейчас есть), сейчас смотрю под ikcm20l60, ибо дешевле (500-600 р за модуль). Целевая мощность 1.5-2.2 кВт в зависимости от модуля.
В качестве силы был 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: Разрабатываю частотник для АД, подскажите пожалуйста.
Для проверки построить в экселе график для всех углов с ячейкой под задание амплитуды.
Если при нулевой амплитуде будет линия по уровню 50%, а при 100% синус на полный размах от нуля до макс заполнения в вершинах, то норм.
Если при нулевой амплитуде будет линия по уровню 50%, а при 100% синус на полный размах от нуля до макс заполнения в вершинах, то норм.
-
Олег Олегович
- Потрогал лапой паяльник
- Сообщения: 347
- Зарегистрирован: Вт авг 20, 2019 19:00:41
Re: Разрабатываю частотник для АД, подскажите пожалуйста.
Sanchogus, Смотрел значения в массиве так и есть .
- Starichok51
- Модератор
- Сообщения: 19040
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: Разрабатываю частотник для АД, подскажите пожалуйста.
ошибочка тут закралась.Олег Олегович писал(а):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: Разрабатываю частотник для АД, подскажите пожалуйста.
А значения синуса раскидать по таблице, т.к. нечего на МК считать операции с плавающей точкой без FPU. 
Может амплитуду еще на полпериода (500) умножить?
Если будет угол, который сделает синус единицей, то получим при 100% амплитуде 500 + 1*100, что несколько недотягивает до тысячи, ну и при вычислении синуса = -1 получим выражение 500-1*100 = 400, вместо нуля.
Амплитуду умножить на полупериод и поделить на сотню еще. Ну или использовать амплитуду 0...1.
Пользуясь случаем: Есть у кого под рукой названия хороших книг посвященных управлению асинхронным двигателем и векторному управлению АД, желательно с практической точки зрения.
я считаю, должно быть так:
arr_pwm_1 [a_] = 500 + sin (a_ / 57.29578) * amplituda_.
Может амплитуду еще на полпериода (500) умножить?
Если будет угол, который сделает синус единицей, то получим при 100% амплитуде 500 + 1*100, что несколько недотягивает до тысячи, ну и при вычислении синуса = -1 получим выражение 500-1*100 = 400, вместо нуля.
Амплитуду умножить на полупериод и поделить на сотню еще. Ну или использовать амплитуду 0...1.
Пользуясь случаем: Есть у кого под рукой названия хороших книг посвященных управлению асинхронным двигателем и векторному управлению АД, желательно с практической точки зрения.