完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
我现在手上有个电机(带有编码器)可以正常转动,我把它的qep的信号输出A、B信号外接出来,连接到dsp的eqep1A,eqep1B的引脚上面,然后运行 HVPM_Sensorless_2833x的pmsm的程序,但是qep的位置寄存器没有计数,qep程序没有启动,测不出机械转角和电气转角。下面是qep的程序,请ti人解答一下
#define QEP_MACRO(m,v) /* Check the rotational direction */ v.DirectionQep = (*eQEP[m]).QEPSTS.bit.QDF; /* Check the position counter for EQEP1 */ v.RawTheta = (*eQEP[m]).QPOSCNT + v.CalibratedAngle; if (v.RawTheta < 0) v.RawTheta = v.RawTheta + (*eQEP[m]).QPOSMAX; else if (v.RawTheta > (*eQEP[m]).QPOSMAX) v.RawTheta = v.RawTheta - (*eQEP[m]).QPOSMAX; /* Compute the mechanical angle */ v.MechTheta= v.MechScaler*v.RawTheta; /* Compute the electrical angle */ v.ElecTheta = (v.PolePairs*v.MechTheta) -floor(v.PolePairs*v.MechTheta); /* Q24 = Q0*Q24 */ /* Check an index occurrence*/ if ((*eQEP[m]).QFLG.bit.IEL == 1) [ v.IndexSyncFlag = 0x00F0; v.QepCountIndex = (*eQEP[m]).QPOSILAT; (*eQEP[m]).QCLR.bit.IEL = 1; /* Clear interrupt flag */ ] /* Check unit Time out-event for speed calculation: */ /* Unit Timer is configured for 100Hz in INIT function*/ if((*eQEP[m]).QFLG.bit.UTO == 1) [ /***** Low Speed Calculation ****/ if(((*eQEP[m]).QEPSTS.bit.COEF || (*eQEP[m]).QEPSTS.bit.CDEF)) [ /* Capture Counter overflowed, direction change occurred ,hence do no compute speed*/ (*eQEP[m]).QEPSTS.all = 0x000C; ] else if((*eQEP[m]).QCPRDLAT!=0xffff) /* Compute lowspeed using capture counter value*/ v.QepPeriod = (*eQEP[m]).QCPRDLAT; ] #endif // __F2833X_QEP_H__ |
|
相关推荐
10 个讨论
|
|
|
我是在有qep的level中实验的,确实没有起作用,仁兄你也用过TI的pmsm的程序吗 |
|
|
|
|
|
|
|
|
请仁兄分享一下使用心得,我现在是直接调用他的QEP_MACRO,同时我给上ABZ三路信号,管脚上有信号输入,信号正常,但是我的位置计数器没有起到作用,我感觉是我的配置理解的不够,请仁兄指点一下,谢谢 |
|
|
|
|
|
|
|
|
我现在想从最初时的功能来调,先让qep产生一个unit time interrupt,后面的程序先不加,下面是我关于实现uto中断的初始化程序:请帮忙看一下:十分感谢 [这是初始化的程序 EQep1Regs.QEPCTL.bit.QPEN=1; //使能计数器 EQep1Regs.QEPCTL.bit.UTE=1; //使能EQEP的定时器 EQep1Regs.QUTMR=0; //EQep1Regs.QUPRD=1500000; //周期值 EQep1Regs.QCLR.bit.UTO=1; //清除定时中断标志位 EQep1Regs.QFRC.bit.UTO=1; EQep1Regs.QEINT.bit.UTO=1; //使能定时器的中断 ] 这是主中断的程序: interrupt void EQEP_UTO_INT(void) [ if (EQep1Regs.QFLG.bit.UTO==1) [ EQep1Regs.QCLR.bit.UTO=1; Interrupt_Count1++; ] PieCtrlRegs.PIEACK.all = PIEACK_GROUP5; EQep1Regs.QCLR.bit.UTO=1; ] 现在的情况是:Interrupt_Count1的值是1;只进一次中断,寄存器QUTMR一直在计数,QEPCTL的值0x000A,QEINT的值为0x0800;QFLG的值0x0801说明有中断标志再置位,我想不明白每次计数值会达到周期值,但是就是不发生中断,该使能的也使能啦,该清中断的也清中断了,请帮忙分析一下,谢谢 |
|
|
|
|
|
|
|
yfwtrwerw 发表于 2020-7-20 17:15 你可以先试一下Controlsuite里面的两个QEP例程 C:ticontrolSUITEdevice_supportf2833xv140DSP2833x_examples_ccsv5eqep_pos_speed C:ticontrolSUITEdevice_supportf2833xv140DSP2833x_examples_ccsv5eqep_freqcal 喝可乐是一种生活!!! |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
549 浏览 0 评论
1613 浏览 0 评论
2047 浏览 0 评论
为啥BQ7693003DBTR芯片在和BQ769X0盒子通讯时收不到信号?
1513 浏览 0 评论
DSP 28027F 开发板 XDS100v2调试探针诊断日志显示了 Error -150 (SC_ERR_FTDI_FAIL)如何解决
1337 浏览 0 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
1756浏览 29评论
2781浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
1724浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
1634浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
1645浏览 13评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 03:04 , Processed in 0.668183 second(s), Total 56, Slave 49 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1683