配置过的2812 不知道是否有参考价值
void InitEv(void)
{
EvaRegs.DBTCONA.all = 0x0530; //使能死区定时器,分频40/16=2.5M,死区时间5*0.4us=2us
EvaRegs.T1CNT = 0; //定时器1初值设为0
EvaRegs.T1PR = 4652; //1K(4650)
EvaRegs.ACTR.all = 0x0066; //PWM2低有效,PWM1高有效,改变设置可使电机反转
EvaRegs.CMPR1=0;
EvaRegs.CMPR2=0;
EvaRegs.COMCONA.all = 0xA600; //比较器控制A
// EvaRegs.T1CMPR = 2400; //定时器1比较值
// EvaRegs.T1CON.all = 0x144E; //连续增模式,TPS系数40M/16=2.5M,T1使能
EvaRegs.T1CON.all = 0x1442; //定时器输入预定标时钟HSPCLK/16
/*配置通用定时器2用于正交编码QEP模块和捕获单元模块CAP */
EvaRegs.T2CON.all=0x1830; //仿真停挂起,双向递增/减计数,禁止定时器操作,定时器时钟来源QEP
//定时器重载条件保留,禁止定时器比较操作
EvaRegs.T2PR = 0xFFFF; //定时周期0xFFFF
EvaRegs.T2CNT = 0x7FFF; //设置定时初值为0x7FFF
/*配置通用定时器3用于精确时间测量,服务于M/T测速 */
EvbRegs.T3CNT = 0; //定时器3初始值,用于测量高频脉冲个数,M/T测速
EvbRegs.T3PR = 0xFFFF;
EvbRegs.T3CON.all = 0x1000; //连续增模式,输入时钟预定标为0(HSPCLK=75M,周期为13.33ns)
EvaRegs.CAPCONA.all=0; //复位捕获单元寄存器,QEP电路清0
EvaRegs.CAPCONA.bit.CAP1EDGE=1;//捕获单元检测上升沿
EvaRegs.CAPCONA.bit.CAP12TSEL=0;//捕获单元选择定时器为定时器2
EvaRegs.CAPFIFO.bit.CAP1FIFO=0; //清空CAP1FIFO
// EvaRegs.CAPCONA.bit.CAPRES = 0; //清除所有捕获单元寄存器,QEP电路清0
EvaRegs.EVAIFRC.bit.CAP1INT=1; //清中断标志位
EvaRegs.EVAIMRC.bit.CAP1INT=1; //CAP1中断使能
EvaRegs.CAPCONA.bit.CAPQEPN = 0; //禁止捕获单元1和2
// EvaRegs.T2CON.bit.TENABLE = 1; //使能定时器2
EvaRegs.T2CON.bit.TCLKS10 = 3; //启动T2计数QEP
}
|