<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      foc

      #include <stdio.h>
      #include <math.h>
      
      // Constants
      #define PI 3.14159265358979323846
      
      // Function prototypes
      void smo(double ia, double ib, double v_alpha, double v_beta, double *theta, double *omega, double Ts, double K_slide);
      void calculate_voltages(double id, double iq, double Rs, double Ld, double Lq, double lambda_m, double omega_e, double *vd, double *vq);
      void inverse_park_transform(double vd, double vq, double theta, double *valpha, double *vbeta);
      void svpwm(double valpha, double vbeta, double Vdc, double Ts, double *dutyA, double *dutyB, double *dutyC, int *sector);
      double pid_controller(double setpoint, double measured_value, double *prev_error, double *integral, double Kp, double Ki, double Kd, double dt);
      
      int main() {
      // Example parameters
      double id = 5.0; // d-axis current in amperes
      double iq = 10.0; // q-axis current in amperes
      double ia = 5.0, ib = 5.0; // Phase currents
      double Rs = 0.5; // Stator resistance in ohms
      double Ld = 0.001; // d-axis inductance in henries
      double Lq = 0.001; // q-axis inductance in henries
      double lambda_m = 0.01;// Permanent magnet flux linkage in Wb
      double theta = PI/4; // Rotor angle in radians (initial estimate)
      double Vdc = 300.0; // DC bus voltage in volts
      double Ts = 0.0001; // Sampling time in seconds (100 μs, corresponding to a 10 kHz PWM frequency)
      
      // PID controller parameters
      double Kp_pid = 1.0, Ki_pid = 0.1, Kd_pid = 0.01;
      double setpoint = 200.0; // Desired speed in rad/s
      double prev_error = 0.0, integral_pid = 0.0;
      
      // SMO parameters
      double K_slide = 0.1;
      
      // Variables for voltages
      double vd, vq, valpha, vbeta;
      
      // Variables for SVPWM duty cycles and sector
      double dutyA, dutyB, dutyC;
      int sector;
      
      // Main control loop (simplified)
      for (int i = 0; i < 1000; i++) {
      // SMO to estimate theta and omega
      smo(ia, ib, valpha, vbeta, &theta, &omega_e, Ts, K_slide);
      
      // PID controller to regulate speed
      double iq_ref = pid_controller(setpoint, omega_e, &prev_error, &integral_pid, Kp_pid, Ki_pid, Kd_pid, Ts);
      
      // Update iq with iq_ref
      iq = iq_ref;
      
      // Calculate voltages in d-q frame
      calculate_voltages(id, iq, Rs, Ld, Lq, lambda_m, omega_e, &vd, &vq);
      
      // Perform inverse Park transformation to get alpha-beta voltages
      inverse_park_transform(vd, vq, theta, &valpha, &vbeta);
      
      // Calculate SVPWM duty cycles and sector
      svpwm(valpha, vbeta, Vdc, Ts, &dutyA, &dutyB, &dutyC, &sector);
      
      // Print results
      printf("Duty cycles: A = %f, B = %f, C = %f, Sector = %d\n", dutyA, dutyB, dutyC, sector);
      printf("Estimated theta: %f, omega: %f\n", theta, omega_e);
      }
      
      return 0;
      }
      
      void smo(double ia, double ib, double v_alpha, double v_beta, double *theta, double *omega, double Ts, double K_slide) {
      static double x_alpha = 0.0, x_beta = 0.0;
      static double z_alpha = 0.0, z_beta = 0.0;
      
      // Sliding Mode Observer equations
      double x_alpha_dot = v_alpha - K_slide * (x_alpha - z_alpha);
      double x_beta_dot = v_beta - K_slide * (x_beta - z_beta);
      
      // Integrate
      x_alpha += x_alpha_dot * Ts;
      x_beta += x_beta_dot * Ts;
      
      // Calculate z_alpha and z_beta
      z_alpha = x_alpha - K_slide * (x_alpha - z_alpha);
      z_beta = x_beta - K_slide * (x_beta - z_beta);
      
      // Calculate estimated theta and omega
      *theta = atan2(z_beta, z_alpha);
      *omega = (*theta - z_alpha) / Ts;
      
      // Keep theta within 0 to 2*PI
      if (*theta >= 2 * PI) {
      *theta -= 2 * PI;
      } else if (*theta < 0) {
      *theta += 2 * PI;
      }
      }
      
      void calculate_voltages(double id, double iq, double Rs, double Ld, double Lq, double lambda_m, double omega_e, double *vd, double *vq) {
      *vd = Rs * id - omega_e * Lq * iq;
      *vq = Rs * iq + omega_e * (Ld * id + lambda_m);
      }
      
      void inverse_park_transform(double vd, double vq, double theta, double *valpha, double *vbeta) {
      *valpha = vd * cos(theta) - vq * sin(theta);
      *vbeta = vd * sin(theta) + vq * cos(theta);
      }
      
      void svpwm(double valpha, double vbeta, double Vdc, double Ts, double *dutyA, double *dutyB, double *dutyC, int *sector) {
      double Vref = sqrt(valpha * valpha + vbeta * vbeta);
      double angle = atan2(vbeta, valpha);
      
      // Determine sector
      if (angle >= 0 && angle < PI/3) {
      *sector = 1;
      } else if (angle >= PI/3 && angle < 2*PI/3) {
      *sector = 2;
      } else if (angle >= 2*PI/3 && angle < PI) {
      *sector = 3;
      } else if (angle >= -PI && angle < -2*PI/3) {
      *sector = 4;
      } else if (angle >= -2*PI/3 && angle < -PI/3) {
      *sector = 5;
      } else {
      *sector = 6;
      }
      
      // Calculate times for switching states
      double T1 = (Vref * sin(PI / 3 - angle)) / (sqrt(3) * Vdc);
      double T2 = (Vref * sin(angle)) / (sqrt(3) * Vdc);
      double T0 = Ts - T1 - T2;
      
      // Calculate duty cycles for each phase
      *dutyA = (T1 + T2 + T0 / 2) / Ts;
      *dutyB = (T2 + T0 / 2) / Ts;
      *dutyC = (T0 / 2) / Ts;
      }
      
      double pid_controller(double setpoint, double measured_value, double *prev_error, double *integral, double Kp, double Ki, double Kd, double dt) {
      double error = setpoint - measured_value;
      *integral += error * dt;
      double derivative = (error - *prev_error) / dt;
      double output = Kp * error + Ki * (*integral) + Kd * derivative;
      *prev_error = error;
      return output;
      }

       

      posted @ 2024-08-20 15:00  =沒有編程天賦=  閱讀(53)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 中日韩中文字幕一区二区| 内射干少妇亚洲69xxx| 河北省| 国模无吗一区二区二区视频| 慈利县| 亚洲av无码牛牛影视在线二区| 人妻系列无码专区免费| 动漫AV纯肉无码AV电影网| 加勒比久久综合网天天| 亚洲综合久久一区二区三区| 国产精品一区二区传媒蜜臀| 亚洲精品一区国产精品| 中国性欧美videofree精品| 克拉玛依市| 中文字幕av无码免费一区| 性一交一乱一伦| 元码人妻精品一区二区三区9| 亚洲AV无码乱码在线观看性色扶| 视频一区视频二区制服丝袜| 国产成人无码www免费视频播放| 四虎永久在线精品无码视频| 色综合久久综合久鬼色88| 精品亚洲国产成人| 亚洲熟妇熟女久久精品综合 | 无码日韩av一区二区三区| 影音先锋大黄瓜视频| 97精品人妻系列无码人妻| 亚洲精品第一区二区在线| 国产亚洲精品自在久久| 亚洲无人区码二码三码区| 高清自拍亚洲精品二区| 免费人成在线观看网站| 变态另类视频一区二区三区| 亚洲色一色噜一噜噜噜| 河南省| 精品 无码 国产观看| 亚洲老女人区一区二视频| 亚洲av午夜成人片| 明光市| 99视频在线精品国自产拍 | 午夜精品久久久久久久久|