UInt sin_a_H = 255 * sin_a;
fwrite(fp,“% f \ n”,sin_a_H);
}
b.
用
Matlab
语言
[
12]
设计。 程序如下:
close all;
clear all;
ts = 0.01 / 180;
T = 0;
for I = 1:180;
num1 = 255 * sin(2 * pi * 50 * T);
a(I) = round(num1);
b = dec2hex(a(I),2);
e = ‘0x’;
d{I,1}=strcat(e,b);
T = T + ts;
end
c.
采用半周期正弦波进行
180
分频离线采样,计算
其幅值后按序排成数据表存入单片机的
EPROM
中。
2.1.2
基于最优时间的软件锁相技术的实现原理
本软件锁相技术的实现过程是由
2
个中断完成
的:正弦波读表程序周期定时器中断(定时器周期为
T
P_x
,为变化量);捕获中断。 前者不断地从一个正弦
数据表格中依次循环读出表格数据
Data
(
x
),并记录
对应的表格地址号
x
,而后者的每次捕获中断中检查
当前由正弦波查表程序周期定时器中断读出的表格
地址号
x
,根据
x
的值和
180
差值来调整
T
P_x
,以达到
闭环锁相的目的。
这种软件锁相技术可以快速跟踪电网的频率变
化,能够在
1
个周期内跟踪上电网频 率 , 而 且 输 出
基 准 正 弦 波 的 频 率 与 电 网 的 频 率 误 差 始终控制在
1.8
f
osc
× 10
6
%
(
f
osc
为单片机时钟频率)以内,如果单片
机 的 时 钟 频 率 大 于
18 MHz
, 那 么 输 出 基 准 正 弦 波
的频率误差将小于
0.001
,即 频 率 跟 踪 精 度 将 大 于
99.9 %
,这完全可以满足工程精度 需要。 具体实现
框图如图
3
所示。
当第
1
次捕获中断产生时,启动正弦波读表程序
周期定时器中断,并且从正弦表格读取第
1
个数据
(即零电角度的数据
DATA
(
0
)开始读取)。
捕获中断响应边沿触发,即在电网电压过零点产
生中断。 当第
2
次捕获中断产生时,这时会出现
3
种
情况(如图
4
所示,图中
u
为与电网同频同相的方波,
u
1
为频率过大或中断周期
T
P_x
过 小 时 波 形 ,
u
2
为 同
步波形,
u
3
为频率过小或过大时波形)。
第
1
种是
u
1
波形,出现这种情况说明正弦波读
表程序周期定时器
T
P_x
过小,即捕获中断产生时读表
指针号
x > 180
,这时要增大
T
P_x
的值,如式(
2
)所示:
T ′
P_x
= T
P_x
+ ΔT
P_x
(
2
)
其中,
T ′
P_x
为新的周期定时器值,
ΔT
P_x
为增加的
量。
ΔT
P_x
的值可以通过以下公式计算:
ΔT
P_x
= INT
x - 180
180 x
× 10
-2
× f
osc
!
"
(
3
)
其中,
ΔT
P_x
为整数。
第
2
种 是
u
2
波 形 ,出 现 这 种 情 况 说 明 正 弦 波
读 表程序周期定时器
T
P_x
值符合要求,无需更改
T
P_x
的值。
第
3
种是
u
3
波形,出现这种情况说明正弦波读
表 程 序 周期 定 时 器
T
P_ x
过 大 ,即 捕 获 中 断 产 生 时
读表指针号
x < 180
,这时要减小
T
P_x
的值。 如式(
4
)
所示:
T ″
P_x
= T
P_x
- ΔT ′
P_x
(
4
)
其 中 ,
T ″
P_x
为 新 的 周 期 定 时 器 值 ,
ΔT ′
P_x
为 减
少 的 量。
ΔT ′
P_x
的值可以通过以下公式计算:
ΔT ′
P_x
= INT
180 - x
180 x
× 10
-2
× f
osc
!
"
(
5
)
其中,
ΔT ′
P_x
为整数。
2.2
与电网电压信号同步的基准正弦电路程序
边 沿 捕 获 中 断 服 务 子 程 序 的 流 程 图 如 图
5
所
示。 通 过 边 沿 中 断 模 式 与 读 表 指 针 的 差 值 来 不 断
取样
u
i
正弦波 /
方波转换
软件滤
波算法
边沿捕捉
鉴相程序
修改中断
周期 T
P_x
读入当前基
准电压相位
图
3
软件锁相技术原理框图
Fig.3 Block diagram of software phase lock technique
图
5
边沿捕获中断服务子程序流程图
Fig.5 Flowchart of edge - capture interrupt subroutine
返回
写入 T ′
P_x
,并
读表指针清零
写入 T ″
P_x
,并
读表指针清零
T ′
P_x
= T
P_x
+ ΔT
P_x
T ″
P_x
= T
P_x
- ΔT ′
P_x
x - 180 < 0?
读入正弦波数据表读表指针 x
对读入的电网半周期值进行判断,以消除毛刺影响
读入 T2 定时器的值,该值为电网半周期时间值
保存状态寄存器值,清除中断向量
边沿捕捉中断服务子程序
Y
N
O
O
O
O
图
4
不同的
T
P_x
输出不同的正弦波形示意图
Fig.4 Sinusoid waveforms for different T
P_x
u
u
1
u
2
u
3
t
t
t
t
郑翔骥,等: 基于软件锁相技术的光伏并网系统基准正弦电路
第
6
期