外部电路必须先将信号的电压抬高,我用锗二极管结压降获得0.23伏的标准电压,使其波动电信号保持为正(0.0v~0.4v间),然后利用可编程运放将信号放大,接着将放大后的信号通过AD采集并转换,并将转换结果通过串口发送到电脑,方便后面的数据处理。
应用到的单片机模块有可编程集成运放模块、AD转换模块、定时器模块、串口(UART)模块。
1、外部硬件电路的设计
首先,压电传感器过来的信号是一个波动的信号,有正有负,并且可能还有一定程度的干扰。用万用表测量压电传感器过来的信号,大概在-200mV-200mV之间,由于430单片机无法采集负向电压,故只能想办法将电压抬高,使其为正,方便单片机采集。有两个方案,一个是直接接一个恒压源,将电压抬高;另一个是接一个导通的锗二极管,由于锗二极管的导通压降刚好为0.2V,故刚好补偿到负向的电压。由于第二个方案电路比较简单,而且实施方便,价格便宜,故采用第二方案。
在接入运放之前接一个电阻是不可行的,试验过了电压很不准确,故将电阻去掉;而且,二极管导通串联的电阻不宜过大,我曾接过2M、10k、还有1k的电阻,结果1k的最理想。
2、集成运放、AD、定时、串口的配置属于单片机软件编程的范畴,这里就不一一赘述,只将大概参数介绍如下:
集成运放:放大倍数为4,设置为同相比例放大;
AD转换:采样通道位A1(A1接运放输出),参考电压为VCC=3.6V;
定时器:定时器主要设置发送数据的时间,设置为0.1s,即每0.1秒采集一次电压信号,并将数据通过串口发送给电脑;
串口: 波特率设置为9600,通过软件将数据生成位txt文档,方便记录和整理;
3、我们最终做到的是将电压精度提高为0.01V;
遇到问题:
硬件上有一个问题比较麻烦,不好解决;由于外部电路比较简单,我是直接用万用板将元件焊接上去,并通过排阵将其引出,接到单片机,而且传感器的输出接口也是标准的音频6.5mm的接口,我也是买了底座,并用导线焊在底座上,这样通过杜邦线连接起来的电路有时会不牢固,会造成接触不良,直接导致采集的电压不准确。信号采集如果发生差错,会对后面的数据处理和分析造成很大的影响,所以这个问题要好好考虑一下解决办法。不过我想以后的成品肯定是接触良好的PCB板,应该不会有太大问题。
软件上有关修改串口波特率的程序还没弄好,现在用的是9600的波特率,要改成38400居然遇到了一定的困难,这让我感觉很困惑。本来觉得有关波特率的修改应该只是寄存器的配置,很简单才对,想不到会搞不定。这个还要在仔细看一下datasheet,应该可以解决。
集成运放开发过程所遇到的问题:
之前一直在搞集成运放的编程,一直都出现问题,现将所走的弯路简述如下:
首先说说我的大概开发流程:先看实验板附带的源代码,大概看懂了整个框架之后开始看集成运放(AO)的介绍,MSP430F2274一共有2个集成运放,每个集成运放的放大倍数在1~16之间,可以通过寄存器的配置来设置其放大倍数。然后在网上搜索430有关集成运放的应用程序,看了之后觉得OK了,就开始写程序了。
遇到的第一个问题是:开发软件IAR的软件配置有问题,导致无法下载程序,主要有2个设置需要注意,一个是在主控芯片的选择上,当新建工程时默认的是MSP430家族,而不是某个具体的芯片,需要将芯片选择位MSP430F2274;还有在Debug选项下的driver要选择FET Debug,一开始选择了Simulink,结果只是看到仿真的效果;
第二个问题是实验板太小,而且一开始没把排阵焊上去,造成了测量的麻烦,因为集成运放主要看是否实现了放大电压的功能,我一开始只是在输入端加一个给定电压,接着用万用表在输出端测量输出电压,这样操作起来特别不方便,而且一个人根本无法完成这个测试的工作,经常要找其他人帮忙,很麻烦;
最后解决方法:最后我是在集成运放后面在加入AD转换,并将转换结果通过串口输出到电脑,看其输出结果是否有倍数的关系,这样,要做集成运放,就要先解决AD和串口的编程,也花费了不少时间;
第三个问题是在加入二级运放上,那时候刚弄出一级运放,打算一鼓作气把二级运放搞定,以为很简单,结果还是搞了一个上午,因为二级运放要设置成级联PGA模式,设置错了。
总之,这个精致的装置确实很好很强大,基本完成我的实验,唯独内存较小,滤波与判读还是在pc上完成,如果选择其它型号的430芯片,应该可以在片上完成,这样 无线传输的数据量也会变小,大大提高能量-数据效率,这个装置再经过一些测试就会安排手版的设计,无论如何,我们已经选定430。
|