TI中文支持网
TI专业的中文技术问题搜集分享网站

RM57L843: HET模块如何生成带有不同相位移的脉冲信号

Part Number:RM57L843

RM57L843的N2HET模块可以生成不同周期的占空比的脉冲信号,如何对这些脉冲信号施加不同的相位移phase shift?

Cherry Zhou:

您好,我们已收到您的问题并升级到英文论坛寻求帮助,如有答复将尽快回复您。谢谢!

,

Cherry Zhou:

您好,

Ruming Shen 说:如何对这些脉冲信号施加不同的相位移phase shift?

您说的phase shift是指两个 PWM 信号之间的死区吗? 

,

Ruming Shen:

你好,简单说就是两个脉冲信号之间如果相位移不一样,周期和占空比一样,那么波形是一样的,只是会有延迟,所以只有周期,占空比和相位移三者都确定了,那么最终的输出波形才确定了

,

Ruming Shen:

我可以给你贴张图,直观地描述相位移,只是无法上传图片

,

Cherry Zhou:

您点击回复框中的“插入”–"图像/视频/文件"-点击灰色的“上传”按钮,然后选择您需要上传的图片即可(或直接将所需图片拖曳进来)。

,

Ruming Shen:

,

Cherry Zhou:

好的我们反馈给工程师看下哈。

,

Cherry Zhou:

Ruming Shen 说:简单说就是两个脉冲信号之间如果相位移不一样,周期和占空比一样,那么波形是一样的,只是会有延迟,所以只有周期,占空比和相位移三者都确定了,那么最终的输出波形才确定了

是的,您可以使用 N2HET 汇编指令来实现它。 下面是一个shifting第二代PWM 脉冲的示例:

====================

L00 CNT { reg=A,max=0x1FFFFFF,data=0};

L01 PWCNT { next=L02,cond_addr=L02,en_pin_action=ON,pin=0,action=PULSEHI,reg=NONE,data=5};L02 DJZ { next=L03,cond_addr=L014,reg=NONE};

L03 SUB { src1=IMM,src2=A,dest=NONE,next=L04,data=7};L04 BR { next=L00,cond_addr=L05,event=N};

L05 PWCNT { next=L06,cond_addr=L06,en_pin_action=ON,pin=1,action=PULSEHI,reg=NONE,data=5};L06 DJZ { next=L013,cond_addr=L016,reg=NONE};

L013 BR { next=L00,cond_addr=L00,event=NOCOND};

L014 MOV64 { next=L015,remote=L01,control=OFF,en_pin_action=ON,cond_addr=L02,pin=0,comp_mode=ECMP,action=PULSEHI,reg=NONE,data=5,hr_data=2};L015 MOV64 { next=L03,remote=L02,control=OFF,en_pin_action=ON,cond_addr=L014,pin=0,comp_mode=ECMP,action=PULSEHI,reg=NONE,data=9,hr_data=2};

L016 MOV64 { next=L017,remote=L05,control=OFF,en_pin_action=ON,cond_addr=L06,pin=1,comp_mode=ECMP,action=PULSEHI,reg=NONE,data=5,hr_data=2};L017 MOV64 { next=L013,remote=L06,control=OFF,en_pin_action=ON,cond_addr=L016,pin=1,comp_mode=ECMP,action=PULSEHI,reg=NONE,data=9,hr_data=2};

======================

使用 PWCNT 和 DJZ 指令生成 PWM 信号。

MOV64用于更新 PWCNT 和 DJZ 的数据和控制

SUB 和 BR 用于在第一个 PWM 和第二个 PWM 之前插入延迟。

https://e2e.ti.com/cfs-file/__key/communityserver-discussions-components-files/908/PWM.het

,

Ruming Shen:

你好,谢谢。能帮忙解释下,各条指令里面的参数是什么意思,以及每条指令如何映射成hetRAM的地址,这样我才知道如何将对应的指令的program,control和data写入具体的地址。能否帮忙以生成下面两列脉冲为例子进行说明:1.周期160ms,占空比0.375%,延迟0ms;2.周期160ms,占空比0.375%,延迟2ms。非常感谢!

,

Cherry Zhou:

我们问下看哈。

,

Cherry Zhou:

您好,

对于脉宽为600us 的情况,您请参阅 PWCNT 指令说明。 PWCNT 的 DATA 和 HR_DATA 字段定义了脉冲的宽度。 在我们给出的工程师的示例代码中,脉宽== (PWCNT data – 1) * LRP 

