1.文件夹中的两个PDF,其中AD7622.PDF是把目录翻译过的,并且翻译了其中比较重要的段落,这个文件保留下来方便以后查找,不要覆盖。另外一个AD7610中文.pdf是ADI公司的另一个AD转换器,和AD7622有很多相似之处,但是因为文档是中文,比较易于理解,可以看完后有个整体的概念,并且在看AD7622.PDF时可对比参照段落的意思;2.AD7622在ADI公司的众多产品中是功能比较简单的,(硬件参数不懂),因为在软件上来说,它是一个单通道的,并且内部没有可调增益的功能,所以在软件上来说既不需要设置用哪个通道来采集,也不需要设置用哪个档位的增益,只需要控制好转换读取的时序即可。3.此次硬件上AD7622与STM32的连接方式是串行通讯(没有用并行,并行也支持),STM32的串行通讯SPI的最大速度是18M位(STM32的手册上有),AD7622是16位,所以18/16最大才可以达到1M的数据传输量,和AD7622本身的采样率1.5M(有两种采样率,这是其中一种)慢一些,所以说硬件设计上不能发挥AD7622的最大速度(用并行好像可以提高速度)。4.知道了AD7622和STM32是用SPI通讯后,还要知道硬件设计上是采用STM32作为“主”,AD7622作为“从”来通讯的,软件的设置要匹配硬件才可以;看完AD7622的文档后,发现在编程时具体要参照哪个时序图,还要知道硬件设计上是采用:转换之后读取数据还是转换期间读取上一次的转换数据,此次硬件设计是采用转换期间读取上一次的转换数据的方式;综上所述:SPI通讯(串行)、AD7622作为“从”、转换期间读取上一次的转换数据三个依据我们在开发时的时序依据是AD7622.PDF第25页的“Figure41.”这个时序图。5.我按照我的理解说明一下这个时序图,代码也是按照这个理解来编写的:看这个之前先要把AD7622的这一块的目录(从串行接口SLAVESERIALINTERFACE)先看完再来看这个,那上面有一个基本的介绍,但是没有时序图的说明。CS是片选信号,时序图上显示,低电平是片选有效,AD7622接入,此次硬件设计上已经将片选持续拉低,软件不用控制。CNVST是转换开始,需要由软件来控制,时序图上显示CNVST低电平开始转换,转换时BUSY信号为高电平时SCLK开始有效(外部输入或者内部时钟:本次程序采样率为370k采用的外部输入一个无效的16位数产生16个时钟),SDOUT数据输出16位数据,读取数据完成后,CNVST要由软件控制重新拉高,下次转换再拉低。上图中,标着一些时间(t3、t18等),这些时间在PDF上都有详细的说明,以及时间长度,如果在需要延时的地方延时多久要按照这个来。在软件读取采集数据的过程中,排错的方法是用示波器看单个哪个脚的波形有问题,方便分析原因,如果单个看每个脚都有一个比较正常的高低变换,那就要合起来看全部脚的时序是不是哪里控制的不对,匹配不上整个时序图(该读的时候没读,该延时读的时候没有延时读等)。这在以后做其他需要时序控制的芯片上调试也是个参考。CNVST必须配置为GPIO_Mode_Out_PP,否则发送低电平时无法发送出去,那整个过程的开始都没法做,CNVST没有高低变化,后面的BUSY,SDOUT同样也没有高低变化6.关于SPI的配置,(参照AD7622初始化的代码看)SPI_Direction、SPI_BaudRatePrescaler、SPI_Mode这两项是改进效率时我主要修改的配置,下一项会详细说明;SPI_DataSize:SPI一次传输的数据的位数,AD7622是16位,此处设置的是SPI_DataSize_16b,网上的其他关于SPI的设置也有设置为8位读两次然后拼起来的方式,没有尝试。SPI_CPOL和SPI_CPHA,这两个参数至今也没能好好理解,SPI理论上说设置这两个参数是要通讯芯片(AD7622)在时钟上保持一致;所以既要看明白STM32的时钟,也要看明白AD7622的,没太懂,这个在所有的SPI通讯的时候都是要考虑的因素。此次设置在AD7622的说明上可以参照PDF的第26页已经翻译过的那段说明。SPI_NSS:理论解释是“软件片选还是硬件片选”,不明白两个的区别,此处设置的是软件,网上SPI_NSS_Hard的资料几乎没有,解释也是只有如上的一句话。SPI_FirstBit:数据传输时高位在前还是低位在前,这个是AD已经定义好的,在SLAVESERIALINTERFACE这章节有说明。AD7622采用MSB(高位在前)。SPI_CRCPolynomial:没用7.此处采样率大概在370k,达不到理想的1M多(18/16=1.125,上面有说明)。SPI_Mode为SPI_Mode_Master是STM32作为SPI通讯的主设备(硬件决定),以我现在理解的主设备和从设备通讯的方式来看,AD7622(从)要把数据传给主STM32,那么STM32(主)必须在每次要读数据时先给AD送时钟,送时钟比较耗时,这是采样率低的一个很重要的因素,如果不送时钟,直接读数读不出来,SPI接口读数的代码会一直处于等待状态;但是我修改SPI_Direction的为SPI_Direction_2Lines_RxOnly(只读模式),不送时钟也可以读到数(SPI_BaudRatePrescaler这项配置是SPI_BaudRatePrescaler_4,意思是:STM32的时钟频率是72M,72/4=18,达到SPI通讯的最大速度),只是数不对(这种方式提高效率也许可行,但在这个方面没有理论支撑,只是我的一个尝试),但是采样率可以达到370*2的水平,提高一倍,由此可说明,送时钟是主要耗时的因素,现在的问题是按照我的理解,有理论支撑的是,STM32作为从,AD7622作为主,那么AD7622可以直接给STM32送数据,这样就不用送时钟了,理论上采样率可以达到370*2的水平,但是要把AD7622改成主,STM32改成从,那么必须硬件先修改,软件才可以尝试8.采样率370K暂且可以用,下面来说一下,采集值和电压值直接的关系,AD7622模拟端是差分输入的芯片,具体什么是差分我也只有个概念,但是现在目前这种输入方式对我换算电压的影响是:当模拟输入端为0V时(用示波器看)采集值时62236/2=32768,输入端电压为负值,采集值为0-32768的范围,输入端电压为正值,采集值为32768-65536的范围,上面说的0和65535两个值都是理想值,实际采集到数最大达到5万多(模拟端输入+1V,用示波器给到很大值,模拟输入端可能才能达到1V,因为前面还有信号调理电路),最小200多(模拟输入端-1V),5万多和32768的差值比较32768和200多的差值,差值不同,但此处认为是相同的。综上所述,AD采集数的的振幅为200多到32768或者32768到5万多即认为5万-32468,对应的转换电压为1V。详细计算见代码。