主题中讨论的其他部件:MOTORWARE, C2000WARE,
工具/软件:Code Composer Studio
大家好,
我想使用DRV8305- Q1EVM上的PWM线路来控制Krpm基准。 我找不到任何示例代码来启动和运行它,而且我也没有在整个汽车器具上找到大量的文档。 我错过了什么吗? 过去我曾尝试过存根C2000ware代码,但这些库的性能并不是很好。
提前感谢!
Brian
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.
工具/软件:Code Composer Studio
大家好,
我想使用DRV8305- Q1EVM上的PWM线路来控制Krpm基准。 我找不到任何示例代码来启动和运行它,而且我也没有在整个汽车器具上找到大量的文档。 我错过了什么吗? 过去我曾尝试过存根C2000ware代码,但这些库的性能并不是很好。
提前感谢!
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,
首先,我们来检查运行期间eCAP的中断配置。
请看"图76. 概述:多路复用使用PIE块的中断"在 《系统控制和中断参考指南》中,需要启用每个门,以使中断到达C28内核。 这些寄存器的值是什么?
检查eCAP的相应IFR中是否有任何标志可能是一个好的选择。
此致,
科迪