Resolver 配置

TC3xx

Resolver Support

解析器应用程序通过评估来自两个正交放置的线圈的信号来确定旋转角度。
这些线圈由第三线圈的磁场激励。
通过提供几乎完整的接口硬件(功率级除外)和对输入数据进行预处理(整流、集成),以通过更高级别的软件算法优化评估,有几个功能可用于支持这些应用。

Resolver System Overview

EDSADC可以使用两个输入通道读取两个返回信号,还可以生成激励正弦信号(载波)。
它还提供同步逻辑来补偿生成的载波信号和接收的位置信号之间的延迟。
积分器级将基于载波的返回信号转换为基于位置的值(载波消除)。

在这里插入图片描述

Carrier Signal Generation

在这里插入图片描述
载波信号周期由32个setp组成。每个setp等于32个周期的PWM周期。
位反向生成模式增加频谱以产生更平滑的感应正弦信号。
这是通过在PWM周期的32个周期上分配0和1比特来实现的。
生成的模式实际上是一个余弦信号,即它从最大输出值开始。如果输出引脚在载波信号产生之前被拉高,这是有利的。在下拉的情况下,应该选择反相的输出信号。

向载波信号发生器(CG)提供模块时钟信号,并输出PWM信号,该PWM信号在分解器的励磁线圈中感应正弦信号。
或者,它可以生成类似三角形或正方形信号的PWM模式(见图322)。可以选择载波信号的极性。

在这里插入图片描述

Return Signal Synchronization

在解算器中,接收到的返回信号由载波信号感应,并且它们的幅度用与当前解算器位置相对应的正弦和余弦幅度进行调制。
这些幅度是通过在载波信号周期上对返回信号进行积分来确定的。
为了正确地积分它们的幅度,必须对返回信号进行整流。为此,载波发生器提供生成的载波信号的符号信息(寄存器CGCFG中的SGNCG)。
或者,可以使用外部载波信号发生器。如果该发生器提供符号信号,则可以将其输入到引脚,然后用作外部载波符号信号。如果没有符号信号可用,载波信号本身可以由另一个输入通道(寄存器RECTCFGx(x=0-13)中的SSCH)进行转换,然后将其符号信号用作备用载波符号信号。
必须延迟接收信号的整流,以补偿通过系统(驱动器、旋转变压器线圈、电缆等)的往返延迟。
对于整流,将接收到的值与延迟的载波符号信号(寄存器RECTCFGx(x=0-13)中的SGND)相乘。
这种同步是为每个通道单独完成的,以实现每个信号的最大可能振幅。(整流单元是积分器级的一部分。因此,它仅在积分器处于活动状态时才处于活动状态。)
延迟是通过sin延迟计数器SDCOUNT来实现的。SDCOUNT在载波的符号信号(SGNCS)的下降沿被清除并开始,即在载波信号的正半波的开始处。
在对来自滤波器链的SDPOS结果进行计数之后,整流信号(SGND)也被清除,从现在起指示正值。
对SDNEG值进行计数后,设置整流信号,指示负值(另见图323)。

在这里插入图片描述
每当从滤波器链获得新的结果值时,整流计数器被更新,并且整流值被转发到积分器。

比较值SDPOS和SDNEG由应用软件存储。
SDPOS是解释解算器信号的往返延迟的延迟值。
当在相应信道中接收到第一个正结果(在负结果之后)时,通过将当前计数器值捕获到位字段SDCAP中来恒定地测量该延迟。软件可以读取这些值并计算延迟值,例如通过对一系列测量值进行平均来补偿噪声。
负半波(SGND=0)的延迟是通过将载波信号半波的持续时间相加来确定的。该值被写入位字段SDNEG。

通过设置标志SDCVAL来指示新的捕获值。当读取寄存器CGSYNCx时,此标志被清除。
获取新值可以触发服务请求。备用服务请求行用于此目的。
该备用请求源由寄存器FCFGMx(x=0-13)中的位字段SRGA选择。
注意:当过滤器链初始化时,位字段SGND、SDCVAL、SDCAP和SDCOUNT将被清除。

通用定义

#define CGPWMN    &MODULE_P33,11                                           /* LED D107: Port, Pin definition       */
#define CGPWMP    &MODULE_P33,12                                           /* LED D107: Port, Pin definition       */
#define MODULE_EDSADC /*lint --e(923, 9078)*/ ((*(Ifx_EDSADC*)0xF0024000u))

励磁

void init_excitation()
{
    IfxPort_setPinModeOutput(CGPWMN, IfxPort_OutputMode_pushPull, IfxPort_OutputIdx_alt6);
    IfxPort_setPinModeOutput(CGPWMP, IfxPort_OutputMode_pushPull, IfxPort_OutputIdx_alt6);
    if(MODULE_EDSADC.CLC.U != 0)
    {
        MODULE_EDSADC.CLC.U = 0;
    }
    MODULE_EDSADC.GLOBCFG.U = 0x9000;
    MODULE_EDSADC.CGCFG.B.CGMOD =3;
    MODULE_EDSADC.CGCFG.B.BREV =1;
    MODULE_EDSADC.CGCFG.B.DIVCG =3;
    MODULE_EDSADC.GLOBCFG.U = 0xF000F;
}

SIN通道配置 EDS0B

void init_sin_channelb()
{
    Ifx_EDSADC_CH_MODCFG modcfg;
    Ifx_EDSADC *edsadc = &MODULE_EDSADC;
    modcfg.U = edsadc->CH[0].MODCFG.U;
    modcfg.B.INCWC = 1;
    modcfg.B.INCFGP = 0;
    modcfg.B.INCFGN = 0;
    modcfg.B.INMUX = 1; /* B Channel */
    modcfg.B.INMODE = 0;
    modcfg.B.INMAC = 0;
    modcfg.B.INSEL = 0;
    modcfg.B.MMWC = 1; // 放到前面
    modcfg.B.DIVM = 0; // 20kHz
    edsadc->CH[0].MODCFG.U = modcfg.U;

    Ifx_EDSADC_CH_DICFG dicfg;
    dicfg.U = edsadc->CH[0].DICFG.U;
    dicfg.B.DSWC = 1;
    dicfg.B.MSWC = 1;
    dicfg.B.ITRMODE = 3;
    dicfg.B.DRM = 1;
    dicfg.B.TSM = 1;
    dicfg.B.DSS = 0;
    dicfg.B.CSRCEX = 0;
    dicfg.B.RDM = 1;
    edsadc->CH[0].DICFG.U = dicfg.U;

}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值