工具/软件:Code Composer Studio
尊敬的 Sirs:
我使用的主要内容如下:
///-------------------------------------------- //文件:AsymmetricPWM-Main.c // (向上、具有独立调制功能的单边沿非对称波形 // 在 EPWM2A 和 EPWM2B 上) //// 说明:此程序设置 EV TIMER2以生成互补 // PWM 波形。 然后、用户可以使用 来自//的示波器观察波形 ePWM2A 和 ePWM2B 引脚。 // -为了改变 PWM 频率,用户应该改变 // "期间"的值。 // -可通过改变比较 //来独立调整占空比 ePWM2A 和 ePWM2B 的值(Duty_cycle_A 和 Duty_cycle_B)。 // -有关更多详细信息、请搜索 SPRU791.PDF // (TMS320x28xx、28xxx 增强型脉宽调制器模块),网址为 TI.com // ////目标:TMS320F2806x 或 TMS320F2803x 系列(F28069) //----------- //$TI 发行版:$V1.0 //$发行 日期:$2010年1月11日- VSC //../../----------- // //请阅读-有关此项目的有用注释 //尽管此项目由多个文件组成,但最重要的文件是: //“AsymmetricPWM .c”,此文件 // -应用程序初始化、外设配置 // -应用程序管理 // -较慢的后台代码循环和任务调度 //"AsymmetricPWM-DevInit_F28xxx.c" // -器件初始化、例如时钟、PLL、WD、GPIO 映射 // -外设时钟启用 //其他文件通常用于支持并将寄存器定义为 C //结构。 一般而言、这些文件不需要更改。 //"F2806x_RAM_AsymmetricPWM.CMD"或"F2806x_flash_AsymmetricPWM.CMD" // -将程序和数据空间分配到器件的存储器映射中。 //"F2806x_Headers_nonBIOS.cmd"和"F2806x_GlobalVariableDefs.c" // -将寄存器结构分配到数据存储器中。 这些寄存器结构是 // 在外设标头中定义包括(F2806x_ADC.h、...) ///////--------------- #include "PeripheralHeaderIninclude.h" #include "F2806X_ePWM_define.h" //用于初始化的有用定义 //#include "PWM_1ch_Cnf.c" ///%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //函数原型 ///%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% void DeviceInit(void); void InitFlash(void); void Memcopy(UINT16 * SourceAddr、UINT16* SourceEndAddr、UINT16* DestAddr); void PWM_1ch_CNF (int16 n、uint16周期、int16模式、int16阶段); //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //可变声明-常规 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% volatile struct ePWM_regs * ePWM[]= {EPwm1Regs、 //有意:(ePWM[0]未使用) EPwm1Regs (EPwm1Regs)、 EPwm2Regs (EPwm2Regs)、 EPwm3Regs (EPwm3Regs)、 EPwm4Regs (EPwm4Regs)、 EPwm5Regs (EPwm5Regs)、 EPwm6Regs (EPwm6Regs)、 EPwm7Regs (EPwm7Regs)、 }; //用于在闪存中运行后台,以及 RAM 外部 UINT16中运行 ISR RamfuncsLoadStart、RamfuncsLoadEnd、RamfuncsRunStart; //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%。%% //主代码-从此处开始 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% void main (void) { //================================================= //初始化-常规 //================================================= DeviceInit();//器件寿命支持和 GPIO 多路复用器设置 //仅在从闪存运行时使用 //请注意变量闪存由编译器定义(-d FLASH ) //----------- for (;;) { if (GpioDataRegs.GPADAT.bit.GPIO19 = 0) { PWM_1ch_CNF (1、3600、1、0); PWM_1ch_CNF (2、3600、0、1705); } }
PWM_1ch_CNF.c 代码如下:
///-------------------------------------- //文件:PWM_1ch_config.c // 说明:单通道(A 输出) PWM 配置函 数//将 PWM 通道配置为递增计数模式。 // //目标:TMS320F2803x, // 函数调用为: // PWMDRV_1ch_config (int16 n,int16周期,int16模式,int16相位) // //定义为: //----- // n =目标 ePWM 模块、1、2、... 16。 例如,如果 n=2,那么目标是 ePWM2 //周期= Sysclks 中的 PWM 周期 //模式=主控/受控模式,例如,主控模式= 1,受控 模式= 0,受控器/相位=来自 Sysclks 中上游主控的相位偏移, //仅在 MODE = 0时适用,即从/ 。--- #include "PeripheralHeaderIninclude.h" #include "F2806X_ePWM_define.h" extern volatile struct ePWM_regs * ePWM[]; UINT16 Duty_cycle_A=500;//设置占空 比 UINT16 Duty_cycle_B=500;//设置占空比初始 为 void PWM_1ch_CNF (int16、int16、int16、int16、int16、int16、int16) //时基子模块寄存 器(* ePWM[n])。TBCTL.bit.PRDLD = TB_IMMEAL;//设置立即负载 (* ePWM[n])。TBPRD =周期- 1;// PWM 频率= 1 /周期 (* ePWM[n])。TBPHS.half.TBPHS = 0; (* ePWM[n]或配置 TBCTR 时基周期(* ePWM[n])。 (* ePWM[n]).TBCTL.bit.CTRMODE = TB_COUNT_UP;//设置时基计数器的模式: (* ePWM[n]).TBCTL.bit.HSPCLKDIV = TB_DIV1;// TBCLK = SYSCLK (* CLEPW[n]= TBDIV.TBIV.TBIV.1* //设置时钟速率 (如果(MODE = 1){//配置为主( * ePWM[n]).TBCTL.bit.PHSEN = TB_DISABLE;//禁用相位加载,主模块 (* ePWM[n])。TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;//同步“下行数据流 ”(如果= 0) PHASE+2值用于补偿逻辑延迟) (* ePWM[n]).TBCTL.bit.PHSEN = TB_ENABLE;//从机模块 (* ePWM[n]).TBCTL.bit.SYNCOSEL = TB_SYNC_IN;//同步直通 IF ((0 <= PHASE)&&(PHASE <= 2)(* ePWM[n));半相位(TBPHS=TBPHS[2) //将相位寄存器设置为“(2 -相位)” ,否则,如果(相位> 2) (* ePWM[n]).TBPHS.Half.TBPHS =(周期-相位+ 2);//将相位寄存器设置为“(周期-相位+ 2)” } //计数器比较子模块寄存器 (* ePWM[n]).CMPA.PHA.n =(*半个占空比);//初始占空比 CMPB_B =(* CMPwm_b_cuty = n) //初始设置占空 比(* ePWM[n]).cmPCTL.bit.SHDWAMODE = CC_SHADODE;//影子模式。 用作双缓冲器。 (eEPWM[n]).CMPCTL.bit.LOADAMODE = CC_CTR_PRD;//在 CTR=PRD 上加载 //动作限定符子模块寄存 器(* ePWM[n]).AQCTLB.bit.ZRO = AQWRAT_TOGGLE;// EEPWM1A 的切换操作( * ePWM[n](* ePWM[n]).AMBQLA.NO.ACT_ACT.AMB.NO.ACT.N)= EQNO.ACT.AMB.ACT.OB_ACT.AM_ACT.AM_ACT.AMR = OB_ACT.OB_ACT.AM_ACT.N ( *无针对 EPWRAT.OB_ACT.AM_OB_OB_OB_OBJT.OB_OB_OB_OBJ.NO.NO.NO.NO.OBJT.OB_OB_OBJT.OB_OBJT.OB_OBJT.OB_OBJT.OB_OBJT.OB_OBJOR
我需要2个频率为1kHz 的 PWM 信号。 但当周期为 3600时、我的最小 ePWM 频率为22kHz => PWM_1ch_CNF (1、3600、1、0);
我已经阅读了 pdf 文档、我知道我需要"TBCTL.bit.HSPCLKDIV = 0x4;"和"TBCTL.bit.CLKDIV = 0x4;"类型的代码、但当我添加这些代码时、信号消失了。
出什么问题了? 这是关于占空比吗? 或周期值? 因为我知道周期是一个16位的值、最大值应为65535
感谢您的关注。