接口与驱动
串行外围设备接口SPI(serial peripheral interface)总线技术是Motorola公司推出的一种同步串行接口。SPI总线是一种三线同步总线,因其硬件功能很强,所以其实现软件就相当简单。AD7888与多种串行接口兼容,可以根据使用的控制芯片在设计中灵活的使用,从经济的角度出发选择普通的MCU芯片AT89S52,使用程序可方便地实现对SPI总线的控制。

图4 串行接口时序图
AD7888与MCU之间的接口关系如图5所示。为了能够获得稳定的数据,AD7888与MCU之间加入光隔离器。光隔离器件采用的是隔离电压高、速度快、共模抑制性强的6N137。由于6N137的速度快,编程中不需要进行延时就能满足光隔离器的电平建立时间。试验表明通过光隔离器,获得的稳定数据能够增加3~4位(二进制位)。AD7888的CS接地,使AD888始终工作在SPI接口模式。对每个接口模块的控制是通过74LSl25的三态允许端来实现的。对其中一个SPI接口操作时,使其74LSl25处于选通状态,而其他SPI接口的74LSl25处于高阻状态。这样可实现微处理器单独对一个接口进行操作,而不影响其他接口。CPU通过对三态缓冲器74LSl25一体式电感控制,可实现多个接口共用相同的数据线。AD7888所采样的七路电压信号经过分压以后电压都在2.5V以内,所以这里可以直接使用芯片内置的+2.5V参考电压,在程序中必须将控制器的REF位置清为“0”。

图5 AD7888与MCU连接图
子程序入口参数Adcaddres通过设置控制寄存器来修改采样通道和工作模式
unsigned int get_ad(unsigned char Adcaddres) //写入控制字和读出转换数据 { unsigned char i,j; unsigned char Strdatah,Strdatal,Tempdata; unsigned int Strdata; Tempdata=0×0; Strdatah=0×0; Strdatal=0×0; Strdata=0; Ad_cs(0); //使能AD7888片选有效 Ad_sclk=1; for(i=0;i<8;i++) //前8个时钟周期进行控制寄存器的写入 { //和读出上次转换的高4位数据 Ad_din=(bit)( Adcaddres &(0×80>>i)); //先移出最高位 Ad_sclk=0; for(j=0;j<2;j++); Ad_sclk=1; for(j=0;j<2;j++); Strdatah=Ad_dout; Strdatah=Strdatah<<(7-i); Tempdata=Tempdata | Strdatah; } Strdatah=Tempdata; Tempdata=0×0; for(i=0;i<8;i++) //从AD7888中读取低8位采样码 { Ad_sclk=0; for(j=0;j<2;j++); Ad_sclk=1; Strdatal=Ad_dout; Strdatal=Strdatal<<(7-i); Tempdata=Tempdata | Strdatal; for(j=0;j<2;j++); } Strdatal=Tempdata; Strdata=(Strdatah*256 +Strdatal)&0x0fff; //去除高四位的无效数据”0”,防止误码出现 Ad_cs(1); //使能AD7888片选无效,降低功耗 return(Strdata); } 程序中把写控制寄存器通知采样某通道和读出上次转换的高位有效数据同时进行,提高了转换的速度,使应用程序编程更加高效。
当电源不稳定或者电路出现干扰的时候,AD7888输出的采出码将出现波动,使得采样效果变差,这时可以在读数据时采扁平型电感用防脉冲干扰移动平均值法数字滤波,即加入后置滤波器,使效果得以改善。下面是相关的程序。
子程序入口参数Adcaddres通过设置控制寄存器来修改采样通道进行数字滤波
#define LEN 18 //采样数组的长度 #define SHIFT 4 //LEN = 2^SHIFT+2 unsigned int szlb(unsigned char Adcaddres){ unsigned char pdat; //移动指针 unsigned char pmax,pmin; //记录数据表中最大值和最小值的位置,在一般的数据采集系 unsigned char i; //统中一体成型电感,数据的长度>=8, unsigned int datas[LEN]; //因此用指针记录而不是直接记录最大值和最小值 unsigned int average=0; //清零,用来计算平均值 pmax=0; pmin=0; for ( pdat=0;pdat<LEN;pdat++) //采样所得数据存入数据表中 { datas[pdat] = get_ad(Adcaddres); DelayMs(0×06); } for(i=0;i<LEN;i++) average+=datas[i]; //求所有数据总和 /******去除被认一体电感器为是脉冲的数据*******/ for ( i=LEN;i>0;i--) { if(datas[i-1]>datas[pmax]) //记录数组中最大值的下标 pmax=i-1; if(datas[i-1]<datas[pmin]) //记录数组中最小值的下标 pmin=i-1; } average=average-datas[pmax]-datas[pmin]; //减去脉冲 return (average>>SHIFT); //求算术平均值 }大功率电感
设计中需要注意的问题
板上电源方案选择板内需要5V、3.8V、3.3V几种电源。 3.3的功率最大,大致需要10几瓦。 由AC/DC转换供到板子的是12V电源,板上所需电源由12V声场,采用两种方案。 一种是,从12v用LM2695,先将12v转换为5v, 板上MCU需要的3.3,由LDO来在5v的基础上进一步转换。 需要的3.8V电源需要由MIC29302从5V上转换;另外一种方式,采用2片LM2596,分别转换成5v和3.3v,那种方案更合理一些。 这个其实还根 后续接的什么设备有关通常的做法是 12--5V 然后 5V 出两路 得到3. mosfet的并联驱动问题请问用一个驱动芯片来同时驱动两个并联的mosfet(mosfet的型号是IRFP4468PbF)时,应该怎么选择驱动芯片?最好还能画出驱动与mosfet的连接图楼上直接PIN对PIN并起来既可,不需要增加 智能电网之电力电子技术 4月08日 第三届·无线通信技术研讨会 立即报名 12月04日 2015•第二届中国IoT大会 精彩回顾 10月30日ETF•智能硬件开发技术培训会 精彩回顾 10月23日ETF•第三届 消费
2/3 首页 上一页 1 2 3 下一页 尾页 |