单相双半波可控整流电路的MATLAB仿真设计

1设计目的和要求

1.1设计目的

1)掌握单相双半波(全波输出型)可控整流的主电路结构与工作过程;

2)理解晶闸管移相触发控制(触发角α)对输出电压/电流/功率的调节作用;

3)学习反电势负载(直流电机等效)的简化建模与仿真方法;

4)使用 MATLAB Online 完成仿真,得到典型波形并形成课程设计报告。

1.2设计技术要求:

1)电源电压:交流 100V / 50Hz;

2)输出功率:约 500W;

3)移相范围:30°~150°;

4)反电势:E=70V;负载为电阻负载(与反电势串联等效)。

1.3设计内容:

完成主电路与控制思路说明、参数选取与计算、MATLAB 仿真建模;输出关键节点波形(vs、vL、i等)、以及 Pavg-α 关系曲线;总结仿真中遇到的问题与解决方法。

2 仿真结果分析

2.1 仿真方案介绍

2.1.1 仿真思路

采用时间域离散仿真:在多个工频周期内生成正弦电源vs(t),并用|vs(t)|表示全波输出外形;用相位折叠θ=mod(ωt,π)描述每半周;结合触发角α与反电势门槛E判断导通区间;进而计算负载电压vL(t)、负载电流i(t),并由p(t)=vL(t)·i(t)求平均功率Pavg。

2.1.2 MATLAB脚本模型说明

脚本主要由两部分组成:

A)单个α(如90°)下计算并绘制 vs、vL、i 三类典型波形;

B)在α=30°~150°范围内扫描,输出功率表格,并绘制 Pavg-α 曲线。

功率曲线图说明:

具体分析:

1.手算积分

2.采样近似积分

++3++设计工具介绍

3.1 设计工具介绍

3.1.1 MATLAB Online

本课设采用 MATLAB Online 运行脚本进行仿真。MATLAB Online 无需本地安装软件,通过浏览器即可编辑与运行 .m 脚本,并可将生成的图像(PNG)与数据表(CSV)下载到电脑,便于插入课程设计报告。

3.1.2 仿真方式说明

考虑到课程要求以"理解电路工作原理"为主,本次仿真采用理想器件与等效模型:

  • 晶闸管理想开关,导通压降忽略;

  • 单相双半波主电路等效为全波输出的可控整流外形;

  • 反电势负载等效为"电阻R串联直流电压源E(反电势)"。

该方法可仿真得到电压/电流波形及功率随α变化规律,满足课程设计展示与答辩要求。

3.2 设计电路图

3.2.1 主电路结构

单相双半波晶闸管整流常见实现方式为:

A)两只SCR+变压器中心抽头(两半周分别由不同SCR导通);

B)桥式半控整流(两只SCR+两只二极管,输出为全波同向直流)。

本课设为便于仿真与实现,选用桥式半控整流主电路(2SCR+2D),其输出波形与"双半波"在直流侧等效一致。

3.2.2 控制电路与移相触发

控制电路的核心任务是在每个半周的相位角α时刻向对应晶闸管施加门极触发脉冲。实际硬件可采用同步移相触发电路(如锯齿波比较式、UJT同步触发等).

为满足"移相范围30°~150°"的要求,控制电路采用同步移相触发方案。其核心任务是在每个交流半周内,以电源同步信号为基准,在相位延迟角α处产生晶闸管门极触发脉冲,从而控制晶闸管导通时刻,实现直流侧输出电压/功率可调。控制电路典型结构如图3所示,主要由同步信号获取与低压电源、UJT触发脉冲形成电路以及门极隔离/驱动电路三部分组成。

参考网页资料链接:​​​​​​https://instrumentationtools.com/thyristor-triggering-circuits/

3.3 移相范围:30°~150°控制电路参数

4.matlab脚本

等效:

"单相双半波主电路等效为全波输出的可控整流外形",就是:

  • 真实电路 :不管你用的是"两个SCR+中心抽头变压器"(双半波),还是"2SCR+2D 半控桥",它们的目的都是让负载端得到同极性的脉动直流(每个工频周期有两段脉动 → 看起来像全波整流)。

  • 脚本做的"等效" :为了不搭完整器件换流细节,先把交流正弦 vs 做成 |vs| (即 vrec = abs(vs)),把它当作"整流后能提供给负载的瞬时电压外形 "。然后再用触发角 α 和反电势 E 去决定什么时候真正导通

