This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/DRV8305- Q1EVM:PWM输入的示例代码?

Guru**** 2353820 points
Other Parts Discussed in Thread: C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/motor-drivers-group/motor-drivers/f/motor-drivers-forum/633752/ccs-drv8305-q1evm-example-code-for-pwm-in

部件号:DRV8305- Q1EVM
主题中讨论的其他部件:MOTORWAREC2000WARE

工具/软件:Code Composer Studio

大家好,

我想使用DRV8305- Q1EVM上的PWM线路来控制Krpm基准。  我找不到任何示例代码来启动和运行它,而且我也没有在整个汽车器具上找到大量的文档。  我错过了什么吗?  过去我曾尝试过存根C2000ware代码,但这些库的性能并不是很好。

提前感谢!

Brian

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Brian,

    "我想使用DRV8305- Q1EVM上的PWM线路来控制Krpm基准。" 这话什么意思? 1 x,3 x或6 x PWM直插式?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Rick:

    您将在原理图中看到一条标有"PWM IN"的线。  我假设这是用于节气门的PWM输入控制线路。  这是一个错误的假设吗?

    谢谢!

    Brian

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Rick:

    似乎有一个名为tiduak1.pdf的应用说明,描述了我要执行的操作。  是否有人将其移植到q1evm?  我尝试做我自己的端口,但到目前为止它不工作--似乎ECAP中断没有触发。  我已将修改后的实验3b中的更改粘贴到下面。  有什么想法吗?

    目标: 将代码更改从tiduak1.pdf prop驱动器演示项目映射到DRV8305- q1evm
    ===================================


    对于每个项目,请将其添加到.project文件中:

    <link>
             <name>cap.c</name>
             <type>1</type>
             <locationURI>MW_INSTALL_DIR/SW/DRIVERS/TIMER/src/32b/F28x/F2802x/CAP.c</locationURI>
          链接>








    1. HAL.C:
    ~986线
     //备注:BK MODDED此项:
     //未使用(PWM_In)
     //GPIO设置模式(obj->gpioHandle,gPIO_NUMBER_5,gPIO_5_Mode_generalpurpe);
     GPIO_setMode(obj->gpioHandle,gPIO_NUMBER_5,gPIO_5_Mode_ECAP1);
     
      2. HAL_OBJ.H
    第43行#include "SW/DRIVERS/ADC/SRC/32b/F28x/F2802x/CA.h"

    第135行:
    typedef结构_HAL_Obj_

     adc_handle   adcHandle;       //!< ADC手柄
     
     cap_handle   capHandle;         //!< ECAP手柄-- bk已添加

     clk_handle   clkHandle;       //!<时钟手柄
     
      3. HAL.c

     第608行
     //bk已添加:
     obj->capHandle = cap_init((void *)CAP1_base_ADDR,sizeof(Cap_Obj));


     //设置ISR。

     添加到hal .h:

     行1304:
     //! \brief设置ECAP
    //! \param[in]处理        硬件抽象层(HAL)句柄
    void HAL_setupeCAP (HAL_HANDLE句柄);

    HAL.c:
    1350行:

    //BK添加如下:
    // ECAP
    void HAL_setupeCAP (HAL_HANDLE句柄)

       HAL_Obj *OBJ =(HAL_Obj *)句柄;

       CAP_setModeCap(obj->capHandle);//将模式设置为CAP

       //禁用计数器同步
       cap_disableSyncIn(obj->capHandle);

       //设置捕获事件极性
       CAP_setCapEvtPolarity(obj->capHandle, CAP_Event_1,CAP_POLICATICAL_Rising);

       //设置捕获事件极性
       CAP_setCapEvtPolarity(obj->capHandle, CAP_Event_2,CAP_POLICATICAL_Falling);

       //设置捕获事件计数器重置配置
       CAP_setCapEvtReset(obj->capHandle, CAP_Event_1,CAP_Reset_Disable);

       //设置捕获事件计数器重置配置(在此处重置计数)
       CAP_setCapEvtReset(obj->capHandle, CAP_Event_2,CAP_Reset_Enable);

       //连续计时器
       cap_setCapContinued(obj->capHandle);

       //将停止/环绕模式设置为2个事件
       CAP_setStopWrap (obj->capHandle,CAP_Stop_Wrap _CEVT2);

       //在捕获事件上启用CAP1-4加载
       cap_enableCaptureLoad(obj->capHandle);

       //启用时间戳计数器以运行
       cap_enableTimestampCounter(obj->capHandle);

       //启用捕获(CAP)中断源
       cap_enableInt(obj->capHandle, CAP_Int_Type_CEVT2);

       //启用eCAP中断
       PIE_enableInt (obj->p压 处理,PIE_GroupNumber_4,PIE_InterruptSource_ECAP1);

       //启用CPU ECAP组中断
       CPU_enableInt(obj->cpuHandle, CPU_IntNumber_4);

       返回;
    }// HAL_setupCAP()函数结束


    线路1082:
     clk_enableEscap1Clock(obj->clkHandle);


     HAL.c:


    //已添加BK:
     第160行
    //ECAP
    extern interrupt void ecapISR(void);

    HAL.H (HAL):
    第487行


     //已添加BK:
     //ECAP:
     静态内联void HAL_initIntVectorTable (HAL_HANDLE句柄)
    ...
     //已添加BK:
     //ECAP:
     PIE->ECAP1_INT = ecapISR;

     disable_protected_register_write_mode;

     返回;
     主实验文件:

    行(顶部)

    // bk已添加:
    #define speed_base_Krpm 7.7     // 11 V时DJI E30.092万 kV的最大电动机转速

    _IQ gSpeedRef_Duty =_IQ (0.0);  //来自外部控制器的速度参考

    uINT32_t gSpeedRef_OK = 0;      //速度参考信号的安全检查


    在更新全局变量中:


     //已添加BK:
       gMotorVars.SpeedRef_Krpm = gSpeedRef_Duty * speed_base_Krpm;


    线路(主ISR)

    //检查速度参考信号是否激活
     //如果超过2000个保养例行程序循环在没有信号的情况下通过,请禁用电机
     如果(gSpeedRef_OK++>2000)
     {
         gSpeedRef_Duty =_IQ (0);
         gMotorVars.Flag_Run_Identify = 0;
         gSpeedRef_OK = 0;
     }





    行(底部)

     __interrupt void ecapISR(void)

       //清除捕获(CAP)中断标志
       CAP_clearInt (halHandle->capHandle,CAP_Int_Type_All);

       //计算PWM高周期(上升边缘到下降边缘)
       UINT32_t PwmDuty =(UINT32_t) cap_getCap2 (halHandle->capHandle)-(UINT32_t) cap_getCap1 (halHandle->capHandle);

       //指定适当的速度命令Combine 5 % 和100 %
       // 0 100 % 速度与1-2毫秒的高周期成比例
       // 60MHz * 2ms = 12万

       // 0 1 %
       IF (PwmDuty <= 6.1万)
       {
           gSpeedRef_OK = 0;
           gSpeedRef_Duty =_IQ (0);
           gMotorVars.Flag_Run_Identify = 0;
       }
       // 1 99 %
       IF ((PwmDuty > 6.1万)&&(PwmDuty < 11.9万))
       {
           gSpeedRef_OK = 0;
           gSpeedRef_Duty =_IQdiv (PwmDuty - 6万,6万);
           gMotorVars.Flag_Run_Identify = 1;
       }
       // 99 100 %
       否则,如果(PwmDuty >= 11.9万)
       {
           gSpeedRef_OK = 0;
           gSpeedRef_Duty =_IQ (1.0);
           gMotorVars.Flag_Run_Identify = 1;
       }
       //捕获所有内容
       否则
       {
           gSpeedRef_Duty =_IQ (0);
           gMotorVars.Flag_Run_Identify = 0;
       }

       //清除由组号定义的中断
       PIE_clearInt (halHandle->PiHandle,PIE_GroupNumber_4);
    }// ecapISR()函数结束

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Brian,

    我们已经联系了C2000专家。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Brian,

    首先,我们来检查运行期间eCAP的中断配置。

    请看"图76. 概述:多路复用使用PIE块的中断"在 《系统控制和中断参考指南》中,需要启用每个门,以使中断到达C28内核。 这些寄存器的值是什么?  

    检查eCAP的相应IFR中是否有任何标志可能是一个好的选择。

    此致,
    科迪