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)先看这份脚本总体在做什么
它做三件事:
- 固定一个触发角(默认 α=90°),算出并画出
-
vs(t):原始交流正弦 -
vL(t):负载端电压(考虑反电势E + R) -
i(t):负载电流
-
扫描 α=30:10:150,计算每个 α 对应的平均功率
Pavg,输出表格 + 曲线Pavg-α -
自动把图保存成 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?
导通必须同时满足两个条件:
-
到了触发角 α(你给晶闸管门极脉冲以后才可能导通)
-
电压够大:
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 + iR → i=(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)
因为 vL 和 i 都是数组(60000 个点),要逐点相乘得到功率波形 p(t)。
mean(p):对所有采样点求平均 → 近似平均功率。
函数 2:calc_Pavg(只算平均功率)
它和 sim_one_alpha 基本一样,只是:
-
不返回
vL、vs等波形 -
直接算
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 交老师即可。
