请选择 进入手机版 | 继续访问电脑版

普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 1626|回复: 1

EPWM实验代码如下,请问为什么只能由epwm6呼吸,epwm1无效啊。

[复制链接]

2

主题

2

帖子

71

积分

注册会员

Rank: 2

积分
71
发表于 2023-4-18 12:30:17 | 显示全部楼层 |阅读模式
  1. /*
  2. * epwm_up.c
  3. *
  4. *  Created on: 2023年4月8日
  5. *      Author: Zihanwei
  6. */

  7. #include "epwm_up.h"
  8. #include "leds.h"


  9. //void EPWM1_Init(Uint16 tbprd)
  10. //{
  11. //    EALLOW;
  12. //    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;   // Disable TBCLK within the ePWM
  13. //    SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1;  // ePWM1
  14. //    EDIS;
  15. //
  16. //    InitEPwm1Gpio();
  17. //
  18. ////    EALLOW;
  19. ////    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;      // Stop all the TB clocks
  20. ////    EDIS;
  21. //
  22. //    // Setup Sync
  23. //    EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;  // Pass through
  24. //    // Allow each timer to be sync'ed
  25. //    EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;
  26. //    EPwm1Regs.TBPHS.half.TBPHS = 0;
  27. //    EPwm1Regs.TBCTR = 0x0000;                  // Clear counter
  28. //    EPwm1Regs.TBPRD = tbprd;
  29. //    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;    // Count up
  30. //    EPwm1Regs.TBCTL.bit.HSPCLKDIV=TB_DIV1;
  31. //    EPwm1Regs.TBCTL.bit.CLKDIV=TB_DIV1;
  32. //
  33. //    // Setup shadow register load on ZERO
  34. //    EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
  35. //    EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
  36. //    EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
  37. //    EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
  38. //
  39. //    // Set Compare values
  40. //    EPwm1Regs.CMPA.half.CMPA = 0;    // Set compare A value
  41. //    EPwm1Regs.CMPB = 0;              // Set Compare B value
  42. //
  43. //    // Set actions
  44. //    EPwm1Regs.AQCTLA.bit.ZRO = AQ_CLEAR;            // Set PWM1A on Zero
  45. //    EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;          // Clear PWM1A on event A, up count
  46. //    EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET;            // Set PWM1B on Zero
  47. //    EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR;          // Clear PWM1B on event B, up count
  48. //
  49. //    EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;     // Select INT on Zero event
  50. //    EPwm1Regs.ETSEL.bit.INTEN = 1;  // Enable INT
  51. //    EPwm1Regs.ETPS.bit.INTPRD = ET_1ST;           // Generate INT on 1st event
  52. //
  53. //    EALLOW;
  54. //    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;         // Start all the timers synced
  55. //    EDIS;
  56. //}

  57. //void EPwm1A_SetCompare(Uint16 val)
  58. //{
  59. //    EPwm1Regs.CMPA.half.CMPA = val;  //设置占空比
  60. //}
  61. //void EPwm1B_SetCompare(Uint16 val)
  62. //{
  63. //    EPwm1Regs.CMPB = val;  //设置占空比
  64. //}

  65. void EPWM1_Init(Uint16 tbprd)
  66. {
  67.     EALLOW;
  68.     SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;   // Disable TBCLK within the ePWM
  69.     SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1;  // ePWM6
  70.     EDIS;

  71.     InitEPwm1Gpio();

  72.     // Setup Sync
  73.     EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;  // Pass through
  74.     // Allow each timer to be sync'ed
  75.     EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;
  76.     EPwm1Regs.TBPHS.half.TBPHS = 0;
  77.     EPwm1Regs.TBCTR = 0x0000;                  // Clear counter
  78.     EPwm1Regs.TBPRD = tbprd;
  79.     EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;    // Count up
  80.     EPwm1Regs.TBCTL.bit.HSPCLKDIV=TB_DIV1;
  81.     EPwm1Regs.TBCTL.bit.CLKDIV=TB_DIV1;

  82.     // Setup shadow register load on ZERO
  83.     EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
  84.     EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
  85.     EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
  86.     EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

  87.     // Set Compare values
  88.     EPwm1Regs.CMPA.half.CMPA = 0;    // Set compare A value
  89.     EPwm1Regs.CMPB = 0;              // Set Compare B value

  90.     // Set actions
  91.     EPwm1Regs.AQCTLA.bit.ZRO = AQ_CLEAR;            // Set PWM1A on Zero
  92.     EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;          // Clear PWM1A on event A, up count
  93.     EPwm1Regs.AQCTLB.bit.ZRO = AQ_CLEAR;            // Set PWM1B on Zero
  94.     EPwm1Regs.AQCTLB.bit.CBU = AQ_SET;          // Clear PWM1B on event B, up count

  95.     EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;     // Select INT on Zero event
  96.     EPwm1Regs.ETSEL.bit.INTEN = 1;  // Enable INT
  97.     EPwm1Regs.ETPS.bit.INTPRD = ET_1ST;           // Generate INT on 1st event

  98.     EALLOW;
  99.     SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;         // Start all the timers synced
  100.     EDIS;
  101. }

  102. void EPwm1A_SetCompare(Uint16 val)
  103. {
  104.     EPwm1Regs.CMPA.half.CMPA = val;  //设置占空比
  105. }
  106. void EPwm1B_SetCompare(Uint16 val)
  107. {
  108.     EPwm1Regs.CMPB = val;  //设置占空比
  109. }




  110. void EPWM6_Init(Uint16 tbprd)
  111. {
  112.     EALLOW;
  113.     SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;   // Disable TBCLK within the ePWM
  114.     SysCtrlRegs.PCLKCR1.bit.EPWM6ENCLK = 1;  // ePWM6
  115.     EDIS;

  116.     InitEPwm6Gpio();

  117.     // Setup Sync
  118.     EPwm6Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;  // Pass through
  119.     // Allow each timer to be sync'ed
  120.     EPwm6Regs.TBCTL.bit.PHSEN = TB_DISABLE;
  121.     EPwm6Regs.TBPHS.half.TBPHS = 0;
  122.     EPwm6Regs.TBCTR = 0x0000;                  // Clear counter
  123.     EPwm6Regs.TBPRD = tbprd;
  124.     EPwm6Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;    // Count up
  125.     EPwm6Regs.TBCTL.bit.HSPCLKDIV=TB_DIV1;
  126.     EPwm6Regs.TBCTL.bit.CLKDIV=TB_DIV1;

  127.     // Setup shadow register load on ZERO
  128.     EPwm6Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
  129.     EPwm6Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
  130.     EPwm6Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
  131.     EPwm6Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

  132.     // Set Compare values
  133.     EPwm6Regs.CMPA.half.CMPA = 0;    // Set compare A value
  134.     EPwm6Regs.CMPB = 0;              // Set Compare B value

  135.     // Set actions
  136.     EPwm6Regs.AQCTLA.bit.ZRO = AQ_CLEAR;            // Set PWM1A on Zero
  137.     EPwm6Regs.AQCTLA.bit.CAU = AQ_SET;          // Clear PWM1A on event A, up count
  138.     EPwm6Regs.AQCTLB.bit.ZRO = AQ_CLEAR;            // Set PWM1B on Zero
  139.     EPwm6Regs.AQCTLB.bit.CBU = AQ_SET;          // Clear PWM1B on event B, up count

  140.     EPwm6Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;     // Select INT on Zero event
  141.     EPwm6Regs.ETSEL.bit.INTEN = 1;  // Enable INT
  142.     EPwm6Regs.ETPS.bit.INTPRD = ET_1ST;           // Generate INT on 1st event

  143.     EALLOW;
  144.     SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;         // Start all the timers synced
  145.     EDIS;
  146. }

  147. void EPwm6A_SetCompare(Uint16 val)
  148. {
  149.     EPwm6Regs.CMPA.half.CMPA = val;  //设置占空比
  150. }
  151. void EPwm6B_SetCompare(Uint16 val)
  152. {
  153.     EPwm6Regs.CMPB = val;  //设置占空比
  154. }

  155. [code]/*
  156. * epwm_up.h
  157. *
  158. *  Created on: 2023年4月8日
  159. *      Author: Zihanwei
  160. */

  161. #ifndef APP_EPWM_UP_EPWM_UP_H_
  162. #define APP_EPWM_UP_EPWM_UP_H_



  163. #include "DSP2833x_Device.h"     // DSP2833x 头文件
  164. #include "DSP2833x_Examples.h"   // DSP2833x 例子相关头文件


  165. void EPWM1_Init(Uint16 tbprd);
  166. void EPwm1A_SetCompare(Uint16 val);
  167. void EPwm1B_SetCompare(Uint16 val);

  168. void EPWM6_Init(Uint16 tbprd);
  169. void EPwm6A_SetCompare(Uint16 val);
  170. void EPwm6B_SetCompare(Uint16 val);




  171. #endif /* APP_EPWM_UP_EPWM_UP_H_ */
