英飞凌TC3xx之一起认识DSADC系列(七)应用实战项目二(生成旋变激励信号,读回旋变数据)

2023-12-24 18:36:01

本文写一篇关于DSADC的resover的载波信号生成的应用,刚刚接触DSADC的开发者很容易被手册中简短的文字描述弄的迷惑,它到底在说些什么呢?笔者通过本文中详细的图文解说,帮大家将这一块的知识点梳理清楚。
后续部分,我们会进一步详细解说,如何使用EDSADC生成激励信号,并读回旋变数据进行解码操作,进而得到旋变角度数据。


1 项目要求

  • 使用DSADC给出resolver激励信号
    总线时钟fADC=160MHz
  • 使用DSADC测量resolver返回信号

2 项目实现

2.1 内部时钟配置

给出时钟配置的结构图,供大家回想。时钟生成架构

  • 如果使用DSADC生成激励信号,并通过DSADC读回旋变的正弦和余弦数据,那么从上图可知这里涉及到两个时钟信号的配置:载波发生器的时钟信号,以及片上调制器的时钟信号。
  • 具体的配置可以根据各自项目的实际情况考虑,在本例中,我们配置载波发生器的时钟为10MHz,所以由下图可知,配置寄存器DIVCG为fCG = fCLK /16;配置片上调制器时钟为20MHz,所以配置寄存器DIVM为fMOD = fCLK /8.
    载波发生器时钟配置
  • 来自外部总线的时钟fADC 经过DIVCG分频后得到载波发生器的时钟,频率为10MHz,再经过PWM Counter后进入Pattern Counter。
  • 这里配置SIGPOL为0,从正半周开始输出波形,同时给出符号信息Sign供后续采样处理使用;再配置CGMOD为11B (sine wave),输出正弦波形;配置BREV为0,正常输出bits,不进行翻转;经过Comparator后给出载波PWM波,频率为fPWM = 10M/32 = 312.5kHz。
  • 该PWM波信号从AURIX选定的管脚输出,具体可通过配置管脚的输出选项来选定。该PWM波频率为312.5kHz的,周期相同,占空比不同,32个周期的该PWM波构成一个载波周期,所以载波频率为fcarrier = 312.5kHz/32 = 9.765625kHz。
  • 含有高频信息的载波信号再经过硬件电路的一系列处理后,主要是低通滤波电路的处理后,得到基波信号,该基波为平滑的正弦波,频率为312.5kHz,也就是我们所期待的由DSADC生成的激励信号,再将该激励信号接入到旋变设备。

为了方便读者便于理解,这里给出两个图形示例:
(1)频率为312.5kHz的PWM波信号
PWM波图形示例
(2)频率为9.765625kHz的正弦波激励信号
正弦波激励信号

由上文可知, fMOD = 20MHz,fcarrier = 9.765625kHz,所以一个载波周期内共被采集数据2048个,又知道CIC抽取率为32,所以一个CG周期内得到2048/32=64个数据,半个周波32。
所以配置载波发生器同步信号:
CGSYNCx.SDPOS为1F(32),CGSYNCx.SDNEG为3F(64)。

2.2 输入信号配置

旋变给出的实时测量数据反馈到AURIX,通过两路差分信号来实现,正余弦各有一路差分信号。这里以正弦信号为例,假设从旋变给出的差分SIN信号的名字为SIN_P和SIN_N,下图给出示例:
旋变输出信号
SIN_P和SIN_N经过板上电路的处理后,假设给到EDS0PA管脚作为输入信号,所以寄存器INCFGP和INCFGN都选择Input pin;配置INMUX = Input pin position A,INSEL = A;配置INMAC = Preset mode;调制器增益选择1,GAINSEL=0,从而得到持续的数据流,该数据流进入滤波器链路。
输入信号架构图

2.3 调制器配置

根据项目设计,使用片上调制器,即调制器不使用外部门电路控制,而是由软件控制,所以配置DSS=On chip;对外部总线时钟八分频,所以配置DIVM为8,即调制器时钟频率fMOD = fADC /8 = 20MHz;数据采样时钟使用内部时钟,所以配置CSRCEx=Internal;同时,由于数据来源于外部输入管脚,所以配置DSRCEx = External A direct;在触发信号高电平和低电平的时候都给出结果值,所以配置SRGM=Always;触发信号使用ITR0A(通过GTM模块的INSEL寄存器配置),所以配置TRSEL = 0;同时使用触发信号的上升沿和下降沿都作为触发时刻,所以配置ITRMODE=Permanent;输入正弦信号也是低频信号,为了保证良好的信噪比,打开内部抖动功能,所以配置DITHEN=1;其它配置TSTRMODE\INMODE\APC都是用默认值。
输入路径总结
关于解调器部分的配置如下:
结果值作为有符号数存储,每个寄存器存储一个值在低位,高位填0,所以配置RDM = signed mode,DRM = 01。
转换结果存储部分:
转换结果存储