所以"等效为全波输出外形"不是说电路变成了一模一样,而是说:在波形层面先用 |sin| 这个外形代表整流后的直流脉动,再叠加触发/反电势条件决定导通区间。

思维导图:完整的太大了上传不了,

完整脚本:

Matlab 复制代码
%% 单相"双半波/全波半控桥"晶闸管整流(反电势E + 电阻R)
% 题目:交流100V/50Hz,P≈500W,移相范围30°~150°,反电势E=70V
% 说明:该脚本用于 MATLAB Online / MATLAB 运行(不依赖Simulink)。
% 输出:
%   1) 指定alpha(默认90°)的 vs、vL、i 波形
%   2) 扫描 alpha=30:10:150 的 Pavg 表格与曲线
%   3) 自动把图保存为 PNG(可直接插入报告)

clear; clc;

%% ====== 1. 题目参数(按要求填写)======
Vrms = 100;          % 交流有效值(V)
f    = 50;           % 频率(Hz)
E    = 70;           % 反电势(V)
Ptar = 500;          % 目标功率(W)

%% ====== 2. 电源派生量 ======
Vm = sqrt(2)*Vrms;   % 正弦峰值 (100Vrms -> 141.4Vpeak)
w  = 2*pi*f;         % 角频率

%% ====== 3. 负载电阻R选择(最省事:先在alpha=90°设计点调到500W)======
% 你之前测得:alpha=90°, R0=3.6Ω -> P0≈550.8W
% 用"功率≈1/R"近似比例换算到500W:R ≈ R0*(P0/Ptar) ≈ 3.97Ω
R = 3.97;            % 报告可写:选标准值 4Ω

%% ====== 4. 画一个设计点的波形(建议alpha=90°,也可改30/150)======
alpha_deg = 90;

[t, vs, vrec, vL, i, Pavg] = sim_one_alpha(alpha_deg, R, Vm, w, E, f);

fprintf("alpha=%g deg, R=%.3f ohm, Pavg=%.1f W\n", alpha_deg, R, Pavg);

figure(1); clf;
plot(t, vs); grid on;
title('vs (AC source)'); xlabel('t (s)'); ylabel('V');
saveas(gcf, 'fig1_vs.png');

figure(2); clf;
plot(t, vrec, t, vL); grid on;
legend('rectified |vs|','load voltage vL');
title('Voltage waveform'); xlabel('t (s)'); ylabel('V');
saveas(gcf, 'fig2_voltage.png');

figure(3); clf;
plot(t, i); grid on;
title('Load current i'); xlabel('t (s)'); ylabel('A');
saveas(gcf, 'fig3_current.png');

%% ====== 5. 扫描alpha=30~150,输出表格/曲线 ======
alpha_list = 30:10:150;     % 可改 30:5:150 更密
P_list = zeros(size(alpha_list));

for k = 1:numel(alpha_list)
    P_list(k) = calc_Pavg(alpha_list(k), R, Vm, w, E, f);
end

T = table(alpha_list(:), P_list(:), 'VariableNames', {'alpha_deg','Pavg_W'});
disp(T);

figure(4); clf;
plot(alpha_list, P_list, '-o'); grid on;
xlabel('alpha (deg)'); ylabel('Pavg (W)');
title('Pavg vs alpha');
saveas(gcf, 'fig4_Pavg_vs_alpha.png');

% 也把表格导出为CSV(可选)
writetable(T, 'Pavg_table.csv');

