dsp2812 pmsm foc之EVA初始化详解

  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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值