3648|0

1

帖子

0

TA的资源

一粒金砂(初级)

伤透脑筋--2812pwm加入死区问题求解 [复制链接]

这个论坛真的相当不错~~又遇到棘手问题,再次求教各位大哥

我做的是用2812去实现直接转矩控制去控制电机,通过查表方式得到矢量
未命名.jpg

现在我做了个测试,按我的要求强制输出上桥臂依次是
011,接着输出001,然后101,然后是111,然后是110,然后是010,最后是110
对应下桥臂应该是
100               110         010            000            001            101            001
并且通过CPU2 定时中断一直循环。但是死区却始终不能出现。。。
恳请高手告诉我原因,不胜感激
我做的测试程序如下:
EV 时间管理器程序如下:
void InitEv(void)
{
        EALLOW;
        GpioMuxRegs.GPAMUX.all=0x003f;        
        EDIS;
    /*****************************/
    /***********配置ACTR**********/
    /*****************************/
        
        EvaRegs.ACTR.bit.CMP1ACT=2;  
        //PW1引脚高电平有效
        
        EvaRegs.ACTR.bit.CMP2ACT=1;
        //PWM2引脚低电平有效
        EvaRegs.ACTR.bit.CMP3ACT=2;  
        //PW1引脚高电平有效
        
        EvaRegs.ACTR.bit.CMP4ACT=1;

        EvaRegs.ACTR.bit.CMP5ACT=2;  
        //PW1引脚高电平有效
        
        EvaRegs.ACTR.bit.CMP6ACT=1;
        //PWM2引脚低电平有效
        //PWM2引脚低电平有效
        
        /*****************************/
    /*******配置死区寄存器********/
    /*****************************/
        
        EvaRegs.DBTCONA.bit.DBT=15;
        //死区定时器周期为5
        
        EvaRegs.DBTCONA.bit.EDBT1=1;

        EvaRegs.DBTCONA.bit.EDBT2=1;

        EvaRegs.DBTCONA.bit.EDBT3=1;
        //死区定时器1使能
        
        EvaRegs.DBTCONA.bit.DBTPS=5;
        //死区定时器预定标因子,死区时钟为HSPCLK/8
        
    /*****************************/
    /*********配置COMCONA*********/
    /*****************************/
        
        EvaRegs.COMCONA.bit.CENABLE=1;
        //使能比较单元的比较操作
        
        EvaRegs.COMCONA.bit.CLD=2;
        //当给CMPR1赋新值时,立即装载
        EvaRegs.COMCONA.bit.ACTRLD=2;
        //行为控制寄存器,立即重载
        
        EvaRegs.COMCONA.bit.FCOMPOE=1;
        //全比较操作,PWM输出由相应的比较逻辑驱动
        
        /*****************************/
    /**********设置T1CON**********/
    /*****************************/
        
        EvaRegs.T1CON.bit.TMODE=2;
        //T1工作于连续增模式
        
        EvaRegs.T1CON.bit.TPS=3;
        //输入时钟预定标因子为X/8
        
        EvaRegs.T1CON.bit.TENABLE=1;
        //禁止定时器操作
        
        EvaRegs.T1CON.bit.TCLKS10=0;
        //使用内部时钟
        
        EvaRegs.T1CON.bit.TECMPR=1;
        //使能定时器比较操作
        
        
        /*****************************/
              /**********设置T1PR等*********/
             /*****************************/
        EvaRegs.T1PR =129;
        //一个周期时间为(129+1)*0.107us
        
        EvaRegs.T1CNT=0;                        ///定时器1初值设为0
          EvaRegs.CMPR1=0;
        EvaRegs.CMPR2=0;
        EvaRegs.CMPR3=0;  

    EvaRegs.T1CON.bit.TENABLE=1;
    //启动定时器T1
}        
-----------------------------------------------------------------------------------------------------------------------------------------------------------
主程序如下:
#include "DSP28_Device.h"

int i,k;

interrupt void ISRTimer2(void);

void main(void)
{
        /*初始化系统*/
        InitSysCtrl();

        /*关中断*/
        DINT;
        IER = 0x0000;
        IFR = 0x0000;
        
        /*初始化PIE控制寄存器*/
        InitPieCtrl();
        
        /*初始化PIE矢量表*/
        InitPieVectTable();        
               
        /*初始化GPIO*/
        InitGpio();

        EALLOW;        // This is needed to write to EALLOW protected registers
        PieVectTable.TINT2 = &ISRTimer2;
        EDIS;   // This is needed to disable write to EALLOW protected registers

        
        /*初始化EV*/
        InitEv();
        
        InitCpuTimers();
        ConfigCpuTimer(&CpuTimer2, 150, 70);        //70us一次采样
        StartCpuTimer2();

        IER |= M_INT14;

        EINT;
        ERTM;


        for(;;)
        {
               
        }

}         
interrupt void ISRTimer2(void)
{
        
        IFR=0x0000;
//        PieCtrl.PIEIFR1.all = 0;
        PieCtrl.PIEACK.all=0xffff;        
        for (i=0;i<0x96;i++)
        {
               
        }

        EvaRegs.ACTR.all=0x0c33;

        for (i=0;i<0x96;i++)
        {
        
        }

        EvaRegs.ACTR.all=0x0cc3;

        for (i=0;i<0x96;i++)
        {
               
        }

        EvaRegs.ACTR.all=0x03c3;

                for (i=0;i<0x96;i++)
        {
               
        }

        EvaRegs.ACTR.all=0x0333;
                for (i=0;i<0x96;i++)
        {
        
        }

        EvaRegs.ACTR.all=0x033c;
                for (i=0;i<0x96;i++)
        {
               
        }

        EvaRegs.ACTR.all=0x0c3c;
                for (i=0;i<0x96;i++)
        {
        
        }

        EvaRegs.ACTR.all=0x033c;
                        
}

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表