复制代码



[/code]
  1. /*
  2. * main.c
  3. *
  4. *  Created on: 2023年3月23日
  5. *      Author: Zihanwei
  6. */


  7. #include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
  8. #include "DSP2833x_Examples.h"   // DSP2833x Examples Include File

  9. #include "leds.h"
  10. #include "time.h"
  11. #include "epwm_up.h"


  12. /*******************************************************************************
  13. * 函 数 名         : main
  14. * 函数功能         : 主函数
  15. * 输    入         : 无
  16. * 输    出         : 无
  17. *******************************************************************************/
  18. void main()
  19. {
  20.     int i=0;
  21.     unsigned char fx=0;

  22.     InitSysCtrl();

  23.     InitPieCtrl();
  24.     IER = 0x0000;
  25.     IFR = 0x0000;
  26.     InitPieVectTable();

  27. //  LED_Init();
  28.     EPWM1_Init(500);
  29.     EPWM6_Init(500);
  30.     while(1)
  31.     {
  32.         if(fx==0)
  33.         {
  34.             i++;
  35.             if(i==300)
  36.             {
  37.                 fx=1;
  38.             }
  39.         }
  40.         else
  41.         {
  42.             i--;
  43.             if(i==0)
  44.             {
  45.                 fx=0;
  46.             }
  47.         }
  48.         EPwm1A_SetCompare(i);  //i值最大可以取499,因为ARR最大值是499.
  49.         EPwm1B_SetCompare(300-i);  //i值最大可以取499,因为ARR最大值是499.
  50.         EPwm6A_SetCompare(i);  //i值最大可以取499,因为ARR最大值是499.
  51.         EPwm6B_SetCompare(300-i);  //i值最大可以取499,因为ARR最大值是499.
  52.         DELAY_US(10*1000);
  53.     }
  54. }
复制代码
回复

使用道具 举报

3

主题

21

帖子

91

积分

注册会员

Rank: 2

积分
91
发表于 2023-9-18 13:48:18 | 显示全部楼层
你去看一下普中的28335原理图,只有EPWM6是跟LED小灯接着。剩下的EPWM都没接灯。怎么可能能亮?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-3-29 18:35 , Processed in 0.089944 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表