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.

F28335 QEP 不准问题

专家好,

我调试 ti 的 Example_2833xEqep_freqcal 例程(CS3.3),用pwm模拟5k hz正交脉冲,qep测量脉冲频率,无论QSRC、XCR、PCRM、UTE、QCLM、UPPS、CCPS、CEN怎么调试,发现结果都不理想。当然PWM不受软件模拟的影响。举个例子,

用pwm模拟5k hz正交脉冲(源程序中改了Free Soft=2,使脉冲频率不受模拟影响)。QEP初始化稍作修改,QSRC=1,XCR=1, UPPS=1, CCPS=7,PCRM=1,这时从ccs中看到的OPOSCNT从0xffffffff慢慢递减,下面调试过程中没有COEF/CDEF/Error等异常。

当用Delta X / T 计算时,看不懂源程序,我简单的改为 当  UTO=1 时,(p->oldpos-QPOSLAT)/ (QUPRD/150000000), 从ccs的watch窗口看,结果在500和2600之间跳动,没看出规律。可是watch 窗口看 p->oldpos-QPOSLAT 时,结果基本围绕着500跳动(350~600,一般都是450、500、550),如果我们拿这个数去除以周期 (unit time 100 Hz, 所以周期是 0.01 秒),得到的结果是 50000个脉冲每秒,而PWM发出的脉冲频率是 5000 Hz。而程序中(p->oldpos-QPOSLAT)/ (QUPRD/150000000)的计算结果很不靠谱(可能是数据类型转换的问题,撇开这不谈,为什么我们得到的是50000Hz因为DeltaX约等于500)

程序往下走检查UPEVNT然后用X/deltaT计算时( 我改成 1<<EQep1Regs.QCAPCTL.bit.UPPS*150000000/(tmp*(1<<EQep1Regs.QCAPCTL.bit.CCPS)), ) 程序中化简为 300 000 000 / 128 / tmp (tmp 取自 QCPRDLAT),结果基本是4997~5008之间,正确。

问题:

1、Delta X / T 计算时,我错在什么地方,我的公式哪些地方不合理(在我上述例子中)

2. 其他几个问题

a) 设了断点,Animate运行,然后在watch窗口看变量时,这相当于程序中去读所观察的变量吗?例如,在QCLM=0时,在watch窗口观察OPOSCNT(始终减),是否相当于在程序中CPU读OPOSCNT,从而锁存QCTMR和QCPRD?

b)锁存是立即生效的吗?如QCLM=0时上一条语句读OPOSCNT,下一条语句就可以读到锁存后的QCPRDLAT。或者QCLM=1时检查到UTO置位,就可以马上读到更新后的QPOSLAT?

C) XCR的设置对正交模式生效吗(OSRC=0)?

d) unit timer计数到QUPRD后立即reset 0吗? 

e)程序中发现UPEVNT置位后,读Delta T时为什么不用 QCPRD 而用 QCPRDLAT? 从datasheet中看 UPEVNT 的置位是一定更新了QCPRD,但是不一定锁存到QCPRDLAT(锁存事件不一定发生,如100Hz的unit time,锁存事件0.01s发生一次),这时用QCPRDLAT就可能不准,特别是第一次用时,QCPRDLAT的值可能为0(假如设的默认初始化值)。

 

暂时就这么多问题,希望能尽快确认,能答复的可以先行答复,谢谢!

x 出现错误。请重试或与管理员联系。