2.4 滤波器链路配置

  • 滤波器链路只使用CIC滤波器,CIC为CIC3模式,所以配置CICMODE = CIC3;关闭CIC预滤波器,所以配置PFEN = Disable的;关闭FIR滤波器,所以配置FIR0EN = Disabled,FIR1EN = Disabled;关闭过冲补偿,所以配置OVCEN = Disabled;关闭偏移补偿功能,所以配置OCEN = Disabled;关闭辅助滤波器,所以SRGA = Disabled。
  • 积分器配置REPVAL为1;对64个数据进行积分,所以配置NVALINIT为0x3F;舍弃0个值,所以配置NVALDIS为0;内部控制积分结束,所以配置IWS = 0;当INTEN=1,积分开始启动时,重启滤波器链路,所以配置FRC = 0;通过计算可以得到ISC = 25:9,即积分值IIVAL的第9:25bits移位到FIFO中。

(1)滤波器链接结构:
滤波器链路结构
(2)运行时校正部分
运行时校正

(3)FIR滤波器部分:
FIR滤波器
(4)积分器部分
ISC的配置用于控制积分器窗口在何时关闭,而ITR0A决定了积分器窗口何时启动。
积分器窗口

  • 增益计算部分
    CIC滤波器运行时使用抽取率32,校正时使用抽取率512,所以配置GAINCTRL.CICDEC=3.
    此处再次提醒抽取率的配置计算公式:

    N = 2(CICDEC+3) = 8 × 2CICDEC

下面给出相关计算:

(1)在运行期间,使用GAINCORRx这个寄存器的配置,配置CFMDF为1F,即N=32,通过计算得到如下数据:
For N = 32, on-chip modulator:
N3 × 4 × 0.6945 = 91,029.504 [CICSHIFT] =
roundup(14 - ld(2 × 25 000 / 91,029.504)) = roundup(14 - (-0.864)) =
15 (0FH)
校准系数是:
(2 × 25 000 / 91,029.504) × 2(15-14) = 1.0985
截断后这个位域的值是
[GAINFACTOR] = truncate(1.
09854096)=truncate(4499.6400)=4499=1193H
(2) 在校准期间,使用GAINCTRx这个寄存器,此时CICDEC使用配置的寄存器数值是6,对应的抽取率为2(6+3)=512,即N=512,通过计算得到如下数据:
For N = 512, on-chip modulator:
N3 × 4 × 0.6945 = 372,856,848.384
[CICSHIFT] = roundup(14 - ld(2 × 25 000 / 372,856,848.384)) =
roundup(14 - (-12.864)) = 27(1BH)
校准系数是:
(2 × 25 000 / 372,856,848.384) × 2(27-14) = 1.0985
截断后这个位域的值是[GAINFACTOR] = truncate(1. 0985
4096)=truncate(4499.6400)=4499=1193H
所以配置GAINCTRL.GAINFACTOR为1193H,配置GAINCTRL.CICSHIFT为43:27,配置GAINCTRL.CICDEC为6.
同时配置GAINCORR.CICSHIFT为31:15,配置GAINCORR.CICSHIFT为1193H,配置CFMDF为001F(抽取率32).
设置主滤波器链路结果值满量程为25000,所以配置CALTARGET为61A8H

计算滤波器链路的组延迟如下:

首先计算数据输出周期:
fMOD = 20 MHz -> tMOD = 50 ns
前提:预滤波器关闭,OSR(CIC3) = 32,FIR0 关闭,FIR1 关闭,OC 关闭,对(64×1)个值进行积分。
所以数据输出速率为:
fD = fMOD /(PreFIR_OSR * CIC3_OSR * FIR0_OSR * FIR1_OSR * (<NVALINT+1> × <REPVAL+1>))
= fMOD / (1 × 32 × 1 × 1 × (64×1) = 9.765625 kHz
tD = 1 / fD = 102.4 us,即输出一个结果数据需要102.4us。
组延迟为:
[1 + 0 + (3 × 20 ×(32-1) / 2) + 0 + 0 + 0 + (63×20×32×20×20 / 2)]× tMOD
= (1 + 46.5 + 1008) × tMOD = 1055.5×50 ns = 52.775 μs
在给定的过采样率为 1×32×1×1×64 = 2048 时,这相当于 0.52 × tD (数据输出速率周期)的延迟。也就是说从启动该路采样后,到第一个有效值输出之间需要有53us的延迟时间。

2.5 整流器配置

  • 配置RFEN为Enable,使用片上的载波发生器,配置SSRC为On-chip;SSCH按照各自的sign符号来源配置,比如对于SIN数据,通过EDS0PA采样,SSCH配置为从0通道获取sign信息,对于COS数据从EDS1PA采样,SSCH配置为1;之后DSADC会按照所配置的信息,自己完成一系列的计算,使用者只需要从RESMx及时取数据就可以了。
  • 注意,这里从RESMx中读取到的数据就是旋变的SIN和COS的结果值了,由前文可知,对应的满量程区间为25000,后续应用可继续处理。
    旋变载波部分

3 总结

本文给出了使用DSADC生成载波信号,并进一步读回载波数据的过程,开发者可以从结果值寄存器得到一个采样点的值,进而用于后续计算和控制。

文章来源:https://blog.csdn.net/wss_xt/article/details/135121839
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。