多机驱动振动系统同步控制理论【附模型】
✨ 长期致力于振动机械、自同步、控制同步、GA-BP PID、定速比研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1GA-BP神经网络PID控制器设计及其参数自整定针对双机驱动振动系统中两台感应电机难以实现零相位差同步运动的问题设计一种基于遗传算法优化的反向传播神经网络比例积分微分控制器。控制器结构为3-6-3三层网络输入层为两个电机的转速偏差、相位偏差及其变化率输出层为比例积分微分三参数调整量。遗传算法用于离线预训练网络的初始权值种群规模设为50编码方式为实数编码适应度函数为转速偏差绝对值积分与相位偏差绝对值积分的加权和。训练数据集通过在不同工况下采集电机运行数据获得包含空载、轻载、重载三种负载条件。仿真结果表明当两电机目标转速均为1200转每分钟时未加控制时相位差在负80度到正70度之间波动加入GA-BP比例积分微分控制器后相位差在2.3秒内收敛到零附近稳态波动范围缩小到±1.2度。2变速比工况下的主从式定速比控制策略将振动系统扩展到需要维持恒定速比的两电机场景例如主电机转速为1000转每分钟从电机需要精确维持在750转每分钟速比0.75。设计一种主从式级联控制架构主电机采用转速闭环控制维持给定值从电机的主控制器接收主电机的实际转速乘以速比作为目标值辅控制器引入相位同步补偿环节。补偿环节根据从电机与主电机之间的实时相位差通过一个非线性函数计算附加转速修正量该函数在相位差小于10度时输出与相位差成正比的微小修正在相位差大于10度时输出饱和修正值。在振动系统参数改变例如偏心块质量增加20%的工况下传统主从控制在2秒内出现约30度相位差发散趋势而加入相位补偿的定速比控制使得相位差始终保持在±5度以内。三三机驱动系统的分布式协同同步控制将控制对象扩展为三台同向旋转电机驱动的振动机械每台电机装备独立的局部控制器相邻电机之间通过工业以太网交换转速和相位信息形成环状通信拓扑。控制律分为两个层次速度一致性层使三台电机的平均转速趋近于给定值相位同步层使任意两台电机之间的相位差趋近于零。采用滑模控制来实现相位同步滑模面定义为三台电机两两相位差的线性组合。为抑制由于机械耦合导致的扭转振动在控制律中加入一个基于振动加速度反馈的阻尼注入项加速度计安装在振动质体上信号经过带通滤波后反馈到各电机的转矩给定中。在Matlab/Simulink中搭建包含完整机械动力学模型的仿真三台电机启动过程存在不同程度的转速超调最大超调量8%在滑模控制器作用下三机相位差在4秒内同步到±2度以内与传统交叉耦合控制相比调节时间缩短37%。import numpy as np import tensorflow as tf from scipy.integrate import odeint import random class GABPNNPID: def __init__(self, n_input3, n_hidden6, n_output3): self.weights1 np.random.randn(n_input, n_hidden) * 0.1 self.weights2 np.random.randn(n_hidden, n_output) * 0.1 self.Kp 0.5 self.Ki 0.05 self.Kd 0.01 self.prev_error 0 self.integral 0 def sigmoid(self, x): return 1.0 / (1.0 np.exp(-np.clip(x, -5, 5))) def forward(self, e, de, ie): x np.array([e, de, ie]) h self.sigmoid(np.dot(x, self.weights1)) delta np.dot(h, self.weights2) self.Kp delta[0] * 0.01 self.Ki delta[1] * 0.001 self.Kd delta[2] * 0.005 self.Kp np.clip(self.Kp, 0.1, 2.0) self.Ki np.clip(self.Ki, 0.01, 0.5) self.Kd np.clip(self.Kd, 0.0, 0.2) output self.Kp * e self.Ki * self.integral self.Kd * de self.integral e * 0.01 self.prev_error e return output class DistributedSyncController: def __init__(self, node_id, num_nodes3): self.id node_id self.N num_nodes self.gamma 2.5 self.alpha 0.8 self.omega_ref 1200 * 2 * np.pi / 60 # rad/s self.omega_hat self.omega_ref self.theta 0.0 def control_law(self, omega_local, theta_local, neighbors_omega, neighbors_theta): # speed consensus omega_avg np.mean([omega_local] neighbors_omega) speed_err self.omega_ref - omega_avg # phase sync using sliding mode phase_err_sum 0 for nb_theta in neighbors_theta: phase_err theta_local - nb_theta # wrap to [-pi, pi] phase_err (phase_err np.pi) % (2*np.pi) - np.pi phase_err_sum phase_err s phase_err_sum self.alpha * speed_err # equivalent control switching tau_eq self.gamma * s tau_sw 0.5 * np.sign(s) torque tau_eq tau_sw return np.clip(torque, -50, 50) class VibrationMechanicalModel: def __init__(self, J0.12, k25000, c180, m_ecc0.15, r_ecc0.08): self.J J self.k k self.c c self.m_ecc m_ecc self.r r_ecc def dynamics(self, state, t, torque1, torque2, torque3): # state: [omega1, theta1, omega2, theta2, omega3, theta3, x, vx, y, vy] omega state[0::2] theta state[1::2] x, vx, y, vy state[6], state[7], state[8], state[9] # coupling forces from vibrating body Fx -self.k * x - self.c * vx Fy -self.k * y - self.c * vy domega np.zeros(3) for i in range(3): M_coupling self.m_ecc * self.r * (Fx * np.sin(theta[i]) Fy * np.cos(theta[i])) domega[i] (torque1[i] - M_coupling) / self.J dtheta omega return [domega[0], dtheta[0], domega[1], dtheta[1], domega[2], dtheta[2], vx, Fx/30, vy, Fy/30] # simulation controller0 DistributedSyncController(0) model VibrationMechanicalModel() state0 [0,0, 0,0, 0,0, 0,0, 0,0] t np.linspace(0, 10, 1000) # run simulation loop (simplified) for step in range(500): torque [controller0.control_law(state0[0], state0[1], [state0[2], state0[4]], [state0[3], state0[5]]), 0, 0] # integrate forward ... pass

相关新闻

最新新闻

日新闻

周新闻

月新闻