DJZ 指令的数据字段指定了周期的长度。 在工程师的示例中,Period =(DJZ Data + 1)* LRP

两个波形之间的延迟=(SUB Data) * LRP

假设 VCLK=75MHz、hr_LR=0、hr=1、并且 LR=32、–> LRP=1*32*13.33ns =426.67ns

要获得600us 的脉冲宽度,PWCNT 的数据寄存器= 600*1000/426.67+1 = 1407.24 -> DATA=1407、hr_data=0.24*32 = 8

要获得160ms 的周期,DJZ 的数据寄存器= 160*1000*1000/426.67-1 = 374998.71 — >data=374998、hr_data=0.71*32 = 23

为了获得2ms 的延迟,SubData = 2ms/LRP = 2000000/426.67 = 4687

Example code:

;PWM code for given HCLK frequency = 150MHz, VCLK2=75MHz, hr=1, and lr=32, so LRP=426.67ns;Pulse Width = 600us, and period = 160ms;The delay between two PWM signals is 2msL00 CNT { reg=A,max=0x1FFFFFF,data=0};

L01 PWCNT { next=L02,hr_lr=HIGH,cond_addr=L02,en_pin_action=ON,pin=0,action=PULSEHI,reg=NONE,data=1407,hr_data=8};L02 DJZ { next=L03,cond_addr=L014,reg=NONE,data=374998};

L03 SUB { src1=IMM,src2=A,dest=NONE,next=L04,data=4687};L04 BR { next=L00,cond_addr=L05,event=N};

L05 PWCNT { next=L06,hr_lr=HIGH,cond_addr=L06,en_pin_action=ON,pin=1,action=PULSEHI,reg=NONE,data=1407,hr_data=8};L06 DJZ { next=L013,cond_addr=L016,reg=NONE,data=374998};

L013 BR { next=L00,cond_addr=L00,event=NOCOND};

L014 MOV64 { next=L015,remote=L01,control=OFF,en_pin_action=ON,cond_addr=L02,pin=0,comp_mode=ECMP,action=PULSEHI,reg=NONE,data=1407,hr_data=8};L015 MOV64 { next=L03,remote=L02,control=OFF,en_pin_action=ON,cond_addr=L014,pin=0,comp_mode=ECMP,action=PULSEHI,reg=NONE,data=374998,hr_data=23};

L016 MOV64 { next=L017,remote=L05,control=OFF,en_pin_action=ON,cond_addr=L06,pin=1,comp_mode=ECMP,action=PULSEHI,reg=NONE,data=1407,hr_data=8};L017 MOV64 { next=L013,remote=L06,control=OFF,en_pin_action=ON,cond_addr=L016,pin=1,comp_mode=ECMP,action=PULSEHI,reg=NONE,data=374998,hr_data=23};

,

Ruming Shen:

非常感谢你们的精彩答复。还有两个问题:

1.Next program address很好理解,就是下一条指令的RAM地址,那么Conditional address又该怎么理解,什么时候或者满足什么条件才会执行Conditional address指向的指令?如果执行了Conditional address上的指令,是不是指定的Next program address就不执行了?这个地方有点迷惑不解。

2.LRP是计算MOV64和SUB的数据寄存器duty,period和delay值的关键,那么计算LRP的lr,hr和VCLK分别指什么?如何确认芯片实际的VCLK,lr和hr?

,

Cherry Zhou:

 好的我们跟进给工程师再看下哈。

,

Cherry Zhou:

您好,

Ruming Shen 说:1.Next program address很好理解,就是下一条指令的RAM地址,那么Conditional address又该怎么理解,什么时候或者满足什么条件才会执行Conditional address指向的指令?如果执行了Conditional address上的指令,是不是指定的Next program address就不执行了?这个地方有点迷惑不解。

Next address是程序流中下一条指令的下一个程序地址。 

Conditional address是condition发生时下一条指令的地址。 condition可以是等于零“equal to zero" 、"Negative" 或"falling edge".。 这个是基于指令的。 

L01 PWCNT { next=L02,hr_lr=HIGH,cond_addr=L02,en_pin_action=ON,pin=0,action=PULSEHI,reg=NONE,data=1407,hr_data=8};L02 DJZ { next=L03,cond_addr=L014,reg=NONE,data=374998};

