EALLOW; //访问带有protected的地址时需要在前面加这一句
EvaRegs.GPTCONA.all = 0x0; /* 通用定时器全局控制寄存器 */
EvaRegs.T1PR =3750; //定时器1周期寄存器 开关频率20KHz?,((1/10KHz)/13.33333ns=3750 想要得到的是20khz的开关频率,按公式就是算出T1PR的值
T1Period=EvaRegs.T1PR; //将定时器1周期值赋给 T1Period
EvaRegs.T1CNT = 0x0000; //从0开始计数。
EvaRegs.T1CON.all = 0x0840; //0x0840=0000 1000 0100 0000 定时器比较寄存器重载条件是当计数器值0的时候重载,禁止定时器比较操作
//使用内部高速时钟HSPLCK,定时器使能,输入时钟预定标因子:x/1,连续增/减计数模式,仿真挂起立即停止
EvaRegs.CAPCONA.all=0x8004; //捕获单元控制寄存器0x8004=1000 0000 0000 0100 捕获单元3检测上升沿 捕获单元2不检测 捕获单元1不检测 捕获单元3不启动adc 捕获单元 //2的定时器是定时器2 捕获单元3的定时器是定时2, 捕获3禁止捕获 捕获12都禁止捕获 无动作,总而言之eva不做捕获
TotalPulse=_IQmpy(_IQ(4),LineEncoder); //_iq LineEncoder=_IQ(2500); 4*2的15次方乘以2500乘以2的15次方除以2的15次方。设置电机的增量式光电编码器线数
EvaRegs.T2PR = (Uint16)(TotalPulse>>15); //4*2的15次方乘以2500除以2的15次方=10000
EvaRegs.T2CNT = 0; //从0开始计数。
EvaRegs.T2CON.all = 0x1874; //0x1874=0001 1000 0111 0100 选用T2PR作为定时器2的周期寄存器,禁止定时器比较操作,当计数器值为0或等于周期寄存器值是定时器比较寄存器重载
//时钟源选择QEP电路,使能定时器操作,使能自己的使能位,时钟预定标x/1,定向增/减计数(计数过程中计数方向可以改变,方向由TDIRA决定),仿真挂起立即停止
EvaRegs.CMPR1 = 1000; //占空比26.7%
EvaRegs.CMPR2 = 1000; //占空比26.7%
EvaRegs.CMPR3 = 1000; //占空比26.7%
EvaRegs.GPTCONA.bit.T1TOADC = 1; // 由EVA的下溢中断标志触发 下溢中断启动ADC 比如说计数器减到0,再从0xff开始减这就是下溢。
EvaRegs.DBTCONA.all = 0x09f4; /* 死区时间3.8us */ DBTCONA死区定时器控制寄存器A 0x09f4=0000 1001 1111 0100 死区定时器预定标因子 x/32=75MHZ/32=2.34375MHZ,死区定时器123使能,死区定时 //器周期为10,t=1/2.34375*9=3.84us
EvaRegs.EVAIMRA.all = 0x0200; /* 开定时器下溢中断 */EVAIMRA是EVA中断屏蔽寄存器0x0200=0000 0010 0000 0000 定时器1下溢中断使能。
EvaRegs.COMCONA.all =0x8200; //0x8200=1000 0010 0000 0000 禁止全比较器123比较输出,输出为高组态,
//禁止硬件空间向量PWM模式,全比较器输出使能,方式控制寄存器ACTRA载条件为下溢中断
EvaRegs.CAPCONA.all= 0x9004; //0x9004= 1001 0000 0000 0100 捕获单元3检测上升沿 捕获单元12不检测 捕获单元3无操作,捕获单元2的定时器是定时器2 捕获单元3的定时器是定时2,使能捕获3
//禁止捕获单元12捕获
EvaRegs.EVAIFRC.bit.CAP3INT=1; //清除cap3中断标志
EvaRegs.EVAIMRC.bit.CAP3INT=1; //使能cap3中断
//#if GLOBAL_Q == 15
//#define _IQ(A) _IQ15(A) 所有的_iq默认为15这是系统里定义的。
//系统高速时钟是75Mhz 定时器时钟是75Mhz