模块一:电源部分,采用78M05做为模拟部分供电。
这里采用600R@100MHZ的磁珠对模拟电路和其他电路做了一个简单的隔离作用,实测过程中发现可以提高压力数据的稳定性。
模块二:CS5530部分
参考CS5530的数据手册的芯片供电范围:
由于使用STC芯片,这里首先选择的VA+ = 5V的供电,这样就不需要在做其他的电平,这样也可以减少因为引入的其他的电平产生的不必要的功耗。
当然使用该芯片作为压力采集的优点是,无需外部的外部电路,这样减少一部分的外围电路,直接使用内部的增益即可,如果是为了做毕设或者是个人爱好的话,只有简单的上图电路即可。如果需要数据稳定一些,需要将压力传感器的差分信号进行滤波才能接入电路,这样数据会稳定些.
模块三:分压电路及晶振电路
这里CS5530的基准电压采用电阻分压的方式进行采集,而没有采用AD780或者是其他的电压基准芯片进行设计是因为,若引入2.5V,基准电压芯片,则传感器供电电压需要和2.5V基准成比例移动,否则将导致传感器的读数出现系统误差,而使用软件滤波是无法剔除的,故这里只使用了简单的分压电压作为系统的基准电压,实测过程发现这样是可以满足项目要求的。
模块四:软件代码
CS5530初始化
unsigned char InitializationCs5530(void)
{
unsigned char InitTemp = 0;
unsigned int setup1;
CS5530PortInitialization();//启动串口。
//配置RS = 1 激活软件复位
Wr5_byte(0x03,0x20,0x00,0x00,0x00);//直接写5字节
//读配置寄存器 ---等待复位结束!!!
ad_time_5ms = 0;
do
{
S1rd4_Cs_byte(0x0b);//写1字节读4字节?
InitTemp = Cs_Rdata[3]&0x10;//判断RV是否为“1”?
//ad_time_5ms;//超时判断
}
while((InitTemp==0)&&(ad_time_5ms < 200));
//*************************************
//若RV为1,向RS写0
Wr5_byte(0x03,0x00,0x00,0x00,0x00);//直接写5字节.
ad_time_5ms = 0;
do
{
//读配置寄存器
S1rd4_Cs_byte(0x0b);//写1字节读4字节。
//************************************
InitTemp = Cs_Rdata[3]&0x20;//判断RS是否为“1”。=0表示芯片正常!!初始化结束
//ad_time_5ms;//超时判断
}
while((InitTemp==0x20)&&(ad_time_5ms < 200));
//*************************************
//量程=((VREF+)-(VREF-))/(GxA) G 是放大器的增益
//VRS=0,A=2;当 VRS=1,A=1 复位后,单位增益缓冲器处于激活态,此时
//若参考电压为 2.5V,则缺省的输入满量程电压范围为 2.5V。
//若要使用仪表放大器(当增益设置大于 1x 时)并设置增益为 32x 时,
//满量程输入电压为 2.5V/32 或约 78mV
//当前配制:5V供电 --2.5V内部基准 使用setup1 和 setup2 [增益6 字速率240Hz] [增益0 字速率240Hz]
//CS1 CS0 G2 G1---- G0 WR3 WR2 WR2 ---- WR0 U/B OL1 OL0--- DT OCD NU NU
//使用整形数据配制表! 设置增益 11<< (0-6)--字速率7<< (0-4,8-12) --
//VRS=1 2.5v基准
//当前满量程输入电压 A1=2.5v/1x64=39.0625mv
//当前满量程输入电压 A1=2.5v/1x1=2.5v
//------读配置寄存器
//--------检测系统是否复位(cpu等待!!)
//-----------写配置寄存器 #03H--#00H(参考电压为V=5伏 [2.5<V<VA+],如为2.5伏[1<V<2.5]则02H)--#00H--#0H--#0H
//--------------设置通道设置寄存器[配制setup1-setup12] #05H--R1(#06H字速率高位)--#40H--R2(#46H;字速率高位)--41H
//-------------------------------------------------------------------------
//写配置寄存器。参考电压设置 2.50V 1V < VRS =< 2.5V 设置为1
InitTemp = (VRS_1V_2V5&0x01)<<1;
//设置通道寄存器 增益 字速率 极性 开路检测 2个setup 共8个字节参数
//采用16位处理数据---setupx
setup1 = 0x0000;//通道1
//setup1|=((unsigned int)GAIN_X32)<<11;//增益 0-6(1-64X倍增益)
setup1|=((unsigned int)S_120_HZ)<<3;//字速率 0-4 8-12
setup1|=((unsigned int)UNIPOLAR)<<2;//极性 0双极性-1单极性
setup1|=((unsigned int)NORMAL)<<1;//开路检测 0正常-1电流源启动
Wr5_byte(0x03,InitTemp,v_value(setup1,1),v_value(setup1,0),0x00);//直接写5字节
return 0;
}
这里我使用的STC系列的单片机属于大端模式,使用SPI通讯时,需要注意数据的移位问题,否则读出来的数据并不是很准确,也可以使用示波器查看数据或者是使用逻辑分析仪进行直接读取。
全部评论