1 系统方案
1.1 系统方案设计
本系统主要由片内 ADC 模块、LCD 显示模块和蓝牙模块组成,结构框图如图 3.1.1系统总体框图所示。信号发生器主要用于调节输入信号幅值、频率和信号的失真度。LCD 显示屏展示输入信号的波形和单片机计算得出的失真度和归一化幅值。蓝牙模块用于将计算结果发送至手机查看。FFT 和 THD 算法得出失真度的测量值,和输入的失真度进行对比即可得到△。
1.2 模数 A/D 采样方案的论证与选择
方案一:将 MSP430F5529 中 ADC12 寄存器中的 ADC12MEM0 直接赋值给数组,获取若干个点。优点是软件编程简单,缺点是 A/D 采样过程中持续读写导致采用频率比较低,只有400Hz,无法达到题目所要求的效果。
方案二:利用 TimerB+DMA 计时器计时方法,将 ADC12MEM0 获取到的值直接传入寄存器。优点是采样频率确定,后续可通过代码来实现动态采样。缺点是代码编程较为复杂,且实施过程中常常伴有因寄存器读写较快导致在进行傅里叶变换的过程中产生读写冲突的问题。
方案三:利用 TI 官方提供的 Driverlib 库,使用官方提供的 A/D 采样辅助编程。优点是编程简单,类似于 STM32 的代码风格,降低了学习成本。并且将对于寄存器的操作进行了函数封装,避免了对于寄存器直接操作;采样频率较高,可以达到 100kHz 以上。
综合以上三种方案,选择方案三。
1.3 主控芯片方案的论证与选择
方案一:使用C2000系列的TMS320F28027F作为主控芯片。优点是其主频可以达到60MHz,计算速度较快。缺点是现有资料较少,库函数使用困难。
方案二:使用 MSP430FR5994 作为主控芯片。优点是具有 256kB 存储,功耗低。缺点是主频只有 12MHz,运算速度较慢。
方案三:使用 MSP430F5529 作为主控芯片。优点是电压低,功耗低,通过软件解锁可以调用 25MHz 外部晶振。缺点是 AD 采样频率较低。
综合以上三种方案,选择方案三。
1.4 傅里叶变换方案的论证与选择
方案一:离散傅立叶变换(DFT)算法。优点是其变换点数可任意选定。缺点是计算工作量大,运算速度慢。
方案二:快速傅里叶变换(FFT)算法。优点是运算量少,运算速度快。缺点是其变换点数必须是有规律的,在变换点数选择或采样率选择上可能会带来局限性。
综合以上两种方案,选择方案二。
2 系统理论分析与计算
2.1 A/D 转换
2.1.1 A/D 转换原理
AD 转换是将时间连续和幅值连续的模拟量转换为时间离散、幅值也离散的数字量,使输出的数字量与输入的模拟量成正比。AD 转换的过程有四个阶段,即采样、保持、量化和编码。采样是将连续时间信号变成离散时间信号的过程。经过采样,时间连续、数值连续的模拟信号就变成了时间离散、数值连续的信号,称为采样信号。
量化是将连续数值信号变成离散数值信号的过程。经过量化,时间离散、数值连续的采样信号就变成了时间离散、数值离散的数字信号。
量化电路的后面有一个编码电路,将数字信号的数值转换成二进制代码。
量化和编码总是需要一定时间才能完成,因此,量化电路的前面还要有一个保持电路。保持是将时间离散、数值连续的信号变成时间连续、数值离散信号的过程。在量化和编码期间,保持电路相当于一个恒压源,它将采样时刻的信号电压“保持”在量化器的输入端。
2.1.2 A/D 转换应用
基于所使用的芯片MSP430F5529,其片内ADC为12位。通过信号采样得到一个0~4095的数值,通过代码转换即可得到输入信号电压的标准值。
2.2 FFT 算法
有限长序列 x(n) 的 N 点 DFT 为 j
FFT 算法就是不断地把长序列的 DFT 分解成几个短序列的 DFT,并利用的周期性和对称性来减少 DFT 的运算次数。
设 x(n)长度 N,N=2M,M 为自然数。将 x(n)按奇、偶分成两组,可得各长 N/2 的两个新序列 x1(r) = x(2r)、x2(r) = x(2r+1)。x(n)的 DFT 为
这样,将一个 N 点 DFT 分解成两个 N/2 点 DFT。经过第二次分解,将每个 N/2 点的 DFT 分解成两个 N/4 点的 DFT 和 N/4 个蝶形运算
依次类推,经过 M-1 次分解,最后将 N 点 DFT 分解成 N/2 个 2 点 DFT。
2.3 谐波分量的计算
以三角波的频谱为例,在 100Hz 处幅值最大,为该信号的基波频率。同时在 50Hz处出现了一个幅值为 51 的一次谐波。故根据傅里叶变换的结果,得到输入信号的频域谱。找到出现在频域上出现的波峰的电压值,即可确定其谐波分量的幅值。
2.4 失真度的说明与计算
当放大器输入为正弦信号时,放大器的非线性失真表现为输出信号中出现谐波分量,即出现谐波失真,通常用“总谐波失真 THD”定量分析放大器的非线性失真程度。总谐波失真 THD 通常定义为
由于正弦和余弦函数构成完备的正交函数集,上式中的谐波分量总有效值可由各次谐波的有效值进行平方合成而得到的。
若放大器输入交流电压 ui= Ui coswt ,出现谐波失真的放大器输出交流电压为
则 u0的总谐波失真定义为
若记第 y 次谐波的振幅为 AY(约定 y=1 为基波,y=0 为直流分量),则全谐波失真为
利用 FFT 算法求得 AY,再代入上式计算失真度 THD。
本装置信号失真度测量限定只处理五次谐波,因此定义失真度标称值为
失真度测量值为 THDX,则失真度测量误差的绝对值为
2.5 误差分析
1、在测试过程中,我们发现输入信号的 Vpp和输入到单片机中通过 AD 采样的到的结果再转换为标准电压值时出现了误差,二者相差度在 2%~5%之间。输入较低电压(100mV以下)时候误差会更大,达到 5%以上。这可能是由于在信号采集的过程中单片机采样环境受限,如线材原因和周围环境的干扰产生了一部分噪声的原因。
2、在进行 FFT 变换的时候,由于算法原因导致基波频率变化始终比较大,和正常的 FFT 运算结果有较大的出入,反应在最后输出失真度的时候,同一个信号的失真度上下波动较大。
3 电路与程序设计
3.1 电路的设计
3.1.1 系统总体框图
系统总体框图如图 1 所示
3.1.2 FFT 系统框图
3.2 程序的设计
3.2.1 程序功能描述与设计思路
1、程序功能描述
通过程序实现输入单片机的信号进行周期采样,并通过 AD 转换、FFT 运算获取输入信号的谐波分量,从而得到总谐波失真 THD。
显示部分:OLED 屏幕显示失真度、各谐波分量的归一化幅值。LCD 屏幕显示信号波形
2、程序设计思路
根据题目要求测量信号失真度,那么需要得到输入信号的频谱图,找到频谱中的峰值来得到谐波分量。获取时域信号的频谱图可以使用傅里叶变换得出,且由于单片机无法处理连续的模拟量,则需要对于输入信号离散化、数字化。利用 ADC 对于输入信号处理来完成题目需求。
3.2.2 程序流程图
主程序流程图见附录 2
4 测试方案与测试结果
4.1 测试方案
利用信号发生器,发出基频为 1kHz、峰峰值电压范围为 300mV~600mV,失真度范围
为 5%~50%的信号,利用秒表计时显示数据后进行记录。7
4.2 测试条件与仪器
测试条件:检查多次,仿真电路和硬件电路必须与系统原理图完全相同,并且检查无误,硬件电路保证无虚焊。
测试仪器:信号发生器、秒表。
4.3 测试结果及分析
4.3.1 测试结果(数据)
基频为 1kHz 信号测试结果下表所示(测量结果取 3 次平均值):
4.3.2 测试分析与结论
根据上述测试数据,在 1kHz 输入信号频率、300mV~600mV 下,由此测试结果可以得出以下结论:
1、对于 300mV 左右的数值拟合较好,在 600mV 左右失真度偏差高了一些。
2、代码运行效率较高,每一次计算时间控制在 0.5s 以内。
3、对于失真度较高的输入信号,其测量误差绝对值相对较小。
综上所述,本设计达到设计要求。
附录 1:电路原理图
附录 2:主程序流程图