在 DJZ 指令中,condition是数据字段递减至零。 

L03 SUB { src1=IMM,src2=A,dest=NONE,next=L04,data=4687};L04 BR { next=L00,cond_addr=L05,event=N};

在SUB指令中,condition是EVENT= negative。

由指令生成的标志列在 HET 指令部分的一个表中。

Ruming Shen 说:2.LRP是计算MOV64和SUB的数据寄存器duty,period和delay值的关键,那么计算LRP的lr,hr和VCLK分别指什么?如何确认芯片实际的VCLK,lr和hr?

所有 N2HET 时序都来自 VCLK2,VCLK2是外设时钟之一。 VCLK 是主要外设时钟频率,VCLK2和 VCLK3是次要外设时钟频率。 HCLK 是系统时钟频率,GCLK 是 CPU 时钟频率。 

hr: high resolution prescale factor (1, 2, 3, 4,…, 63, 64)                —> HETPFR[5:0]lr: loop resolution prescale factor (1, 2, 4, 8, 16, 32, 64,128)        —>HETPFR[10:8] HRP = high resolution clock period HRP = hr × TVCLK2 (ns)LRP = loop resolution clock period LRP = lr × HRP (ns)

如果 PLL 被用作时钟源、GCLK = PLL 时钟

HCLK=GCLK/2、3、… 最大 HCLK 为150MHz

VCLK = HCLK/1.2.3…… 最大 VCLK 为110MHz

,

Ruming Shen:

你好,下面是我们一块RM57L843芯片的两个HET分别输出相同周期和占空比的脉冲信号,一个是HET1的PIN4输出,一个是HET2的PIN3输出。我们现在新的需求是要让HET2的PIN3输出比HET1的PIN4输出增加10ms延迟。

1.如果PIN3和PIN4在同一个HET上面,似乎只要在PIN4的PWCNT/DJZ和PIN3的PWCNT/DJZ之间增加SUB/BR操作就可以了,如下图所示,是吗?

2.但是现在PIN3和PIN4不在同一个HET上面,该如何实现HET2PIN3对HET1PIN4的10ms延迟?

,

Cherry Zhou:

您好,

N2HET1有32个引脚,N2HET2也有32个端子。 从同一个 N2HET 模块中选择两个引脚会让事情简单得多。

如果您必须使用 N2NET1的一个引脚和 N2HET2的一个引脚,您可以将 N2HET2与 N2HET1同步。 N2HET 有一个同步机制。 Clk_master/slave (HETGCR.16)将 N2HET 配置为主控或受控模式(默认为受控模式)。 主控模式中的 N2HET 提供一个信号来同步受控 N2HET 的预分频器。 从器件 N2HET 将其环路分辨率与主器件发送的环路分辨率信号同步。 从器件在接收到第一个同步信号后不需要该信号。 但只要从器件接收到来自主器件的重新同步信号,从器件就必须再次进行自身同步。

,

Ruming Shen:

你好,N2HET1和N2HET2的同步问题,我们已经解决了。并且可以分别从两个HET的PIN脚输出相同周期和占空比的PWM脉冲。

为了尽快收敛问题,我来总结一下我们实际的业务需求:

1.我们需要在同一个N2HET之间的PIN脚产生的脉冲信号做相位移。这个之前贵公司的工程师已经给出方案,即插入SUB和BR指令。

问题是我们需要进行C语言编程,需要知道每个指令program、control的field如何配置。尤其是如下红圈标记的field如果配置不当,相位移很可能功能实现不了。

2.我们同时也需要在不同的HET的PIN脚产生的脉冲信号之间产生相位移(HET之间已经实现同步),该如何进行跨HET的相位移实现,或者说如何跨模块寻址?毕竟HET1和HET2的RAM的地址不一样。请给出具体的可行方案。

以上两个问题请务必帮忙答复,否则我们的项目进度将会严重被delay!!非常感谢!!

,

Cherry Zhou:

我们跟进给工程师了,英文链接也贴在下面了,您可以多多关注工程师的答复:

e2e.ti.com/…/4402099

,

Ruming Shen:

你好!我已经看到英文论坛的回复了,第一个问题可能是回答问题的工程师理解错了,我们已经实现了C代码执行PWCNT/DJZ/MOV64指令来生成PWM脉冲,只是需要添加相位移功能,所以请提供SUB和BR所有program和control的配置,下面提供的配置不完整,需要补充其他必要的信息,如Smode,Scount,Request type,Request Number等。

