[A-电流信号检测装置] 江苏省_二等奖_A题

[复制链接]

1

主题

4

帖子

9

积分

一粒轻沙

Rank: 1

积分
9
楼主
查看: 3804回复: 5 发表于 2018-9-20 16:51:19   只看该作者
材料在之后剩的也都不完整了,零零碎碎的整理了一些,图片只有这一张,技术报告也不全了,断断续续放上一些说明和程序吧C:\Users\13511\Desktop。


采用的单片机为msp430f149。因为我是负责写软件的,所以在具体功放的设计并没有多加了解,主要介绍一下我是怎么编写这些功能的。(最后的成品版本在另一个组员上,因为他帮我把两个大部分的bug给查了,所以并不能给出最后的成品程序)

首先是从电阻上取回信号的处理,从电阻上取回的电压信号是分为两路送给单片机的。一路直接接到单片机的ad口,另一路经过过零比较器接入定时器捕获。
对于正弦信号的峰峰值的测量。因为我们当时也没有想到一些比较好的方法,考虑到比较好的滤波算法使用msp430并不一定性能足够,所以采用了直接记录一段时间的电压最大值将其乘2即是峰峰值。但是出来的效果并不好,所以考虑分为两部采集,先行将采集到的一组中去除掉最大的,再在所有的最大中选取较大的值作为峰值。具体选取的是第几个因为时间原因也记不清了,只记得当时是对着示波器一个参数一个参数调的。

对于频率的测量,算是投了一个机,没有想到比较有效的针对所有信号的求取频率的方法。而是将电阻上取回的电压信号直接经过过零比较器,生成具有相同频率的方波,再接到单片机的定时器捕获。这样做出来对于一个周期存在多个过零点的信号来说会出现误判,但是对于题目中所要求的几种信号还是满足的。而且采用定时器捕获的方式精度极高。具体到来呢存放时间计数的变量类型从long int变为int都会提高精度,在定时器跳变沿中断中出现的语句越少精度越高,到最后的话1000hz显示为1000.3hz,精度已经算相当高了。
之后就是问题的难点,谐波的测量。对于谐波的测量主要是采用FFT算法,但是我所在学校比较抠门,所以采用的msp430单片机的性能其实并不能支撑起FFT算法所需要的运算量。所以采取了很多方法来省内存和算力,到最后的成果是设置了一个按键,每按一次刷新一次测得的各次谐波的值,不能做到实时显示。具体的做法吧,主要是将原本的虚数运算中所需要的double型变量替换为float,将采集点数减少到128个。其他的优化细节记得不太清了,主要是尽量节省内存。
最后附上一些模块的算法吧。单片机采用的是msp430f149,ad采集口记得不太清了,好像是P6.1,P6.2的样子,定时器跳变延捕获用的是P1.1口,采用12m晶振。


当时验证fft算法的程序,定时器A0里面的ad值直接赋给了FFT算法的输入量,在看的时候最好先行输入模拟的一组数据验算FFT的算法在取128点时仍然正确。最后的版本ad值的采取是先行进行了滤波,滤波的程序我这并没有保留所以就发不了了。

fft_prime.rar (307.55 KB, 下载次数: 17)

当时验证峰峰值测量与频率测量的想法的程序,基本功能都能实现仅精度不高,可以按照上文的思路惊醒提高精度。
pack__prime.rar (171.39 KB, 下载次数: 9)




1

主题

4

帖子

9

积分

一粒轻沙

Rank: 1

积分
9
沙发
发表于 2018-9-20 17:01:44   只看该作者
本帖最后由 icearound 于 2018-9-20 18:15 编辑

