RM57L843的N2HET模块可以生成不同周期的占空比的脉冲信号,如何对这些脉冲信号施加不同的相位移phase shift?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
你好,简单说就是两个脉冲信号之间如果相位移不一样,周期和占空比一样,那么波形是一样的,只是会有延迟,所以只有周期,占空比和相位移三者都确定了,那么最终的输出波形才确定了
您点击回复框中的“插入”--"图像/视频/文件"-点击灰色的“上传”按钮,然后选择您需要上传的图片即可(或直接将所需图片拖曳进来)。
简单说就是两个脉冲信号之间如果相位移不一样,周期和占空比一样,那么波形是一样的,只是会有延迟,所以只有周期,占空比和相位移三者都确定了,那么最终的输出波形才确定了
是的,您可以使用 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
你好,谢谢。能帮忙解释下,各条指令里面的参数是什么意思,以及每条指令如何映射成hetRAM的地址,这样我才知道如何将对应的指令的program,control和data写入具体的地址。能否帮忙以生成下面两列脉冲为例子进行说明:1.周期160ms,占空比0.375%,延迟0ms;2.周期160ms,占空比0.375%,延迟2ms。非常感谢!
您好,
对于脉宽为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 2ms
L00 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};
非常感谢你们的精彩答复。还有两个问题:
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?
您好,
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 指令部分的一个表中。
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
你好,下面是我们一块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延迟?
您好,
N2HET1有32个引脚,N2HET2也有32个端子。 从同一个 N2HET 模块中选择两个引脚会让事情简单得多。
如果您必须使用 N2NET1的一个引脚和 N2HET2的一个引脚,您可以将 N2HET2与 N2HET1同步。 N2HET 有一个同步机制。 Clk_master/slave (HETGCR.16)将 N2HET 配置为主控或受控模式(默认为受控模式)。 主控模式中的 N2HET 提供一个信号来同步受控 N2HET 的预分频器。 从器件 N2HET 将其环路分辨率与主器件发送的环路分辨率信号同步。 从器件在接收到第一个同步信号后不需要该信号。 但只要从器件接收到来自主器件的重新同步信号,从器件就必须再次进行自身同步。
你好,N2HET1和N2HET2的同步问题,我们已经解决了。并且可以分别从两个HET的PIN脚输出相同周期和占空比的PWM脉冲。
为了尽快收敛问题,我来总结一下我们实际的业务需求:
1.我们需要在同一个N2HET之间的PIN脚产生的脉冲信号做相位移。这个之前贵公司的工程师已经给出方案,即插入SUB和BR指令。
问题是我们需要进行C语言编程,需要知道每个指令program、control的field如何配置。尤其是如下红圈标记的field如果配置不当,相位移很可能功能实现不了。
2.我们同时也需要在不同的HET的PIN脚产生的脉冲信号之间产生相位移(HET之间已经实现同步),该如何进行跨HET的相位移实现,或者说如何跨模块寻址?毕竟HET1和HET2的RAM的地址不一样。请给出具体的可行方案。
以上两个问题请务必帮忙答复,否则我们的项目进度将会严重被delay!!非常感谢!!
我们跟进给工程师了,英文链接也贴在下面了,您可以多多关注工程师的答复:
你好!我已经看到英文论坛的回复了,第一个问题可能是回答问题的工程师理解错了,我们已经实现了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指令。
时间紧迫,请帮忙协助尽快解决。谢谢!
我觉得这样沟通太费劲了,他还是没有回答我们的问题,麻烦你直接问他下面的field分别怎么配吧。谢谢。
谢谢您的support。但是我的问题始终没有得到答复。我真正想问的是如何为SUB和BR里面相关的field选择配置(不是方法而是不理解不同的配置值代表的意思)。需要指导如何为SUB的Smode,Scount,Remote address和BR的Branch Condition选择配置。比如smode和Branch Condition有如下选项,我该如何选择?非常感谢!
你好!
我们已经用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:9
0x0000E006, //con_addr:7
0x00000000,
0x00000000
},
/* P07_PIN03_DUTY_UPDATE_0 *//*L07 MOV64*/
{
0x00010205,
0x0040C30F,
0x0000B000, //set duty
0x00000000
},
/* P08_PIN03_PERIOD_UPDATE_0 *//*L08 MOV64*/
{
0x00012206,
0x0000E006,
0x00B71A80, //set period to 160ms
0x00000000
},
/*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:33
0x0000E006, //con_addr:7
0x00000000,
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 160ms
0x00000000
},
/*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:0
0x028A0026, //00000,0,101,0001,010,000,00000,0,0,1,00,11,0
0x000B7280, //0000000000000010010010100,0000000 //5861:10ms delay
0x00000000
},
/*P34_PIN4_BR *//*L34 BR*/
{
0x00013A00, //000000,000,0,000000000,1101,000000000 //next:0
0x0000A300, //000,00,0,0,000,000001001,00100,01001,00,0 //pin:4 con_addr:9
0x00000000,
0x00000000
}
您好,
贵公司的专家一定要我提供含汇编的.het文件,但是我们现在没有,需要利用HET IDE生成。请帮忙提供HET IDE,我尝试很多次下载,但都失败了。
请按照以下帖子中的步骤进行操作:
(请注意下载时需要使用personal email注册的TI account,不要使用TI company account)