%% ====== 6. 本文件用到的函数(局部函数)======
function [t, vs, vrec, vL, i, Pavg] = sim_one_alpha(alpha_deg, R, Vm, w, E, f)
    % 时间轴:4个工频周期,60000点(波形更平滑)
    Tline = 1/f;
    t = linspace(0, 4*Tline, 60000);

    % 交流源 + "全波整流外形"
    vs   = Vm*sin(w*t);
    vrec = abs(vs);              % 等效为全波整流后的瞬时电压外形
    theta = mod(w*t, pi);        % 折叠到每个半周 [0, pi)

    % 导通条件:1) 触发角alpha之后  2) vrec必须大于反电势E(否则没有电流)
    alpha = deg2rad(alpha_deg);

    if E >= Vm
        cond = false(size(t));   % 反电势比峰值还高 -> 永不导通
    else
        thetaE = asin(E/Vm);     % vrec=Vm*sin(theta)=E 的相位点
        theta_on  = max(alpha, thetaE);
        theta_off = pi - thetaE;
        cond = (theta >= theta_on) & (theta <= theta_off);
    end

    % 电流与负载端电压
    i = zeros(size(t));
    i(cond) = (vrec(cond) - E)/R;    % 负载= R + E

    vL = E*ones(size(t));            % 关断时:端电压近似为反电势(开路)
    vL(cond) = vrec(cond);           % 导通时:vL=E+iR=vrec

    % 功率
    p = vL .* i;
    Pavg = mean(p);
end

function Pavg = calc_Pavg(alpha_deg, R, Vm, w, E, f)
    % 只算平均功率(不返回波形)
    Tline = 1/f;
    t = linspace(0, 4*Tline, 60000);

    vs   = Vm*sin(w*t);
    vrec = abs(vs);
    theta = mod(w*t, pi);

    alpha = deg2rad(alpha_deg);

    if E >= Vm
        cond = false(size(t));
    else
        thetaE = asin(E/Vm);
        theta_on  = max(alpha, thetaE);
        theta_off = pi - thetaE;
        cond = (theta >= theta_on) & (theta <= theta_off);
    end

    i = zeros(size(t));
    i(cond) = (vrec(cond) - E)/R;

    p = vrec .* i;      % cond区间 vrec=vL,所以这样写也成立
    Pavg = mean(p);
end

详解


0)先看这份脚本总体在做什么

它做三件事:

  1. 固定一个触发角(默认 α=90°),算出并画出
  • vs(t):原始交流正弦

  • vL(t):负载端电压(考虑反电势E + R)

  • i(t):负载电流

  1. 扫描 α=30:10:150,计算每个 α 对应的平均功率 Pavg,输出表格 + 曲线 Pavg-α

  2. 自动把图保存成 PNG,把表格保存成 CSV(方便你插报告、打包交作业)


1)脚本开头:清空环境

clear; clc;

  • clear:清掉工作区变量(避免上次运行残留变量干扰)

  • clc:清空命令行窗口显示(不影响变量)


2)题目参数:你报告里要写的"已知条件"

Vrms = 100; % 交流有效值(V) f = 50; % 频率(Hz) E = 70; % 反电势(V) Ptar = 500; % 目标功率(W)

  • Vrms:交流 有效值(不是峰值)。100 Vrms 是题目给的。

  • f:50 Hz → 一个工频周期 T=1/f=0.02s

  • E:反电势 70V(你把电机简化成"反电势电压源 + 电阻"时的电压源)

  • Ptar:目标功率 500W(用于选 R 的参考)


3)电源派生量:把"有效值"变成"峰值 + 角频率"

复制代码
Vm = sqrt(2)*Vrms; % 正弦峰值 (100Vrms -> 141.4Vpeak) 
w = 2*pi*f; % 角频率 


4)选负载电阻 R:用"最省事的课设办法"

复制代码
R = 3.97; % 报告可写:选标准值 4Ω 

你这里直接写死了 R=3.97Ω(报告里可以写选标准值 4Ω),它来源是你之前测得:

  • α=90°、R0=3.6Ω 时算出来 P0≈550.8W

5)仿真一个触发角:调用函数 sim_one_alpha

复制代码
5.1 alpha_deg = 90 是什么
  • alpha_deg:触发角 α(单位:度),题目要求能在 30°~150° 变化
5.2 这一句最关键:函数返回 6 个量