L03 SUB { src1=IMM,src2=A,dest=NONE,next=L04,data=4687};L04 BR { next=L00,cond_addr=L05,event=N}

第二个问题,只要两个HET之间实现同步再加上在各自内部使用SUB和BR实现延迟就可以解决了,不过前提还是要能够正确配置SUB和BR指令。

时间紧迫,请帮忙协助尽快解决。谢谢!

,

Ruming Shen:

我觉得这样沟通太费劲了,他还是没有回答我们的问题,麻烦你直接问他下面的field分别怎么配吧。谢谢。

,

Cherry Zhou:

我们已跟进哈,您可以多多关注英文论坛的答复。

,

Ruming Shen:

谢谢您的support。但是我的问题始终没有得到答复。我真正想问的是如何为SUB和BR里面相关的field选择配置(不是方法而是不理解不同的配置值代表的意思)。需要指导如何为SUB的Smode,Scount,Remote address和BR的Branch Condition选择配置。比如smode和Branch Condition有如下选项,我该如何选择?非常感谢!

,

Cherry Zhou:

好的了解。

,

Cherry Zhou:

您好,

我们注意到您在英文论坛这边已跟进,那么我们会先将这个帖子关闭,如您仍有其他问题可以随时reopen该贴。

e2e.ti.com/…/4402099

,

?? ?:

你好!

我们已经用N2HET模块成功生成两个同步的周期为160ms占空位600us的脉冲信号。它们分别由HET2的PIN3和PIN4发出。

但是在按照贵公司技术专家QJ WANG的要求插入SUB和BR指令后,还是没有办法让这两支脉冲产生相位移。请帮忙看看SUB和BR指令的program和control的配置是否正确。项目因此严重delay,务请帮忙处理,非常感谢!

首先,我使用以下代码成功地从HET2 PIN3和HET2 PIN4生成了两个pwm脉冲。周期为160ms,占空为600us,而且完全同步。

