m0_74292556 2023-07-06 15:57 采纳率: 40%
浏览 92
已结题

电机参数辨识的参数辨识值迭代问题

根据异步电机的电压和电流输入,来辨识电机的定子电阻、转子电阻、定子漏感、转子漏感和互感,根据状态方程可得辨识值,再把参数辨识值代入状态方程中,得到电流的辨识值,把电流误差平方(输入电流值-电流辨识值)作为目标函数确定最终的函数,但是这个迭代过程如何用matlab实现呢?
离散化的状态方程如下图

img


matlab中的代码如下

            sigma = 1-(L_m(i)^2)/(L_s(i)*L_r(i));
            tau_r = L_r(i)/R_r(i);
            B11 = -(R_s(i)/(sigma*L_s(i))+(1-sigma)/(sigma*tau_r));
            B12 = L_m(i)/(sigma*tau_r*L_s(i)*L_r(i));
            B13 = L_m(i)/(sigma*L_s(i)*L_r(i));
            B14 = 1/(sigma*L_s(i));
            B21 = L_m(i)/tau_r;
            B22=-1/tau_r;

            I_d(1) = I_d(1) + T*(B11*I_d(1)+B12*psi_rd(i,k)+B13*w_r*psi_rq(i,k)+B14*U_d);
            I_q(1) = I_q(1) + T*(B11*I_q(1)+B12*psi_rq(i,k)-B13*w_r*psi_rd(i,k)+B14*U_q);
            psi_rd(i,k+1) = psi_rd(i,k) + T*(B21*I_d(1)+B22*psi_rd(i,k)-w_r*psi_rq(i,k));
            psi_rq(i,k+1) = psi_rq(i,k) + T*(B21*I_q(1)+B22*psi_rq(i,k)+w_r*psi_rd(i,k));

            sigma_id = 1-(L_m(i)^2)/(L_s(i)*L_r(i));
            tau_r_id = L_r(i)/R_r(i);
            B11_id = -(R_s(i)/(sigma_id*L_s(i))+(1-sigma_id)/(sigma_id*tau_r_id));
            B12_id = L_m(i)/(sigma_id*tau_r_id*L_s(i)*L_r(i));
            B13_id = L_m(i)/(sigma_id*L_s(i)*L_r(i));
            B14_id = 1/(sigma_id*L_s(i));
            B21_id = L_m(i)/tau_r_id;
            B22_id = -1/tau_r_id;

            I_d_id(i,k+1) = I_d_id(i,k) + T*(B11_id*I_d_id(i,k)+B12_id*psi_rd_id(i,k)+B13_id*w_r*psi_rq_id(i,k)+B14_id*U_d);
            I_q_id(i,k+1) = I_q_id(i,k) + T*(B11_id*I_q_id(i,k)+B12_id*psi_rq_id(i,k)-B13_id*w_r*psi_rd_id(i,k)+B14_id*U_q);
            psi_rd_id(i,k+1) = psi_rd_id(i,k) + T*(B21_id*I_d_id(i,k)+B22_id*psi_rd_id(i,k)-w_r*psi_rq_id(i,k));
            psi_rq_id(i,k+1) = psi_rq_id(i,k) + T*(B21_id*I_q_id(i,k)+B22_id*psi_rq_id(i,k)+w_r*psi_rd_id(i,k));

        fitness = (sum(((I_d(1)-I_d_id(k)))^2+((I_q(1)-I_q_id(k))/)^2));


  • 写回答

5条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-07-08 10:11
    关注

    我可以为你提供一种实现电机参数辨识的迭代过程的方法,具体步骤如下:

    1. 定义电机的状态方程和输入电流值。根据提供的状态方程,需要定义以下参数:
    2. L_m: 磁链互感
    3. L_s: 定子电感
    4. L_r: 转子电感
    5. R_s: 定子电阻
    6. R_r: 转子电阻

    7. 设置初始的电机参数值。可以将参数初值设为一个估计值或者随机值。

    8. 编写一个迭代过程来优化电机参数。可以使用最小二乘法或其他优化算法,最小化输入电流值与电流辨识值之差的平方。以下是一个示例代码:

    % 定义电机参数
    L_m = 0.1;
    L_s = 0.2;
    L_r = 0.3;
    R_s = 1;
    R_r = 2;
    
    % 设置初始参数估计值
    L_m_est = 0.2;
    L_s_est = 0.3;
    L_r_est = 0.4;
    R_s_est = 1.5;
    R_r_est = 2.5;
    
    % 设置迭代过程的终止条件
    max_iter = 100;
    tolerance = 1e-6;
    
    % 迭代过程
    iter = 1;
    while iter <= max_iter
        % 计算状态方程的各项
        sigma = 1 - (L_m_est^2) / (L_s_est * L_r_est);
        tau_r = L_r_est / R_r_est;
        B11 = - (R_s_est / (sigma * L_s_est)) + ((1 - sigma) / (sigma * tau_r));
        B12 = L_m_est / (sigma * tau_r * L_s_est * L_r_est);
        B13 = L_m_est / (sigma * L_s_est * L_r_est);
        B14 = 1 / (sigma * L_s_est);
    
        % 计算电流辨识值
        % 在此处补充代码
    
        % 在此处计算电流误差的平方并更新参数估计值
    
        % 判断是否满足终止条件
        if <满足终止条件的条件>
            break;
        end
    
        iter = iter + 1;
    end
    
    % 输出最终的电机参数估计值
    disp(['Estimated parameters after ', num2str(iter), ' iterations:']);
    disp(['L_m: ', num2str(L_m_est)]);
    disp(['L_s: ', num2str(L_s_est)]);
    disp(['L_r: ', num2str(L_r_est)]);
    disp(['R_s: ', num2str(R_s_est)]);
    disp(['R_r: ', num2str(R_r_est)]);
    

    请注意,在代码中的 <满足终止条件的条件> 处,需要根据你的具体需求设置终止条件。例如,可以判断电流误差的平方是否小于某个阈值,或者判断参数估计值的变化是否小于某个阈值。

    同时,在代码中,需要将计算电流辨识值和电流误差的部分进行补充。根据你的具体问题,你可能需要使用其他方法或工具箱来计算电流辨识值。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月13日
  • 修改了问题 7月7日
  • 创建了问题 7月6日