PROGCONT.RU

Форма входа







Регистрация Вход/

Расчет таблицы SIN для управления асинхронным трехфазным двигателем.

PERIOD

NUMBER

OFFSET

 Period and Offset

 PERIOD-значение периода таймера, искусственным нулем будет период деленный на два.
 NUMBER-количество вычислений синусоиды, должно быть только четным.
 OFFSET-синусоида смещенная относительно нуля периода, используется для понижения момента на валу, значение должно быть меньше периода или ноль(будет синусоида периода).
  Period and Offset-если поставите галочку будет выводится два результата PERIOD и OFFSET.


 Что бы рассчитать правильную синусоиду вы должны выполнить два условия для NUMBER, первое значение должно быть четным и второе делится без остатка на три!


 Расчет смещения фаз в таблице выполняется следующим образом например имеем NUMBER со значением 24( четное и делится на три) и знаем что все фазы должны быть смещены друг от друга на 120 градусов которых в 360 градусах будет 360/120=3, находим смещение для фаз в нашем вычисленном массиве будет 24/3=8, если фаза_1 номер массива 0 то фаза_2 фаза_1+8=8, фаза_3 фаза_2+8=16 или W=fase[0], U=fase[8] и V=fase[16].


Комментарии  Только зарегистрированные пользователи могут оставлять комментарии!

NOPivnevnikolay   2018-04-13 14:22:55
Огромное спасибо!!!!

NOteseiaaw   2018-04-13 19:37:47
Здравствуйте, разобрались с программой?

NONikolay   2019-02-12 23:44:27
Вечер добрый ! Да разобрался в моём понимании (может я и не прав) расчёт синусоиды будет выглядеть так... Я приведу код на СИ, посмотреть и проверить работу можно вот здесь https://www.onlinegdb.com/online_c_compiler. Данный код можно адаптировать для плавного разгона и остановки двигателя ... Я постарался соблюсти все ВАШИ условия перечисленные выше.. В сотый раз спасибо!!! #include <stdio.h> #include <stdlib.h> #include <math.h> int Period;int Number;int Offset;int z;int x;double pi = 3.14159;float a;float b; int main() { system("chcp 1251"); system("cls"); printf("Введите значение периода = "); scanf("%d",&Period); printf("Period = %d OK! ",Period); printf("Введите значение Number = "); while(1){ scanf("%d",&Number); if (Number %2 == 0 && Number %3 == 0 ){ printf("Number = %d OK! ",Number); break; } else{ printf("Значение точек синуса должно быть чётным и делится на три "); continue; } } printf("Введите значение OFFSET = "); while(1){ scanf("%d",&Offset); if (Offset<Period || Offset == 0 ){ printf("Offset = %d OK! ",Offset); break; } else{ printf("значение OFFSET, должно быть меньше периода (Period) "); printf("либо значение OFFSET должно быть равно 0... "); continue; } } z = Period/2; x = Offset/2; a = (float)2.000*(1.000/Number); b = (float)2.000*(1.000/Number); printf(" a = %8.4f ",a); printf("Period .... "); for (int i = 0;i<Number;i++){ int q; printf("%d",q = z+(z*sin(pi*i*a))); printf(";"); } if(Offset<Period&&Offset!=0){ printf(" b = %8.4f ",b); printf("OFFSET .... "); for (int i = 0;i<Number;i++){ int m; printf("%d",m = z+(x*sin(pi*i*a))); printf(";"); } } else if (Offset==0) { printf(" Good Bye!!!"); } getchar(); return 0;}

NONikolay   2019-02-13 00:08:58
Весь код получился в куче ... на https://www.onlinegdb.com/online_c_compiler. будет кидать ошибку при нажатии на RUN... что бы избежать ошибки надо #include <stdio.h> #include <stdlib.h> #include <math.h> разделить нажатием клавиши ENTER #include <stdio.h> #include <stdlib.h> #include <math.h> int Period;int Number; и т.д. и должно всё заработать ... у меня работает!

NONikolay   2019-02-16 18:11:09
https://github.com/PivnevNikolay/SIN-calculation/tree/master/sine%20calculation