采用的单片机为msp430f149。因为我是负责写软件的,所以在具体功放的设计并没有多加了解,主要介绍一下我是怎么编写这些功能的。(最后的成品版本在另一个组员上,因为他帮我把两个大部分的bug给查了,所以并不能给出最后的成品程序)
首先是从电阻上取回信号的处理,从电阻上取回的电压信号是分为两路送给单片机的。一路直接接到单片机的ad口,另一路经过过零比较器接入定时器捕获。
对于正弦信号的峰峰值的测量。因为我们当时也没有想到一些比较好的方法,考虑到比较好的滤波算法使用msp430并不一定性能足够,所以采用了直接记录一段时间的电压最大值将其乘2即是峰峰值。但是出来的效果并不好,所以考虑分为两部采集,先行将采集到的一组中去除掉最大的,再在所有的最大中选取较大的值作为峰值。具体选取的是第几个因为时间原因也记不清了,只记得当时是对着示波器一个参数一个参数调的。
对于频率的测量,算是投了一个机,没有想到比较有效的针对所有信号的求取频率的方法。而是将电阻上取回的电压信号直接经过过零比较器,生成具有相同频率的方波,再接到单片机的定时器捕获。这样做出来对于一个周期存在多个过零点的信号来说会出现误判,但是对于题目中所要求的几种信号还是满足的。而且采用定时器捕获的方式精度极高。具体到来呢存放时间计数的变量类型从long int变为int都会提高精度,在定时器跳变沿中断中出现的语句越少精度越高,到最后的话1000hz显示为1000.3hz,精度已经算相当高了。
之后就是问题的难点,谐波的测量。对于谐波的测量主要是采用FFT算法,但是我所在学校比较抠门,所以采用的msp430单片机的性能其实并不能支撑起FFT算法所需要的运算量。所以采取了很多方法来省内存和算力,到最后的成果是设置了一个按键,每按一次刷新一次测得的各次谐波的值,不能做到实时显示。具体的做法吧,主要是将原本的虚数运算中所需要的double型变量替换为float,将采集点数减少到128个。其他的优化细节记得不太清了,主要是尽量节省内存。
最后附上一些模块的算法吧。单片机采用的是msp430f149,ad采集口记得不太清了,好像是P6.1,P6.2的样子,定时器跳变延捕获用的是P1.1口,采用12m晶振。




1

主题

11

帖子

49

积分

一粒轻沙

Rank: 1

积分
49
板凳
发表于 2018-9-20 17:51:49   只看该作者
icearound 发表于 2018-9-20 17:01
采用的单片机为msp430f149。因为我是负责写软件的,所以在具体功放的设计并没有多加了解,主要介绍一下我是 ...

坐等楼主更新

1

主题

4

帖子

9

积分

一粒轻沙

Rank: 1

积分
9
4#
发表于 2018-9-20 18:24:27   只看该作者
当时验证fft算法的程序,定时器A0里面的ad值直接赋给了FFT算法的输入量,在看的时候最好先行输入模拟的一组数据验算FFT的算法在取128点时仍然正确。最后的版本ad值的采取是先行进行了滤波,滤波的程序我这并没有保留所以就发不了了。

fft_prime.rar

307.55 KB, 下载次数: 2, 下载积分: 积分 -1

1

主题

4

帖子

9

积分

一粒轻沙

Rank: 1

积分
9
5#
发表于 2018-9-20 18:33:26   只看该作者
当时验证峰峰值测量与频率测量的想法的程序,基本功能都能实现仅精度不高,可以按照上文的思路惊醒提高精度。



全贴也算编辑完毕了,整个电赛做完其实到最后三问都出来了,精度也是很高。可惜最后被考点的老师给针对了,5个老师围着逼问,就连考点提供的信号发生器直接接到示波器上波形都有很大波动与杂波。

pack__prime.rar

171.39 KB, 下载次数: 4, 下载积分: 积分 -1

0

主题

10

帖子

15

积分

一粒轻沙

Rank: 1

积分
15
6#
发表于 2019-5-20 12:03:03   只看该作者
icearound 发表于 2018-9-20 18:33
当时验证峰峰值测量与频率测量的想法的程序,基本功能都能实现仅精度不高,可以按照上文的思路惊醒提高精度 ...

谢谢大佬
快速回复 返回顶部 返回列表