请问tms320f28069 QEP 最高响应频率是多少呢,为什么输入超过 300KHZ QEP 就无法计数了?可以提高 QEP 的输入频率吗?
10#:
300k的频率不算高,应该是可以计数的,你能不能比较不能计数和不能计数时对应的寄存器的值有什么差别?
另一方面,你可以对信号进行分频进行测试。
最高截止频率取决于QEP本身的时钟,和里面的时钟分频系数。
请问tms320f28069 QEP 最高响应频率是多少呢,为什么输入超过 300KHZ QEP 就无法计数了?可以提高 QEP 的输入频率吗?
sworman chen:
回复 10#:
您好,QEP 本身时钟等于 系统时钟,28069 对 QEP 应该没有分频,附上QEP参数部分代码, 请帮忙分析,
// hold the counter in reset QEP_reset_counter(obj->qepHandle[qep]); // set the QPOSINIT register QEP_set_posn_init_count(obj->qepHandle[qep], 0); // disable all interrupts QEP_disable_all_interrupts(obj->qepHandle[qep]); // clear the interrupt flags QEP_clear_all_interrupt_flags(obj->qepHandle[qep]); // clear the position counter QEP_clear_posn_counter(obj->qepHandle[qep]); // setup the max position //QEP_set_max_posn_count(obj->qepHandle[qep], (4*USER_MOTOR_ENCODER_LINES)-1); QEP_set_max_posn_count(obj->qepHandle[qep],USER_PULSE_COMMAND_LINES); // setup the QDECCTL register QEP_set_QEP_source(obj->qepHandle[qep], QEP_Qsrc_Dir_Count_Mode); QEP_disable_sync_out(obj->qepHandle[qep]); QEP_set_swap_quad_inputs(obj->qepHandle[qep], QEP_Swap_Not_Swapped); QEP_disable_gate_index(obj->qepHandle[qep]); QEP_set_ext_clock_rate(obj->qepHandle[qep], QEP_Xcr_1x_Res); QEP_set_A_polarity(obj->qepHandle[qep], QEP_Qap_No_Effect); QEP_set_B_polarity(obj->qepHandle[qep], QEP_Qbp_No_Effect); QEP_set_index_polarity(obj->qepHandle[qep], QEP_Qip_No_Effect); // setup the QEPCTL register QEP_set_emu_control(obj->qepHandle[qep], QEPCTL_Freesoft_Unaffected_Halt); QEP_set_posn_count_reset_mode(obj->qepHandle[qep], QEPCTL_Pcrm_Max_Reset); QEP_set_strobe_event_init(obj->qepHandle[qep], QEPCTL_Sei_Nothing); QEP_set_index_event_init(obj->qepHandle[qep], QEPCTL_Iei_Nothing); QEP_set_index_event_latch(obj->qepHandle[qep], QEPCTL_Iel_Rising_Edge); QEP_set_soft_init(obj->qepHandle[qep], QEPCTL_Swi_Nothing); QEP_disable_unit_timer(obj->qepHandle[qep]); QEP_disable_watchdog(obj->qepHandle[qep]); // setup the QPOSCTL register QEP_disable_posn_compare(obj->qepHandle[qep]); // setup the QCAPCTL register QEP_disable_capture(obj->qepHandle[qep]); // renable the position counter QEP_enable_counter(obj->qepHandle[qep]);
请问tms320f28069 QEP 最高响应频率是多少呢,为什么输入超过 300KHZ QEP 就无法计数了?可以提高 QEP 的输入频率吗?
10#:
回复 sworman chen:
请查看用户手册里的Figure 7-15. eQEP Edge Capture Unit框图,时钟是可以进行分频的,只是你需要对信号进行分频,这个可能没有意义。
你提到“无法计数”,上面问你“能不能比较不能计数和不能计数时对应的寄存器的值有什么差别”,或者具体是如何不能计数,是哪个计数的寄存器的值不变化,还是出了什么错误?尽量完整详细地描述一下问题。
请问tms320f28069 QEP 最高响应频率是多少呢,为什么输入超过 300KHZ QEP 就无法计数了?可以提高 QEP 的输入频率吗?
sworman chen:
回复 10#:
@10#
你好!寄存器状态没有区别,只在300K Hz 以下时 QPOSCNT 计数会跳动 ,超过300K HZ 则不会跳动。
另外,外部输入的是 脉冲+ 方向信号,即QEP 工作在 “Direction-count Mode” 模式
1> 500KHZ 寄存器状态如下
QPOSCNT unsigned long 97455391 0x00006B40@Data QPOSINIT unsigned long 0 0x00006B42@Data QPOSMAX unsigned long 100000000 0x00006B44@Data QPOSCMP unsigned long 0 0 x00006B46@Data QPOSILAT unsigned long 0 0x00006B48@Data QPOSSLAT unsigned long 0 0x00006B4A@Data QPOSLAT unsigned long 0 0 x00006B4C@Data QUTMR unsigned long 0 0 x00006B4E@Data QUPRD unsigned long 0 0 x00006B50@Data QWDTMR unsigned int 0 0 x00006B52@Data QWDPRD unsigned int 0 0 x00006B53@Data QDECCTL unsigned int 18560 0 x00006B54@Data QEPCTL unsigned int 36888 0 x00006B55@Data QCAPCTL unsigned int 0 0 x00006B56@Data QPOSCTL unsigned int 0 0 x00006B57@Data QEINT unsigned int 0 0 x00006B58@Data QFLG unsigned int 40 0 x00006B59@Data QCLR unsigned int 0 0 x00006B5A@Data QFRC unsigned int 0 0 x00006B5B@Data QEPSTS unsigned int 128 0 x00006B5C@Data QCTMR unsigned int 0 0 x00006B5D@Data QCPRD unsigned int 0 0 x00006B5E@Data QCTMRLAT unsigned int 0 0x00006B5F@Data QCPRDLAT unsigned int 0 0x00006B60@Data
2> 270KHZ 寄存器状态如下
*([1]) struct _QEP_Obj_ {…} 0x00006B40@Data QPOSCNT unsigned long 13369810 0x00006B40@Data QPOSINIT unsigned long 0 0x00006B42@Data QPOSMAX unsigned long 100000000 0x00006B44@Data QPOSCMP unsigned long 0 0x00006B46@Data QPOSILAT unsigned long 0 0x00006B48@Data QPOSSLAT unsigned long 0 0x00006B4A@Data QPOSLAT unsigned long 0 0x00006B4C@Data QUTMR unsigned long 0 0x00006B4E@Data QUPRD unsigned long 0 0x00006B50@Data QWDTMR unsigned int 0 0x00006B52@Data QWDPRD unsigned int 0 0x00006B53@Data QDECCTL unsigned int 18560 0x00006B54@Data QEPCTL unsigned int 36888 0x00006B55@Data QCAPCTL unsigned int 0 0x00006B56@Data QPOSCTL unsigned int 0 0x00006B57@Data QEINT unsigned int 0 0x00006B58@Data QFLG unsigned int 40 0x00006B59@Data QCLR unsigned int 0 0x00006B5A@Data QFRC unsigned int 0 0x00006B5B@Data QEPSTS unsigned int 128 0x00006B5C@Data QCTMR unsigned int 0 0x00006B5D@Data QCPRD unsigned int 0 0x00006B5E@Data QCTMRLAT unsigned int 0 0x00006B5F@Data QCPRDLAT unsigned int 0 0x00006B60@Data
请问tms320f28069 QEP 最高响应频率是多少呢,为什么输入超过 300KHZ QEP 就无法计数了?可以提高 QEP 的输入频率吗?
10#:
回复 sworman chen:
我没能仔细对照你的配置。思考问题的方向提供给你去确认:
QPOSCNT的值是否已经逼近QPOSMAX寄存器设定的值了?你更改一下后者,是不是频率又可以提高?
另外,你检查一下QFLG和QEPSTS寄存器中置位的位,看看是否符合你的配置。
请问tms320f28069 QEP 最高响应频率是多少呢,为什么输入超过 300KHZ QEP 就无法计数了?可以提高 QEP 的输入频率吗?
sworman chen:
回复 10#:
你好,
可以确认与 QPOSMAX 设置无关,目前设了 100000000(和设2000 状况一样), TI 官方没对 QEP 输入最高频率说明吗?????
请问tms320f28069 QEP 最高响应频率是多少呢,为什么输入超过 300KHZ QEP 就无法计数了?可以提高 QEP 的输入频率吗?
sworman chen:
回复 sworman chen:
你好, 可以确认与 QPOSMAX 设置无关,目前设了 100000000(和设2000 状况一样), TI 官方没对 QEP 输入最高频率说明吗?????
请问tms320f28069 QEP 最高响应频率是多少呢,为什么输入超过 300KHZ QEP 就无法计数了?可以提高 QEP 的输入频率吗?
10#:
回复 sworman chen:
这个频率是以芯片的QEP模块的时钟能够分辨的信号精度来确定的,计算最高频率时, 根据你的计数模式,应该是方向不变的情况,即QDIR持续为高或低电平,否则它就反向计数。以下图一为例,只要QCLK能够被识别,计数器就自动累加或减小,也就是可以检测到这个频率,对于32位的QPOSCNT来说,即使溢出(无论是上溢或下溢),它还是会能够继续计数,因此核心在于QCLK能够被识别。而QCLK能否被识别的规格是下图二中的参数,即不小于2Tc(sco),也就是两个系统时钟,这相比于500kHz来说基本可以说是无穷大,所以可以检测的最高频率可以认为是45MHz.
考虑到下方另一个选项,即是否使能了输入滤波,我想可能需要你检查一下,你的代码时是否有进行GPIO滤波,如果有,这个频率可能就是你设定的百k级频率。
另外,你是否可以提供一下实际输入的信号波形,即除了你提到的频率,应该是在QEPA通道的输入,那么QEPB是怎样的呢?