sim_one_alpha(...) 返回:

  • t:时间轴(0~4个周期)

  • vs:原始交流电压 Vm*sin(w*t)

  • vrec:整流外形 abs(vs)(等效全波整流)

  • vL:负载端电压(考虑反电势导通/关断后的结果)

  • i:负载电流

  • Pavg:平均功率(mean(p)

5.3 fprintf 是打印格式化文本

%g%.3f%.1f 是格式控制:

  • %.3f:保留 3 位小数

  • %.1f:保留 1 位小数


6)画图 + 保存 PNG:MATLAB 的基本套路

复制代码

你要认识这些函数:

  • figure(1):打开/切换到编号为 1 的图窗

  • clf:清空当前图窗(防止叠加上一次曲线)

  • plot(x,y):画曲线

  • grid on:显示网格

  • title / xlabel / ylabel:标题、横纵轴文字

  • gcf:get current figure(当前图窗句柄)

  • saveas(gcf, 'xxx.png'):把当前图保存成 PNG(文件会出现在左侧 Files 里)

第二张图是电压对比:

复制代码

legend 是图例(两条曲线分别叫什么)。

第三张图画电流 i(t) 同理。


7)扫 α:for 循环 + calc_Pavg 只算功率(更快)

复制代码

你要懂这些 MATLAB 基础:

7.1 30:10:150 是"步进向量"

等价于:[30,40,50,...,150]

7.2 zeros(size(alpha_list))
  • size(alpha_list) 返回它的尺寸(比如 1×13)

  • zeros(...) 生成同样大小的全 0 数组

    目的:先把 P_list 分配好空间(写代码习惯更规范)

7.3 numel(alpha_list)

返回元素个数(比如 13 个),用于循环次数。


8)输出表格 + 导出 CSV

复制代码
  • alpha_list(:):把行向量强制变成"列向量"(写表格更标准)

  • table(...):创建表格数据(非常适合做报告)

  • disp(T):在命令行显示表格

  • writetable(T,'xxx.csv'):导出 CSV(Excel 也能打开)


9)画 Pavg-α 曲线 + 保存

复制代码

'-o' 意味着:折线 + 圆点标记(让曲线看起来像采样点扫描)。


重点:你脚本后半段的两个"局部函数"怎么理解

MATLAB 允许在脚本末尾写函数(叫 local functions )。

好处:一个 .m 文件里既有"主程序",又有"子函数",交作业也方便。


函数 1:sim_one_alpha(算波形 + 功率)

1)时间轴怎么来的?

Tline = 1/f; t = linspace(0, 4*Tline, 60000);

  • Tline = 1/f:工频周期

    50Hz → T=0.02s

  • linspace(a,b,N):在区间 [a,b] 等间隔 取 N 个点

    所以这里是:0 到 0.08s(4周期),取 60000 点

    点数多 → 曲线更平滑(本质就是提高"采样分辨率")


2)交流源 vs、整流外形 vrec

复制代码

你要理解"向量化":

  • t 是一个数组(60000 个时间点)

  • w*t 会对每个时间点都乘一次(得到相位数组)

  • sin(w*t) 对数组逐点取 sin(得到一整条波形)

abs(vs):把负半周翻上去 → 这就是全波整流的"外形"。

mod(w*t, pi)把相位折叠到每个半周

  • w*t 是连续增长的相位:0, 0.01rad, 0.02rad, ...

  • mod(..., pi) 后,相位就永远落在 [0, π)

    这样每个半周都能用同一套判断条件(导通从 θ_on 到 θ_off)。


3)导通条件 cond:这段就是你最该吃透的

3.1 deg2rad:度 → 弧度

MATLAB 的三角函数 sin/asin 默认用 弧度

所以 α 必须从 "度" 转成 "弧度"。

3.2 if E >= Vm:为什么"永不导通"?
  • vrec 最大也就到 Vm(141.4V)

  • 如果反电势 E 比峰值还大,那 vrec - E 永远 ≤ 0

    电流公式 i=(vrec-E)/R 永远不可能为正

    所以直接让 cond 全 false(全程关断)。

false(size(t)) 你要记住:

  • size(t):返回 t 的尺寸

  • false(...):生成同尺寸的逻辑假数组(全 0)

3.3 thetaE = asin(E/Vm):这个角度是什么意思?
3.4 theta_on = max(alpha, thetaE):为什么取 max?

