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
您好!
我将 TMS320F28035 (Piccolo)与 CCS Vers 结合使用。 6.1.0.00104 (CPU 和 CLA 均为 C 代码)、以便使用峰值电流模式 controlPWM 控制断续导通模式下的升压转换器(开关间隔开始时的扼流电流应为零、我将在 CLA 中测试此情况)。 CLA 任务1执行控制 PWM1A 的 C 代码、以便从转换器获得恒定输出电压。
如果在开关间隔开始时电流大于阈值、则我尝试在当前开关间隔内使 PWM1A 关闭(在下一个间隔内、它应自动再次打开)。 通过将0输入 DAC 并在模拟比较器的帮助下执行此操作很好(但可能比必要的速度慢)。 我希望更好地避开模拟路径并生成一个关闭 PWM1A 的 SW 跳闸。 不幸的是、这不起作用、在我看来 PWM1只是停止(永远、这不是我想要的、完全不是)。 CLA 中是否存在寻址问题(CPU 中为32位指针、CLA 中为16位指针???) 当我读取和时
在 CPU 和 CLA 中以相同的方式写入 ePWM 寄存器?
非常感谢您提出的任何有用建议。
此致、
Leo Rohrecker
//=== CPU 代码中的初始化:===
EALLOW;
//设置比较:A = PWM 最大直流值、B = ADC SOC
EPwm1Regs.CMPA.half.CMPA = 0;// DC = 0
EPwm1Regs.CMPB = ADC_SOC_OFFSET;
//与 SYSCLKOUT 的时钟比率
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
//周期
EPwm1Regs.TBPRD = PWM_TIMER_TBPRD;
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
//设置操作
EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; //将 PWM1A 设置为零
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;//最大占空比
EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET; //将 PWM1B 设置为零
EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR;// ADC SOC 第一组
// CBC 跳闸,定义事件(DCAEVT2)
//(请参阅 SPRUGE9E、例如 14)
EPwm1Regs.DCTRIPSEL.bit.DCAHCOMPSEL = DC_COMP1OUT; // DCAH =比较器1输出
EPwm1Regs.TZDCSEL.bit.DCAEVT2 = TZ_DCAH_HI; // DCAEVT2 = DCAH 高电平(将作为 COMP 变为有效。 输出变为高电平)
EPwm1Regs.DCACTL.bit.EVT2SRCSEL = DC_EVT2; // DCAEVT2 = DCAEVT2 (未滤波)
EPwm1Regs.DCACTL.bit.EVT2FRCSYNCSEL = DC_EVT_异 步;//采用异步路径
EPwm1Regs.TZSEL.bit.DCAEVT2 = 1; //启用 CBC 事件
EPwm1Regs.TZCTL.bit.TZA = TZ_FORCE_LO; // EPWM1A 将变为低电平
EPwm1Regs.TZCTL.bit.TSB = TZ_NO_CHANGE; // EPWM1B 未更改
//定义 SOC (ADC 触发器)
EPwm1Regs.ETSEL.bit.SOCBEN = 1; //启用 SOC B
EPwm1Regs.ETSEL.bit.SOCBSEL = ET_CTRU_CMPB; //从 CPMB 获取 SOC 递增计数
EPwm1Regs.ETPS.bit.SOCBPRD = 1; //在发生第一个事件时生成脉冲
EDIS;
//=== 在 CLA 代码中运行时间操作:===
//在开关间隔开始时通过电流测量检查 CCM
if (((float32) ADC_U_I1 > U_I_START_THRESH_CCM_til){
//启动电流过高.. 立即关闭
EALLOW;
//EPwm1Regs.TZFRC.bit.DCAEVT2 = 1;//强制 DCAEVT2跳闸条件... 也不起作用 !!!!!
EPwm1Regs.TZFRC.bit.CBC = 1;//强制 CBC 跳闸... 不起作用!!!!!
EDIS;
//Comp1Regs.DACVAL.bit.DACVAL = 0; //通过模拟比较器立即关闭。 (替代方法、工作正常、但比数字路径慢)
}
//控制器代码等...
//...
//-------------------------------------------------------- 结束----------------------------------------
您好、Vishal、
我认为我的代码中应包含必要的定义。 CLA C 代码文件 从开始
#include "DSP28x_Project.h"
和 DSP28x_Project.h 内容为:
//######################################################################################################################
//
//文件:DSP28x_Project.h
//
//标题:DSP28x 项目头文件和示例 include 文件
//
//######################################################################################################################
//$TI 版本:F2803x C/C++头文件和外设示例 V126 $
//$Release Date:2011年11月30日$
//######################################################################################################################
#ifndef DSP28x_project_H
#define DSP28x_PROJECT_H
#include "DSP2803x_CLA_typedefs.h"// DSP2803x CLA 类型定义
#include "DSP2803x_Device.h"// DSP2803x 头文件包含文件
#include "DSP2803x_examples.h"// DSP2803x 示例包含文件
#endif // DSP28x_project_H 定义的末尾
和 DSP2803x_CLAtypedefs.h 内容为:
//######################################################################################################################
//
//文件:DSP2803x_Cla_typedefs.h
//
//标题:变量类型定义
//
//######################################################################################################################
//$TI 版本:F2803x C/C++头文件和外设示例 V126 $
//$Release Date:2011年11月30日$
//######################################################################################################################
#ifndef CLASHARED_C_H_
#define CLASHARED_C_H_
///-------------------------------------------------------
//为便于移植,建议用户使用以下数据类型大小
// 16位和32位有符号/无符号整数的定义:
//
#ifndef DSP28_data_types
#define DSP28_DATA_Types
typedef short int16;
typedef long int32;
typedef unsigned char uint8;
typedef unsigned short uint16;
typedef unsigned long uint32;
typedef float 32;
typedef long double float64;
#endif
#ifndef _TI_STD_Types
#define _TI_STD_Types
/*
*这些类型也在 DSP/BIOS 5.x 中定义 和
* SYS/BIOS 6.x 文件。 我们需要保护它们
*使用#ifndef/#define 保护进行定义以避免重复
*定义警告。
*
* SYS/BIOS 要求 文件
*任何其他.h 文件。
*
#endif
//禁止转换 CLA 指针的警告
pragma diag_suppress 70、770、232
//操作预处理器以生成头文件名的宏
//在编译时基于测试名称,可用作
//#include 的参数
#define XSTRINGIZE (s) STRINGIZE (s)
#define STRINGIZE (s)#s
#define XCONCAT (x、y) CONCAT (x、y)
#define CONCAT (x、y) x#y
#ifdef __TMS320C28XX_CLA0__
struct MSTF_shadow_bits{//位描述
UINT16 LVF:1;// 0锁存溢出标志
UINT16 LUF:1;// 1锁存下溢标志
uint16 NF:1;// 2负浮点标志
UINT16 ZF:1;// 3零浮点标志
uint16 rsvd1:2;// 5:4保留
UINT16 TF:1;// 6测试标志
uint16 rsvd2:2;// 8:7保留
UINT16 RNDF32:1;// 9舍入模式
uint16 rsvd3:1;// 10保留
UINT16 MEALLOW:1;// 11 MEALLOW 状态
uint16 RPCL:4;// 15:12 return PC:low 部分
uint16 RPCH:8;// 23:16返回 PC:高电平部分
uint16 rsvd4:8;// 31:24保留
};
extern __cregister volatile unsigned int MSTF;
#endif //_TMS320C28XX_CLA0__
#if defined (_TMS320C28XX_CLA0__)
typedef 结构{uint32 low32;uint32 high32;}uint64;
其他
typedef unsigned long UINT64;
#endif
#ifndef __TMS320C28XX__
#define __cregister
#endif //_TMS320C28xx__
#define UINT16无符号短整型
#endif /*CLASHARED_C_H_*/
--------------------------------------------
我于 2011/12开始 Piccolo 的代码开发、因此这些 TI 文件自2011年开始。 但我的代码运行良好、直到我尝试在 CLA C 代码中使用软件跳闸。
此致、
Leo
您好、Vishal、
当我将 命令__meallow()/__medis()与受保护的寄存器一起使用时,可以从 CLA 访问 PWM 寄存器。 在.CLA 文件中找到 EALLOW 或 EDIS 等命令后、C 编译器生成警告或错误消息是很好的。
感谢 你的帮助!
此致、
Leo