• 电赛小结


    2018电赛程序实现---电流信号检测装置

    把程序主要分为三个部分,第一个部分是vga显示,第二个部分是ad7106的驱动程序,第三个部分是fft程序
    

    vga显示

    vga显示这部分是我队友写的,主要功能显示输入信号的频谱和正弦信号的频率,非正弦信号的谐波幅值,其实这个频谱是经过处理之后显示的,如果输入的是单一频率的正弦波,那么只显示一根谱线,假设输入的是谐波,那么只显示谐波对应频率下的谱线,本来是想把所有的频谱给显示出来的,但是由于vga分辨率是1440X900,fft变化点数是8000个点,屏幕分辨率不够,所以当时没有全部显示,显示效果下图所示:
    

    AD7606驱动

    我们一开始采用的是ads828这个10bit70M采样率,但是这款ad有两个问题,测量10mv的信号时准确度低,原因在于利用的有效位少了,这个当时我们想了两种解决思路,第一种是100MA~1A的电流直接经过ad处理,10ma~100ma的电流先经过放大,然后再经过ad处理,这样ad的有效数据位就利用了起来。第二种方案是采用精度更高的ad,我们最后是采用的第二种思路。另一个是这个ad828在硬件设计是加入了运算放大器,导致他的输入电压和输出值并不是线性关系,不过这个可以通过软件补偿进行弥补,先测试100组数据,然后再通过线性拟合补偿。
    
    ad7606采用的是spi接口,当时是老师帮我们从网上下载了一份verilog程序,结果还挺好用的,节省了大量的调试时间。
    

    FFT

    fft分为采样速率模块控制采样率,fifo控制不同的时钟域,fft出来的数据进行转换,最后利用转换出来的数据进行测频率和幅值。
    

    ip核使用注意事项

    1. ad输入进来的数据并不是实际电压值,如果要转换成幅度,需要将ad的数据量化成电压值。
    2. 关于缩放因子:缩放因子最高位是1则将数据向左移动相应的位数,否则向右移动相应的位数。
    3. 缩放完数据 x N/2是原始数据的幅值。
    4. ad产生的数据如果有直流分量要减去直流分量。
    5. fft在matlab仿真中采整数个周期出来的结果才正确,但是在实际工程中,采整数个周期对采样率要求比较严格,实际上只要采样的周期数量足够多的话,就算不是整数个周期,最终的误差影响很小。
    6. fft出来的结果不要最后一个点。

    采样率

    一开始我们是采用的4K采样率和4K个点,这样频率分辨率1Hz,但是经过我们后期分析,频率分辨率是0.5hz,所以后来又把变化点数提高到8k个点,根据F = Fs / N频率分辨率就变成了0.5hz。
    
    4k的采样率一开始是直接在ad驱动程序里设置成1/4k的延时,但是这样不准,ad信号出来时都会有一个busy信号的等待,因为这个时间不固定,所以实际出来的频率小于4khz,这样也会导致fft变换完数据的不准确。一开始,fft出来的结果,当频率变高时,幅值误差很大,我当时以为是采样率太低了,最高被测信号是1khz,4k采1khz,一个周期才测四个点,其实4k的采样率也能满足要求,因为我们变化的8K个点,已经可以恢复出原始信号。由于测试的产生的幅值数据不准,老师给我们提供了一个思路,先把ad7606提高到最高采样率200khz,先对被测数据进行过采样,然后用4k采用率进行抽取进行fft变化,如果大于频率大于800hz采用时域求幅值的方法,频率小于则采用频率测量的方法。当我采用过采样然后抽取的方法时,误打误撞,非常惊喜的发现求出来的数据全部都符合题目要求的精度。
    

    FIFO控制

    fft变化的时钟是50Mhz,采样时钟是4k,所以中间采样了一个异步fifo进行缓冲。
    

    FFT控制

    fft里的数据都是有符号位,当时有效数据标志位开始时,对实部和虚部平方相加然后求根,然后通过缩放因子进行移位,对数据除N/2之后,ad数据转化之后就是实际的电压值。
    

    测频

    fft设置的是8k个点,因为频谱是对称的,所以只测前4000个点即可。所测的频率的在谱上的幅值最大,所以进行比较大小,即可求出被测信号中能量最大的信号。
    

    电赛学到的知识

    1. 用excel统计大量数据,使用公式行计算求误差,进行拟合。
    2. 学会了之前fft没有搞懂的地方,也就是ad转换数据部分。

    经验总结

    1. 题目下来几天后,也不知道自己在忙啥,感觉最题目还是理解的不到位,最后还是经过老师带着分析之后才搞懂的,搞懂题目才可以做题,要不然理解错了,做的都是无用功。
    2. 从网上传出一份评分表,但是老师不一定完全按照评分表来评测数据。
    3. 好几个组做一道题目,方案不要完全一样,起码显示可以改一下,一个用vga,另一个用led显示屏或者数码管。否则老师可能会压你分数。
    4. 如果对评测要求不确定,可以准备两套方案,通过按键调整。
  • 相关阅读:
    VScode 修改中文字体
    missing KW_END at ')' near '<EOF>'
    SQL inner join, join, left join, right join, full outer join
    SQL字符替换函数translater, replace
    SQL COOKBOOK SQL经典实例代码 笔记第一章代码
    sqlcook sql经典实例 emp dept 创建语句
    dateutil 2.5.0 is the minimum required version python
    安装postgresql后找不到服务 postgresql service
    Postgres psql: 致命错误: 角色 "postgres" 不存在
    【西北师大-2108Java】第十六次作业成绩汇总
  • 原文地址:https://www.cnblogs.com/bixiaopengblog/p/9379664.html
Copyright © 2020-2023  润新知