⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qep.c

📁 TI2812DSP芯片采用EVA(事件管理器)产生SVPWM例程
💻 C
字号:
#include "DSP28_Device.h"
#include "qep.h"
#include "f28xbmsk.h"


void qep_init(QEP *p)
{
 
    EvaRegs.CAPCON.all = 0x9004;     /* Set up capture units */
         // EvaRegs.T2CON.all = 0x9870;    /* Set up capture timer */
         // EvaRegs.T2PR = 0xFFFF;
	  EvaRegs.T2PR=0xffff;             //设置定时器周期  4000防止溢出 4096?
	  EvaRegs.T2CNT=0;                //设置定时器起始值
	  EvaRegs.T2CON.all=0x9870;       //设置定时器状态 定向增减模式 禁止比较操作
	                                  //输入时钟定标参数HSPCLK/1 QEP作为时钟源            
         // EvaRegs.T2CON.all = QEP_TIMER_INIT_STATE;  0x9870  
//    EvaRegs.EVAIFRC.bit.CAP3INT = 1;     /* Clear CAP3 flag */
//    EvaRegs.EVAIMRC.bit.CAP3INT = 1;     /* Enable CAP3 Interrupt*/ 
         EALLOW; 
          GpioMuxRegs.GPAMUX.all |= 0x0700;    /* Set up the capture pins to primary functions */
         EDIS; 

}    


void qep_calc(QEP *p)
{

     long tmp;

     p->dir_QEP = 0x4000&EvaRegs.GPTCONA.all;
     p->dir_QEP = p->dir_QEP>>14;
     
     p->theta_raw = EvaRegs.T2CNT + p->cal_angle;
     
     tmp = (long)((long)p->theta_raw*(long)p->mech_scaler);  /* Q0*Q26 = Q26 */
     tmp &= 0x03FFF800;   // 原程序为0x03FFF000
     p->theta_mech = (int)(tmp>>11);         /* Q26 -> Q15 T2CNT过大会使tmp>>11后仍大于65535 产生错误 解决方法 中断qep_isr 或者可以试试wang中的方法*/
     p->theta_mech &= 0x7FFF;
	     
     p->theta_elec = p->pole_pairs*p->theta_mech;  /* Q0*Q15 = Q15 */
     p->theta_elec &= 0x7FFF;
	// if(EvaRegs.T2CNT==4000)
   /*  if(p->theta_raw==4000)  // cal_angle is considered to be zero  or 4096?
	 EvaRegs.T2CNT=0;
    */ 
}

/*void qep_isr(QEP *p)
{

   //  p->QEP_cnt_idx = EvaRegs.T2CNT;
     EvaRegs.T2CNT = 0;
   //  p->index_sync_flag = 0x00F0;

}   */




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -