河北工业大学本科毕业设计(论文)中期报告
X3(k)?N?14t?0?x(t)W3tkN4?N?14t?0?x(2t)W11tkN4
tkN4 (10)
X4(k)?N?14t?0?x4tk(t)WN4?N?14t?0?x(2t?1)W (11)
X2(k)也可以进行同样的分解
kX2(k)?X5(k)?WN2X6(k)
(k=0,1,…,
X2(其中:
Nk?k)?X5(k)?WN2X6(k) 4N?14t?0N?14t?0N?1) 4N
(k=0,1,…,?1)
4
X5(k)??x?xt?05tk(t)WN4??x?xt?02tk(2t)WN4
tk(2t?1)WN (12)
X6(k)?N?146tk(t)WN4?N?1424 (13)
根据上面同样的分析可以知道,利用N/4点的DFT来计算N点的DFT,比利用N/2点的DFT运算量又减少了大约一半。以此类推,对于N=2(L为整数)点的FFT,最多可以经过Log2N级运算,其每级运算都由N/2个蝶形运算单元构成,每个蝶形结构完成下述基本迭代运算:
r?Xm?1(p)?Xm(p)?Xm(q)WN?r?Xm?1(q)?Xm(p)?Xm(q)WN
L
(14)
式中m表示第am级迭代,p,q为对偶节点下标。
某一级的任何两点p和q的节点变量进行蝶形运算后,得到的结果为下一列p和q两个几点的节点变量,而和其他节点变量无关。 3、使用FFT算法求功率因数
(1)、使用FFT求任意信号的初相角 对式 x(t)?sin(2?f0t??)进行采样。
求初始相角的方法是:假设tw?Mt0?t?,其中tw为采样时间长度,t?是t0整除tw得到的余数。令
??2?f0t?,则FFT运算等价于
X(f0)??tw2sin(2?f0t???)e-j2?f0tdt-22
设 ????tw? (15)
?2,则上式为
11
河北工业大学本科毕业设计(论文)中期报告
X(f0)??tw2sin(2?f0t??)?[cos(2?f0t)-jsin(2?f0t)]dt-2tw ?1{sin?sin??(2?M??)sin??j[sin?cos??(2?M??)cos?]}4?f0 (16)
(2?M??)??sin?,上式约为 因为
X(f;?0)
2?M??(sin?-jco?s)4?f0 (17)
由上式结果进行分析可得,在f0处的频谱实部与虚部之比为
ReX(f0)?-tan?ImX(f)0
又因为???? (18)
?2,则
??-arctan
(2)、使用FFT求电压、电流信号的初相角 设电压信号为:u?Umsin(2?f0t??u) 电流信号为:i?Imsin(2?f0t??i)
ReX(f0)?-ImX(f0)2
(19)
根据上面的计算过程可以分别求出电压和电流的初相位?u、?i,两者之差为功率因数角,即
???u-?i,则功率因数为cos??cos(?u-?i)。
(3)、使用FFT算法求其他参数
跟据FFT算法,得到各次谐波对应的幅值大小为
22Un?(Re(U(fn)))?(Im(U(fn)))
n取0、1、2、 、N-1
同理得,
22In?(Re(I(fn)))?(Im(I(fn)))
基波幅值是当n=0,即fn?f0时,得
22U0?(Re(U(f0)))?(Im(U(f0)))
同理得,
22I0?(Re(I(f0)))?(Im(I(f0)))
视在功率(S)
12
河北工业大学本科毕业设计(论文)中期报告
S?U0?I0
有功功率(P)
P?U0?I0?cos?
无功功率(Q)
Q?U0?I0?sin?
畸变率THD
THD?其中:
Uh?100% U0Uh?4、使用其他算法求功率因数
2U?n n?1N?1其他求功率因数的算法有正交分解法、积分求和法、三相电路功率测量。对于正弦的电压信号和电流信号,无论采用正交分解法还是积分求和法,计算出的有功功率、无功功率都非常接近理想值,它们与理想值相比,其方差在0.03以内。使用三相电路功率测量时,如果被测量信号是恒定的正弦波,测量到的数值不随时间的变化而改变。
三、软件设计程序流程图
1、主程序
主程序中首先要对各个模块进行初始化,其中包括A/D初始化、A/D中断初始化、定时器初始化、各个端口状态初始化,经过初始化后,只要条件达到便会产生中断,然后进入等待中断过程。在等待中断的过程要首先要进行数码管显示,然后进行按键扫描,扫描是否有按键按下,接着要扫描各个端口的状态,看是否发生变化,并查看是否超限,超限的话进行报警,最后返回数码管显示,不断地重复以上等待中断过程,除非出现中断跳出。流程图如下:
13
河北工业大学本科毕业设计(论文)中期报告
开始AD初始化AD中断初始化定时器0初始化各端口状态初始化显示按键扫描扫描各个端口状态超限报警
图 1
主程序流程图
2、定时器中断服务程序
定时器所定时的时间就是采样的时间即20ms64。当定时时间达到时,程序会从主程序中跳出,并进入定时器的中断服务程序。进入定时器的中断服务程序后首先要做的就是关中断,用来防止其他中断产生并跳出此子程序。接着就要把定时器初值重置,以便重新定时的正常进行。然后就要开启A/D,用来启动A/D转换,之后才能实现A/D转换。最后在退出次子程序之前要重新开启中断,不然的话不会再产生中断并跳出主程序。定时器中断服务程序流程图如下:
14
河北工业大学本科毕业设计(论文)中期报告
关中断重置初值启动A/D开中断返回 图 2 定时器0中断服务程序流程图
3、A/D中断服务程序
当A/D转换结束后,就会向单片机申请中断,程序便会从主程序跳入到A/D中断服务程序。进入A/D中断服务程序后,首先要做的也是关中断,防止其他中断产生而跳出次子程序,之后便开始读取转换结果,将A/D转换的结果读出,然后判断读出的结果是否是采集到64个数据,如果不是,则程序将直接开启中断,然后跳出A/D中断服务程序继续采集数据,如果采集到的是64个数据,程序则开始使用FFT法对功率因数进行计算分析,之后便需要判断THD是否越限,如果越限则需要停机,然后开中断并退出子程序,如果没有越限,则开始对驱动外部电容进行投切,选择合适的电容,结束之后重新开启中断,然后返回主程序。
15