本帖最后由 zepanwucai 于 2013-1-12 20:50 编辑
快考试周了,终于稍微有空可以玩下拿到的F3 discovery了(更新:没想到考试周也被抓去搬砖,可能接下来几天都没法继续调了。。),因为具有模拟功能和dsp功能,所以想试着做个ecg,可以用内置运放做前端信号放大,用dsp功能对心电信号滤波处理。昨天刚调试了一下,遇到一些问题,请大虾指点!硬件部分思路是这样的:
心电信号<1mV,板子供电3V,应放大1K~2K倍。先由INA333仪表放大器放大5倍(1+100K/24K),再由F3内置运放二级放大。
由于内置运放输入失调电压约2mV,放大倍数不宜过大,所以设定F3内置运放放大200倍(2.2M/11K)。
基线漂移补偿也使用内置运放(1M,0.1u)。
基准电压由F3的12bit DAC产生,再使能内置缓冲器输出。
板子上的用户按键用来调节基准电压,防止信号超出0~3V的范围。
最终放大结果由ADC读取。
通信使用UART接口。
最终引脚分配如下:
反向放大OP1:-PA3 +PA5 OUT PA2, 内部接到ADC1channel 3
漂移补偿OP3: -PB2 +PA5 OUT PB1
DAC:channel2,PA5
ADC: ADC1 channel 3
UART:UART1, TX PC4,RX PC5
原理图设计如下:
然后手工制版,焊接。
接下来是软件部分,下位机部分由于有例程库,很快就把各个外设调好了,ADC采样率为400Hz。
先不用dsp滤波,直接发送原始数据到上位机。上位机先用matlab gui编写,后期计划用Qt或者在安卓平台上编写。
通过上位机显示的图像的观察,硬件在焊接上应该没有问题,因为通过按键可以看到基准电压按预期的步进,双手不按时基本是50Hz的干扰信号,滤掉后基本是一条水平线。
但问题是双手手指分别按到两个电极上后,虽然可以看到一些波形,但是基本看不出心电图的PQRST特征波形,即使调整滤波器的参数也无法显示出正常的波形(fir1(32,fc/(fs/2)),fs=400Hz,fc从5Hz调到40Hz都试过)
采集的原始数据见附件中的y.txt,滤波前和滤波后的图像如下所示:fir1(32,30/(400/2))
原始数据.rar
(23.23 KB)
附件中的x.txt是把原理图中的C1改成20nF的结果,因为感觉可能是噪声放大得太大导致的,所以先在前面就尽量把噪声抑制掉,防止运放总是饱和。同样使用fir1(32,30/(400/2)),结果如图:
但是还是看不出正常波形。。
不知道大虾们看了原理图和数据、波形后有没有发现哪里出了问题?不吝赐教啊!
PS:附一个调试外设时发现的一个问题,可能是F3的bug:
数据手册中写F3的PGA的放大精度是1%,我用DAC2作为同相端输入来测试,12bit,数值为512(约0.375V),PGA放大倍数设置为2.
当DAC不开启输出缓冲器时,实测DAC输出0.369V,PGA输出0.732V,误差刚好在1%
然而当DAC开启输出缓冲器时,实测DAC输出0.368V,PGA输出0.682V,误差却超过7%
不知道这算不算一个bug?是不是DAC内部缓冲器和内置运放的内部连线有些问题?
|