Python控制系统仿真案例-RLC电路系统

文章目录

  • [1 问题描述](#1 问题描述)
  • [2 研究分析](#2 研究分析)
  • [3 建立系统的数学模型](#3 建立系统的数学模型)
  • [4 Python仿真程序](#4 Python仿真程序)
  • [5 仿真结果](#5 仿真结果)

1 问题描述

RLC电路是电子学中最基础也最重要的电路系统之一。它由电阻、电感和电容三大无源元件构成,因能产生振荡和谐振现象,常用于滤波、选频、阻抗匹配等。

如图所示是RLC电路系统,取 L = 1 H , C = 1 F L=1H,C=1F L=1H,C=1F,考虑系统在单位阶跃输入情况下,讨论系统不产生振荡时电阻R的取值,其中R的取值不大于 0.1 Ω 0.1Ω 0.1Ω。

2 研究分析

要求研究的问题是:当 L = 1 H , C = 1 F L=1H,C=1F L=1H,C=1F时,分析系统在输入作用 u r ( t ) = 1 ( t ) u_r(t)=1(t) ur(t)=1(t) 的作用下,要使响应不发生振荡,通过计算机仿真研究 R R R应在什么范围内取值。

3 建立系统的数学模型

(1)根据电学中的基尔霍夫定律,可写出原始方程:
L d i ( t ) d t + R i ( t ) + 1 C ∫ i ( t ) d t = u r ( t ) (1.1) L\frac{di(t)}{dt} + Ri(t)+\frac{1}{C}\int i(t)dt=u_r(t) \tag{1.1} Ldtdi(t)+Ri(t)+C1∫i(t)dt=ur(t)(1.1)

(2)式 ( 1.1 ) (1.1) (1.1) 中 i i i 是中间变量,它与输出有如下关系:

u c ( t ) = 1 C ∫ i ( t ) d t (1.2) u_c(t) = \frac{1}{C} \int i(t)dt \tag{1.2} uc(t)=C1∫i(t)dt(1.2)

(3)消去式 ( 1.1 ) (1.1) (1.1)、式 ( 1.2 ) (1.2) (1.2)的中间变量 i i i后,便得输入与输出的微分方程式:
L C d 2 u c ( t ) d t 2 + R C d u c ( t ) d t + u c ( t ) = u r ( t ) (1.3) LC\frac{d^2 u_c(t)}{dt^2} + RC \frac{du_c(t)}{dt} + u_c(t) = u_r(t) \tag{1.3} LCdt2d2uc(t)+RCdtduc(t)+uc(t)=ur(t)(1.3)

(4)将式 ( 1.3 ) (1.3) (1.3)转换成状态方程及输出方程形式:

x 1 ˙ ( t ) x 2 ˙ ( t ) \] = \[ 0 1 − R L − 1 L C \] \[ x 1 ( t ) x 2 ( t ) \] + \[ 0 1 L C \] u r ( t ) u c ( t ) = \[ 1 0 \] \[ x 1 ( t ) x 2 ( t ) \] (1.4) \\begin{bmatrix} \\dot{x_1}(t) \\\\ \\dot{x_2}(t) \\end{bmatrix} = \\begin{bmatrix} 0 \& 1 \\\\ -\\frac{R}{L} \& -\\frac{1}{LC} \\end{bmatrix} \\begin{bmatrix} x_1(t) \\\\ x_2(t) \\end{bmatrix} + \\begin{bmatrix} 0 \\\\ \\frac{1}{LC} \\end{bmatrix} u_r(t) \\\\ u_c(t)=\\begin{bmatrix} 1 \& 0 \\end{bmatrix}\\begin{bmatrix} x_1(t) \\\\ x_2(t) \\end{bmatrix} \\tag{1.4} \[x1˙(t)x2˙(t)\]=\[0−LR1−LC1\]\[x1(t)x2(t)\]+\[0LC1\]ur(t)uc(t)=\[10\]\[x1(t)x2(t)\](1.4) * 注:状态方程和输出方程的形式为: d x d t = A x + B u y = C x + D u \\frac{dx}{dt}=Ax+Bu \\\\ y=Cx+Du dtdx=Ax+Buy=Cx+Du     其中, x x x是状态向量, u u u是控制向量, y y y是被测信号, A A A、 B B B、 C C C和 D D D是常数矩阵。 (5)将第(4)步转换成离散的状态方程及输出方程,用于计算仿真及编程: \[ x 1 ( ( k + 1 ) T ) x 2 ( ( k + 1 ) T ) \] = \[ x 1 ( k T ) x 2 ( k T ) \] + \[ 0 1 − R L − 1 L C \] \[ x 1 ( k T ) x 2 ( k T ) \] T + \[ 0 1 L C \] u r ( k T ) T u c ( ( k + 1 ) T ) = x 1 ( ( k + 1 ) T ) (1.5) \\begin{bmatrix} x_1((k+1)T) \\\\ x_2((k+1)T) \\end{bmatrix} = \\begin{bmatrix} x_1(kT) \\\\ x_2(kT) \\end{bmatrix} + \\begin{bmatrix} 0 \& 1 \\\\ -\\frac{R}{L} \& -\\frac{1}{LC} \\end{bmatrix} \\begin{bmatrix} x_1(kT) \\\\ x_2(kT) \\end{bmatrix}T + \\begin{bmatrix} 0 \\\\ \\frac{1}{LC} \\end{bmatrix} u_r(kT)T \\\\ u_c((k+1)T)= x_1((k+1)T) \\tag{1.5} \[x1((k+1)T)x2((k+1)T)\]=\[x1(kT)x2(kT)\]+\[0−LR1−LC1\]\[x1(kT)x2(kT)\]T+\[0LC1\]ur(kT)Tuc((k+1)T)=x1((k+1)T)(1.5)     式中, T T T为采样周期。 * 连续方程离散化参考: ## 4 Python仿真程序 ```python import numpy as np import matplotlib.pyplot as plt # 设置字体为 SimHei(黑体) plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 正常显示负号 L = 1 # 输入RLC电路的电感值 C = 1 # 输入RLC电路的电容值 R = float(input('请输入R的电阻值(Ω):')) # 输入R的电阻值(Ω) 0.1、0.25、0.3、1、3、6 t = 0 T = 0.001 # 设置系统采样时间T的值 A = np.array([[0, 1], [-R/L, -1/(L*C)]]) # 计算系统状态方程矩阵的值 B = np.array([[0], [1/(L*C)]]) tmax = 60 # 设置系统的仿真总时间tmax x = np.array([[0], [0]]) # 设置状态变量初值 Y = [0] # Y为记录输出 H = [t] # H用于记录t的值 while t < tmax: xs = x + (A @ x + B) * T # 计算离散状态方程 y = xs[0, 0] # 计算离散输出方程 t = t + T Y.append(y) H.append(t) # 记录y和t的值 x = xs plt.plot(H, Y, 'k') # 绘制输出曲线 plt.xlabel('时间 (s)') plt.ylabel('输出 y') plt.title('RLC电路响应') plt.grid(True) plt.show() ``` ## 5 仿真结果 | ![](https://i-blog.csdnimg.cn/direct/2c1177431d384cd98e99ef724d485674.png) | ![](https://i-blog.csdnimg.cn/direct/265e9e216a484b0b9acc628ae57cfee4.png) | |:--------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------:| | ![](https://i-blog.csdnimg.cn/direct/1a8ead5e5d954d0f9943cfb94f0d1ec5.png) | ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/cf13908f6214458cbebfc326d52bc552.png) |

相关推荐
zhangfeng11331 小时前
GitHub博主hiyouga与LlamaFactory项目研究报告
python·大语言模型
wanderful_1 小时前
自定义用户体系下 Django 业务模块开发踩坑与通用解决方案(技术分享版)
后端·python·django
纯.Pure_Jin(g)1 小时前
【Python练习五】Python 正则与网络爬虫实战:专项练习(2道经典练习带你巩固基础——看完包会)
开发语言·vscode·python
喵手1 小时前
Python爬虫实战:招聘会参会企业数据采集实战 - 分页抓取、去重与增量更新完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·增量·零基础python爬虫教学·招聘会参会企业数据采集·分页抓取去重
㓗冽1 小时前
矩阵问题(二维数组)-基础题70th + 发牌(二维数组)-基础题71th + 数字金字塔(二维数组)-基础题72th
c++·算法·矩阵
小鸡吃米…2 小时前
TensorFlow 实现循环神经网络
人工智能·python·tensorflow
阿钱真强道2 小时前
14 ThingsBoard实战:从零搭建设备配置+设备,完成MQTT温湿度上行/目标温度下行测试(对比JetLinks)
java·网络·python·网络协议
ssswywywht2 小时前
python练习
开发语言·python
PD我是你的真爱粉2 小时前
RabbitMQRPC与死信队列
后端·python·中间件