导通必须同时满足两个条件:

  1. 到了触发角 α(你给晶闸管门极脉冲以后才可能导通)

  2. 电压够大:vrec >= E(否则也导不起来)

所以真正开始导通的相位是两者里"更晚"的那个:max(alpha, thetaE)

3.5 theta_off = pi - thetaE:为什么是 π-θE?

因为正弦波在半周后半段会下降到 E。

从对称性可知:下降到同样门槛的角度就是 π-θE

3.6 cond = (...) & (...):逻辑"与"
  • (theta >= theta_on):逐点比较,得到一串 true/false

  • (theta <= theta_off):同理

  • &:逐点逻辑与

    结果 cond 就是一张"开关表":
    cond=true 的点 → 导通;cond=false → 关断。


4)用 cond 计算电流 i:逻辑索引(MATLAB 常用技巧)

i = zeros(size(t));

i(cond) = (vrec(cond) - E)/R;

  • zeros(size(t)):先创建一个全 0 电流数组(默认全程不导通)

  • i(cond) = ...:只在 cond==true 的位置写入电流值

    这叫 logical indexing(逻辑索引),MATLAB 里非常常用。

电流公式来自你的等效负载:
反电势E 串联电阻R

导通时:vrec = E + iRi=(vrec-E)/R


5)负载端电压 vL:关断时≈E,导通时=vrec

vL = E*ones(size(t));

vL(cond) = vrec(cond);

  • ones(size(t)):生成全 1 数组

  • E*ones(...):生成全是 E 的数组

    表示关断时"端口开路,但电机端仍有反电势 E"的近似(课设可以这样写)

导通时:vL = vrec(等价于 E+iR)。


6)功率 p 和平均功率 Pavg

p = vL .* i;

Pavg = mean(p);

重点:.*逐点乘法 (element-wise multiplication)

因为 vLi 都是数组(60000 个点),要逐点相乘得到功率波形 p(t)

mean(p):对所有采样点求平均 → 近似平均功率。


函数 2:calc_Pavg(只算平均功率)

它和 sim_one_alpha 基本一样,只是:

  • 不返回 vLvs 等波形

  • 直接算 Pavg,所以扫 α 更快

你这里写了:

p = vrec .* i; % cond区间 vrec=vL,所以这样写也成立 Pavg = mean(p);

这句话的逻辑是:在导通区间 i≠0 且 vL=vrec;在关断区间 i=0,所以用 vrec 或 vL 乘 i 都一样。

因此用 vrec.*i 可以省掉 vL 的生成。


怎么从 MATLAB Online 导出?

MATLAB Online 下载到电脑(最常用方式)

在 MATLAB Online 左侧 Files(文件) 面板里,你会看到:

  • 你的 .m 脚本

  • fig1_vs.png、fig2_voltage.png、fig3_current.png、fig4_Pavg_vs_alpha.png

  • Pavg_table.csv

操作:

  • 选中这些文件(可多选)

  • 右键 → Download

  • 电脑上就会得到这些文件

    然后你自己再把它们压缩成 zip 交老师即可。

相关推荐
龙亘川2 小时前
AI 赋能智慧农业:核心技术、应用案例与学习路径全解析
人工智能·学习
im_AMBER2 小时前
Leetcode 87 等价多米诺骨牌对的数量
数据结构·笔记·学习·算法·leetcode
好奇龙猫2 小时前
【AI学习-comfyUI学习-第二十一-LMSD线段预处理器(建筑概念设计图)-各个部分学习】
人工智能·学习
wuk9982 小时前
MATLAB中求解和分析马蒂厄方程
人工智能·算法·matlab
今儿敲了吗2 小时前
计算机网络第一章笔记
笔记·计算机网络
dog2502 小时前
基于历史学习的拥塞控制算法
学习·拥塞控制
yuxb732 小时前
Jenkins 流水线:镜像仓库与自动化部署
笔记·jenkins
YJlio3 小时前
Sysinternals 磁盘工具学习笔记(13.0):从 VHD 备份到碎片整理与卷标管理总览
服务器·笔记·学习
iconball3 小时前
个人用云计算学习笔记 --25 OpenStack 框架
运维·笔记·学习·云计算