feedforward 发表于 2020-7-22 23:43:51

AD2S1205调试总结

       最近调试某新研产品的旋变解码器,结果被一个诡异问题折腾了一周,今日问题终得解决,遂以本文以记之,以期对后来者有所帮助!

      旋转变压器(resolver)是一种电磁式传感器,又称同步分解器。它是一种测量角度用的小型交流电动机,用来测量旋转物体的转轴角位移和角速度,由定子和转子组成。 
      按转子上有无绕组,可以将旋变分为无刷旋转变压器和磁阻式旋转变压器。无刷旋变通过环型耦合变压器来实现转子绕组和外电路的连接,但是,由于环型耦合变压器的存在,造成旋转变压器的尺寸、体积、重量较大,在一些空间有限的场合应用受到限制。磁阻式旋转变压器(VR旋转变压器)转子上不安置绕组,而是把激磁和信号绕组都安放在定子上。 磁阻式旋转变压器根据磁阻变化原理设计的一种无接触式旋转变压器,随着转子位置角的变化,气隙磁导不断变化,气隙磁密也不断变化,从而导致定子上信号绕组的感应电势不断变化。
       按旋转变压器极对数的多少,可以分为单对极旋变和多对极旋变两种。其中多对极旋变是为了提高角度测量的精度,一般使用时与被测电机的极对数匹配一致。既有单独使用的多对极旋转变压器,也有和单对极旋变组成统一系统的旋转变压器。在组成的统一系统中,如果单对极旋变和多对极旋变各自独有自己的定、转子铁芯,这种结构被称为单通道旋转变压器;如果单对极旋变和多对极旋变在同一套定、转子铁芯中,而分别有自己的单对极绕组和多对极绕组,这种结构被称为双通道旋转变应器,一般双通道结构的旋转变压器较多。所以,目前按极对数来分类的旋转变压器,主要应用的是:单对极旋变,多对极旋变,双通道旋变。  补充说明:旋转变压器的极对数也被称为轴倍角,极对数为n时的轴倍角表示为nX。即:单对极旋变的轴倍角是1X,轴倍角2X以上为多对极旋变,单对极与多对极组合的旋变的轴倍角表示为1X-nX。单对极旋变、多对极旋变、组合旋变亦被称为单速旋变、多速旋变、复速旋变。
      旋变极对数越多,轴角倍数(电角度与机械角度的比值)越大,从而可以通过缩小量程来提高机械角的分辨率,多极旋变提高测量精度的原理如下:       三对极的旋变机械角转动360°,电角度将转动3个360°,四对极的旋变机械角转动360°,电角度将转动4个360°
      为了提高测量精度,本次采用多极旋变,而为了便于电机控制,通常选用和电机极对数相同的多极旋变!本次选用的永磁同步电机为3对极(6极),为此选用3对极的旋变, 本次使用的旋转变压器磁阻式旋转变压器如下图所示:

      本次旋变解码器选用的AD2S1205,它可实现12bit的分辨率,数据可设置为通过并口或SPI口输出,此外还留有ABI输出接口,AD2S1205推荐电路如下:
   本次实际使用的电路原理图如下:
      以下直接上本次调试过程:      问题1:无励磁输出      根据手册,AD2S205的EXC+,EXC- 将输出中值2.5V,峰峰值3.6V的正弦波,但我的AD2S1205的EXC+,EXC-输出均为3.75V的固定电平!经查,电路原理正确,励磁缓冲放大电路也正常;在网上查,有网友因AD2S1205某管脚短路产生EXC+,EXC-输出固定电平的现象,经测量,我的AD2S205所有管脚均未短路.仔细查阅手册发现,AD2S1205复位需要满足特定的时序:
       当AD2S1205的电源电压小于4.5V时,AD2S1205处于低电压复位状态,LOT/DOS同时为低电平指示,系统复位无信号。当电源电压超过4.5V以后,RESET管脚需保持有效电平至少10μs以上,使得AD2S1205芯片复位.       经测量,我的复位管脚电压恒为0.9V,显然不对,可是我明明用了专门的复位芯片APX809啊!经过一番检查后发现器件采购竟然错了,APX809不同后缀监控电压不同:       本次采购的是APX809-26SR,其监控电压为2.63V,而我的AD2S1205是5V供电,应该选用APX809-46SR,于是重新采购器件,换上新买的APX809-46SR后复位时序终于正常了,但EXC+,EXC-输出仍为3.75V的固定电平,这一折腾就是三天!用尽一切办法就是没有励磁输出!最后只能做最坏的打算:考虑AD2S1205坏了! 换了一片AD2S1205后梦寐以求的励磁信号终于有了:          但这下傻眼了,此次控制器是新电装的,全程静电防护也做的比较到位,为啥AD2S1205会坏?看来又遇见奸商了!      问题2:解算角度与旋变极对数不匹配      接上旋变开始测试,用手正转动电机,旋变解算出的角度从0到360°变化,反转电机旋变解算出的角度从360°到0变化,貌似一切正常,难道调试就这么结束了? 哈利路亚!   但很快我就发现不对,我的旋变是3对极,电机转一圈旋变解算出的电角度应该变化3个360°才是,为毛我的控制器输出显示电角度变了6个360°???
   这下有开始了新一轮的折磨!怀疑sin+,sin-或cos+,cos-接反了,对调了一下in+,sin-或cos+,cos-,结果只是解算的电角度反了个向,问题依旧!经查旋变输入的sin,cos信号均正常:    折腾3天后黔驴技穷,无意中我用示波器测量AD2S1205的NM信号(即ABI信号里的I信号),理论上每过一次360° NM管脚会输出一个脉冲,但我测量发现每次第一次输出电角度过360°时NM管脚未输出脉冲,而第二输出电角度过360°时NM管脚输出脉冲,持续转动该问题稳定出现.这表明AD2S1205内部解算的角度似乎是对的,只是不知何故输出的角度值被乘了2倍!难道通信出错了?
   AD2S1205可以采用并口输出角度,也可以通过SPI总线输出角度,本次通过将SOE管脚拉低选用SPI总线模式.通过SPI总线每次从AD2S1205读取16bit,其中bit3~bit0分别为RDVEL,DOS,LOT,PAR ,其中PAR为奇偶校验位,我将STM32从AD2S1205通过SPI总线读出的原始值打印出来,发现转动过程中,数据呈现如下变化规律:
    xxxxxxxxxx11110b-->xxxxxxxxxx11100-->xxxxxxxxxx11110b-->xxxxxxxxxx11100-->xxxxxxxxxx11110b
    即:bit0恒为0,bit1不停翻转,这就有点诡异了,LOT不停翻转表明不停发生失去环路跟踪的错误,而bit0恒为0表明奇偶校验位保持为0,这显然不对!因为角度输出是连续的,所以不可能不停发生失去环路跟踪的错误,而奇偶校验位应该不停翻转才对,有效角度bit15~bit4的bit4也不应该恒为1,随着电机转动总该遇见一次0才对!于是我分析了一种可能:STM32通过SPI总线读取AD2S1205串行输出的角度值时发生了错位,将bit14当成了bit15,bit13当成了bit14.....bit3(即RDVEL)当成了bit4,DOS当成RDVEL,LOT当做DOS,PAR当做DOS,最后再采集1bit的0当做PAR,这样就可以解释所有现象了:
   由于RDVEL,DOS,LOT恒为1,所以bit4~bit2恒为1,PAR不停翻转,所以bit1不停翻转,通信完毕后数据线为低电平,所以最后采集了一bit0,即bit0恒为0,bit15~bit4按1,3,5,7.....0xFFF规律变化,解算出的1~360°变换实际对应bit14~bit4从0~180°的变化,即整个有效角度12bit被左移了1bit(即乘以2). 综上所属,该问题应该是SPI通信时序错误造成的!
   AD2S1205的SPI通信时序要去如下:
   
   具体时序指标如下:

   怀疑我的SPI时钟上升沿距离读取有效数据间隔太小,不满足t10要求的30ns的指标,于是在软件代码中在将SCK信号置高和读取SO信号之间加了延时,然而并没有什么卵用!
   继续深读手册,终于有了发现:

   手册中明确说了,AD2S1205片选(即SPI总线片选)置低必须发生在时钟信号为高的情况,否则bit14会在第一个时钟上升沿被读出,从而导致最高有效位(bit15)丢失! 这不是在专门描述我这个问题吗? 至此,真相终于大白! 修改方法如下:
   先将SCK置高(因为最后的bit0传输完毕后SCK为低),之后在将片选置低,然后开始读取16bit(过程为:SCK置高-->读取SO-->SCK置低,循环16次),更改后接上旋变测试,输出角度如下图所示:


页: [1]
查看完整版本: AD2S1205调试总结