## ****1.前言****
实现了基于msp432的失真度测量,拿到了国家一等奖。
## ****2.个人介绍****
两位是2019级通信工程专业
另一位是2020级电子信息工程专业
## ****3.项目分析****
设计制作信号失真度测量装置,对来自函数/任意波形发生器的周期信号。
![nYzzR6QlpmUMso5Il9YF6nPZPMl3BbICY1u7udoR.png](https://image.lceda.cn/pullimage/nYzzR6QlpmUMso5Il9YF6nPZPMl3BbICY1u7udoR.png)
![zSROVZ2uOAjjpOwVOwDgMVTLIJZ1BkuFJQuJjRjA.png](https://image.lceda.cn/pullimage/zSROVZ2uOAjjpOwVOwDgMVTLIJZ1BkuFJQuJjRjA.png)
![0cEId5aPkR0cLJnHe1Abb3uZ0NxDSmFivJp6U8eO.png](https://image.lceda.cn/pullimage/0cEId5aPkR0cLJnHe1Abb3uZ0NxDSmFivJp6U8eO.png)
1.系统介绍
本系统由MSP432 MCU控制。主函数流程图如下图8所示,在其主函数内,先进行放大电路的选择,然后开始片内ADC采集。采集完成后进行FFT计算和频谱校正,并计算出基波和谐波的数据,最后通过串口交给手机和串口屏幕显示
2.系统·流程图
![图片.png](//image.lceda.cn/pullimage/d7ltmo67Usc64JkUf2Dpq34exBflniSrFWCa9Qvx.png)
## **4.原理图电路分析**
1.跟随器电路图
![PC$UF%ENHZWYAKBDUNHD@HD.png](//image.lceda.cn/pullimage/IqoRibJdX7PoJ4Rcam8GSyEPBzmxg4Vno8uj0K0R.png)
![(31S95)38JXCHU%{8P_7@}R.png](//image.lceda.cn/pullimage/sZr9HcX7Uaqf1prCJHlumcOuKnZeaGjXeQoyVEt0.png)
2.AD637有效值模块
来源:淘宝购买
![E3F4599992FB33FC7788ABA4BAA77326.jpg](//image.lceda.cn/pullimage/qSwR65uNNU5EM5tBtoWWz0twoCysSZHsvWKGvzz6.jpeg)
同相比例放大器(可调增益)
来源:自制
![1A99201158186E487EE0AF7B29B7021B.jpg](//image.lceda.cn/pullimage/gynaAHe086lbaCoEP8349auPenepa5ifvKTI3D8a.jpeg)
主控芯片MSP432
来源:TI官网申请
![88F32966CE0723D2F2F7FDBA5A95A790.jpg](//image.lceda.cn/pullimage/j0cnF5JrwhdM4CCt3q4Lpp5BiilexyCZdtHXg1kG.jpeg)
跟随器模块实物图
来源:自制
![280F06C5CC54AA7041FABEDE576FC39D.jpg](//image.lceda.cn/pullimage/I7FKOedT0A8TXWnMI1UkKjO3ud7TfyY3G2E8eHxF.jpeg)
连接关系:信号流入分两路,一路通过跟随器后送入AD637进行有效值检测,另一路通过放大器,加法器后送入主控芯片msp432的adc中,再通过串口控制串口屏进行波形显示。
## 6.误差分析
在系统中,误差主要来源有三个方面:
1)在系统ADC采集前端,使用了运算放大器进行一些信号放大、变换,存在着放大器通频带平坦度特性、噪声和谐波失真等特性会产生误差。
2)ADC采样中,要求满足奈奎斯特采样定理,即采样频率大于模拟信号最高频率的两倍,以减少或者消除混叠效应。
3)单片机中使用FFT算法同样有误差的存在。对信号进行采样计算,需要无限长序列,计算出无限长的频谱。而实际中,只能采集部分的波形序列进行计算,这样会造成频谱泄露效应,出现误差;离散FFT变换中,由于时域的离散,频域也是离散的,这样会造成栏栅效应,在离散点以外的频率点无法测出。
针对以上的误差,解决的方法如下:
1)通过使用高精度、低噪声的运算放大芯片构建放大电路;电源输入端跨接电容,滤除电网带来的高频杂波脉冲会减小杂波电子电路的干扰。
2)尽量满足采样定理,同时适当使用高分辨率的ADC。
3)对应频率泄露,可以加入对应的窗函数,如Blackman窗函数;对应栏栅效应,可以适当提高频率分辨率,进行补零等操作。同时尽量保证需要的频率分量是频率分辨率的整数倍。
## 7.总结
经过四天三夜的电赛,我最大的感受就是要坚持到最后一刻,哪怕只有几个小时没完成作品,也不要放弃调通作品的希望。
我们选择的题目更偏向于软件,碰巧的是,我电赛之前自己打的一些模块正好可以用上,在电赛之前我也花了比较长的时间研究布局布线的稳定性问题,给比赛做好了硬件上的基础。
因为所选的题目对写代码的同学的挑战很大,任务量也很多,相比较而言,做硬件的同学显得比较悠闲,但我们相互配合,也并没有划水,都在和软件同学一起调代码,最后也调通了很多外设。
至于比赛期间的睡眠问题,我们为了有清醒的代码思路前两天都没熬夜,正常作息。我觉得对于软件上的困难,最不能做到就是熬夜肝代码,如果碰巧调通了还好,如果没调通,不但会影响到接下来的代码思路,更加会影响到信心。
至于选题问题,因为知识的限制,留给我们的只有A题和H题(用电器分析),A题所用到的单片机,我们之前并没有接触过,但思路明确,且对信号的处理方式我们很熟悉,难度就在调代码。而至于H题,平常的训练很少涉及这部分,综合考虑我们选择了A题,也就意味着,我们需要在四天三夜的时间内快速上手这款单片机,综合考虑我们还是准备现场学习这块单片机,于是选了A题。
此外我觉得这次题目能完成所有要求,还离不开一个好的代码思路,在最后一天晚上,因为采样率不好自动确定的原因,恰好看到板子上有两个按键,我就提议刚开始用两个按键对应不同的采样率,因为之前寒假做题的时候在按键这部分纠结了很久,我也很快就把这部分代码给软件同学补齐,最后便成功调通了代码。
最后,还需要感谢各位学长给予我们的指导,以及队友们的坚持,才让我们拿到了这个奖项
## 8.演示视频
[https://b23.tv/tHL3gzn](https://b23.tv/tHL3gzn)
## 9.软件部分说明
工程已全部上传到附件
现对部分关键代码进行说明
```
int Key_pres=0;
//通过按键切换量程
while(1)
{
while(Key_pres==0)
{
Key_pres=KEY_Scan(0);
}
if(Key_pres==1)
{
//采样率500K
ADC_Single_Init_500K();
printf("500Krn");
BEEP_ON;
delay_ms(60);
BEEP_OFF;
}
//采样率1M
if(Key_pres==2)
{
ADC_Single_Init_1M();
printf("1Mrn");
BEEP_ON;
delay_ms(60);
BEEP_OFF;
}
/************ 串口屏显示 ***************/
sprintf((char *)send, "t0.txt="ʧÕæ¶È£º%.3f %c"xffxffxff", THD, '%');
USARTA2_SendString(send);
sprintf((char *)send, "t1.txt="2´Î¹éÒ»»¯£º%.3f"xffxffxff", (UO2/UO1));
USARTA2_SendString(send);
sprintf((char *)send, "t2.txt="3´Î¹éÒ»»¯£º%.3f"xffxffxff", (UO3/UO1));
USARTA2_SendString(send);
sprintf((char *)send, "t3.txt="4´Î¹éÒ»»¯£º%.3f"xffxffxff", (UO4/UO1));
USARTA2_SendString(send);
sprintf((char *)send, "t4.txt="5´Î¹éÒ»»¯£º%.3f"xffxffxff", (UO5/UO1));
USARTA2_SendString(send);
sprintf((char *)send, "cle 1,0xffxffxff");
USARTA2_SendString(send);
flag_period = 1024 / FFT_MAX;
for(i=0; i
```
5
6
收藏到专辑