/* P00_0 *//*L00 CNT*/{0x00002C80,0x01FFFFFF,0x00000000,0x00000000},/*Generate pwm pulse for HET2 PIN3*//* P05_PIN03_DUTY_0 *//*L05 PWCNT*/{0x0000D5C0,0x0000C30E,0x00000000,0x00000000},/* P06_PIN03_PERIOD_0 *//*L06 DJZ*/{0x00013480, //next:90x0000E006, //con_addr:70×00000000,0x00000000},/* P07_PIN03_DUTY_UPDATE_0 *//*L07 MOV64*/{0x00010205,0x0040C30F,0x0000B000, //set duty0x00000000},/* P08_PIN03_PERIOD_UPDATE_0 *//*L08 MOV64*/{0x00012206,0x0000E006,0x00B71A80, //set period to 160ms0x00000000},/*Generate pwm pulse for HET2 PIN4*//* P09_PIN04_DUTY_0 *//*L09 PWCNT*/{0x000155C0,0x0001440E,0x00000000,0x00000000},/* P10_PIN04_PERIOD_0 *//*L10 DJZ*/{0x0001B480,0x00016006,0x00000000,0x00000000},/* P11_PIN04_DUTY_UPDATE_0 *//*L11 MOV64*/{0x00018209,0x0041440F,0x0000B000,0x00000000},/* P12_PIN04_PERIOD_UPDATE_0 *//*L12 MOV64*/{0x0001A20A,0x00016006,0x00B71A80,0x00000000}

然后,我在此基础上插入SUB/BR指令,希望在两个脉冲之间增加10ms延迟。来自PIN3的脉冲与之前相同,来自PIN4的脉冲非但没有延迟反而消失了。

/* P00_0 *//*L00 CNT*/{0x00002C80,0x01FFFFFF,0x00000000,0x00000000},/*Generate pwm pulse for HET2 PIN3*//* P05_PIN03_DUTY_0 *//*L05 PWCNT*/{0x0000D5C0,0x0000C30E,0x00000000,0x00000000},/* P06_PIN03_PERIOD_0 *//*L06 DJZ*/{0x00043480, //next:330x0000E006, //con_addr:70×00000000,0x00000000},/* P07_PIN03_DUTY_UPDATE_0 *//*L07 MOV64*/{0x00010205,0x0040C30F,0x0000B000,0x00000000},/* P08_PIN03_PERIOD_UPDATE_0 *//*L08 MOV64*/{0x00012206,0x0000E006,0x00B71A80, //set period to 160ms0x00000000},/*Generate pwm pulse for HET2 PIN4*//* P09_PIN04_DUTY_0 *//*L09 PWCNT*/{0x000155C0,0x0001440E,0x00000000,0x00000000},/* P10_PIN04_PERIOD_0 *//*L10 DJZ*/{0x0001B480,0x00016006,0x00000000,0x00000000},/* P11_PIN04_DUTY_UPDATE_0 *//*L11 MOV64*/{0x00018209,0x0041440F,0x0000B000,0x00000000},/* P12_PIN04_PERIOD_UPDATE_0 *//*L12 MOV64*/{0x0001A20A,0x00016006,0x00B71A80,0x00000000}/*Insert 10ms delay between PIN3 pulse and PIN4 pulse*//*P33_PIN4_SUB *//*L33 SUB*/{0x00042800, //000000,000,0,000100010,0100 ,000000000 //next:34 remote address:00x028A0026, //00000,0,101,0001,010,000,00000,0,0,1,00,11,00x000B7280, //0000000000000010010010100,0000000 //5861:10ms delay0x00000000},/*P34_PIN4_BR *//*L34 BR*/{0x00013A00, //000000,000,0,000000000,1101,000000000 //next:00x0000A300, //000,00,0,0,000,000001001,00100,01001,00,0 //pin:4 con_addr:90×00000000,0x00000000}

,

Cherry Zhou:

十分抱歉给您带来的不便,目前您的问题我们只能求助QJ Wang。昨天和今天也是国外的休息日哦,所以工程师没有办法回复您。由于这周是国外的感恩节假期,所以回复都会相对慢一些,再次抱歉。

,

?? ?:

你好!那就麻烦你帮忙催促一下,我们的开发进度因此受到严重影响了。非常感谢!

,

?? ?:

你好,这个问题已经提出有近一个月了,请帮忙尽快找相关专家确认。谢谢!

,

Cherry Zhou:

抱歉给您带来的不便,我们的专家目前在休假中,预计将于12月1日返回。如12.5日之前仍然没有新的进展,我们再来发邮件催促下哈。

,

?? ?:

你好!贵公司的专家一定要我提供含汇编的.het文件,但是我们现在没有,需要利用HET IDE生成。请帮忙提供HET IDE,我尝试很多次下载,但都失败了。

,

Cherry Zhou:

您好,关于汇编代码格式的问题我们还需要内部确认下,有结果之后会尽快为您提供转换的方法。

,

?? ?:

非常感谢

,

?? ?:

请问有消息了吗?QJ坚持让我用HET IDE将汇编代码转为C代码。

,

Cherry Zhou:

我们还在确认中哦,有新的进展会尽快跟进给您。

,

Cherry Zhou:

您好,

?? ? 说:贵公司的专家一定要我提供含汇编的.het文件,但是我们现在没有,需要利用HET IDE生成。请帮忙提供HET IDE,我尝试很多次下载,但都失败了。

请按照以下帖子中的步骤进行操作:

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1097762/het_ide-not-able-to-download-het-ide

(请注意下载时需要使用personal email注册的TI account,不要使用TI company account)

,

?? ?:

你好,我尝试用私人邮箱的账号下载还是失败,表现为点击下面蓝色链接后没有反应。请帮忙尽快分析解决。非常感谢!

,

Cherry Zhou:

请右键单击下载链接–>Save link as…:

,

Ruming Shen:

可以了,谢谢!请问关于这个开发工具,有操作指南吗?

,

Cherry Zhou:

请参阅以下user guide:

https://www.ti.com.cn/cn/lit/ug/spnu483a/spnu483a.pdf

关于其他技术问题您可以继续在英文论坛跟进。

,

?? ?:

你好,这个问题在英文论坛提了好几天了,QJ还是没有回复,请帮忙推动一下,谢谢!

,

Cherry Zhou:

抱歉目前国外还是假期哦,您可以再耐心等待下。

赞(0)
未经允许不得转载:TI中文支持网 » RM57L843: HET模块如何生成带有不同相位移的脉冲信号
分享到: 更多 (0)