多路ehrpwm问题 - TMS320C6748 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3505|回复: 2
打印 上一主题 下一主题

[未解决] 多路ehrpwm问题

[复制链接]

4

主题

5

帖子

94

积分

注册会员

Rank: 2

积分
94
跳转到指定楼层
楼主
发表于 2019-7-18 09:25:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
starterware的pwm例程中给出的是epwm1A引脚输出pwm,我现在想要把epwm0A、epwm0B、epwm1A三路同时输出pwm,应该如何修改呢?
我按照例程的PWM1ABasic函数写了PWM0ABasic与PWM0BBasic函数,但是epwm0A、epwm0B没有输出pwm,请帮忙看看哪里有问题,以下是我的代码

  1. void PWM1ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
  2. {
  3.     // 时间基准配置
  4.     // 时钟配置
  5.     EHRPWMTimebaseClkConfig(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_1_MODULE_FREQ);

  6.     // 配置周期
  7.     EHRPWMPWMOpFreqSet(SOC_EHRPWM_1_REGS, SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL,
  8.                     pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);

  9.     // 禁用输入同步信号
  10.     EHRPWMTimebaseSyncDisable(SOC_EHRPWM_1_REGS);

  11.     // 禁用输出同步信号
  12.     EHRPWMSyncOutModeSet(SOC_EHRPWM_1_REGS, EHRPWM_SYNCOUT_DISABLE);

  13.     // 仿真(DEBUG)模式行为配置
  14.     EHRPWMTBEmulationModeSet(SOC_EHRPWM_1_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);

  15.     // 配置计数比较器子模块
  16.     // 加载比较器 A 值
  17.     EHRPWMLoadCMPA(SOC_EHRPWM_1_REGS, (SOC_EHRPWM_1_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*(100-duty_ratio)/100, EHRPWM_SHADOW_WRITE_DISABLE,
  18.                    EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);

  19.     // 加载比较器 B 值
  20.     EHRPWMLoadCMPB(SOC_EHRPWM_1_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
  21.                    EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);

  22.     // 功能限定配置(输出引脚触发方式设定)
  23.     // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM1_A翻转,波形由EPWM1_A输出
  24.     EHRPWMConfigureAQActionOnA(SOC_EHRPWM_1_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
  25.                 EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
  26.                 EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);

  27.     // 禁用(旁路,信号直接输出到斩波子模块)死区模块
  28.     EHRPWMDBOutput(SOC_EHRPWM_1_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);

  29.     // 禁用斩波子模块
  30.     EHRPWMChopperDisable(SOC_EHRPWM_1_REGS);

  31.     // 禁用错误控制事件
  32.     EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_ONESHOT);
  33.     EHRPWMTZTripEventDisable(SOC_EHRPWM_1_REGS, EHRPWM_TZ_CYCLEBYCYCLE);

  34.     // 事件触发配置
  35.     // 每三次事件发生产生中断
  36.     EHRPWMETIntPrescale(SOC_EHRPWM_1_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
  37.     // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
  38.     EHRPWMETIntSourceSelect(SOC_EHRPWM_1_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
  39.     // 使能中断
  40.     EHRPWMETIntEnable(SOC_EHRPWM_1_REGS);

  41.     // 禁用高精度子模块
  42.     EHRPWMHRDisable(SOC_EHRPWM_1_REGS);

  43. }
  44. void PWM0ABasic(unsigned int pwm_clk,unsigned short duty_ratio)
  45. {
  46.     // 时间基准配置
  47.     // 时钟配置
  48.     EHRPWMTimebaseClkConfig(SOC_EHRPWM_0_REGS, SOC_EHRPWM_0_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_0_MODULE_FREQ);

  49.     // 配置周期
  50.     EHRPWMPWMOpFreqSet(SOC_EHRPWM_0_REGS, SOC_EHRPWM_0_MODULE_FREQ/CLOCK_DIV_VAL,
  51.                     pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);

  52.     // 禁用输入同步信号
  53.     EHRPWMTimebaseSyncDisable(SOC_EHRPWM_0_REGS);

  54.     // 禁用输出同步信号
  55.     EHRPWMSyncOutModeSet(SOC_EHRPWM_0_REGS, EHRPWM_SYNCOUT_DISABLE);

  56.     // 仿真(DEBUG)模式行为配置
  57.     EHRPWMTBEmulationModeSet(SOC_EHRPWM_0_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);

  58.     // 配置计数比较器子模块
  59.     // 加载比较器 A 值
  60.     EHRPWMLoadCMPA(SOC_EHRPWM_0_REGS, (SOC_EHRPWM_0_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*(100-duty_ratio)/100, EHRPWM_SHADOW_WRITE_DISABLE,
  61.                    EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);

  62.     // 加载比较器 B 值
  63.     EHRPWMLoadCMPB(SOC_EHRPWM_0_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
  64.                    EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);

  65.     // 功能限定配置(输出引脚触发方式设定)
  66.     // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM0_A翻转,波形由EPWM0_A输出
  67.     EHRPWMConfigureAQActionOnA(SOC_EHRPWM_0_REGS, EHRPWM_AQCTLA_ZRO_DONOTHING, EHRPWM_AQCTLA_PRD_DONOTHING,
  68.                 EHRPWM_AQCTLA_CAU_EPWMXATOGGLE,  EHRPWM_AQCTLA_CAD_DONOTHING,  EHRPWM_AQCTLA_CBU_EPWMXATOGGLE,
  69.                 EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING);

  70.     // 禁用(旁路,信号直接输出到斩波子模块)死区模块
  71.     EHRPWMDBOutput(SOC_EHRPWM_0_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);

  72.     // 禁用斩波子模块
  73.     EHRPWMChopperDisable(SOC_EHRPWM_0_REGS);

  74.     // 禁用错误控制事件
  75.     EHRPWMTZTripEventDisable(SOC_EHRPWM_0_REGS, EHRPWM_TZ_ONESHOT);
  76.     EHRPWMTZTripEventDisable(SOC_EHRPWM_0_REGS, EHRPWM_TZ_CYCLEBYCYCLE);

  77.     // 事件触发配置
  78.     // 每三次事件发生产生中断
  79.     EHRPWMETIntPrescale(SOC_EHRPWM_0_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
  80.     // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
  81.     EHRPWMETIntSourceSelect(SOC_EHRPWM_0_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
  82.     // 使能中断
  83.     EHRPWMETIntEnable(SOC_EHRPWM_0_REGS);

  84.     // 禁用高精度子模块
  85.     EHRPWMHRDisable(SOC_EHRPWM_0_REGS);

  86. }
  87. void PWM0BBasic(unsigned int pwm_clk,unsigned short duty_ratio)
  88. {
  89.     // 时间基准配置
  90.     // 时钟配置
  91.     EHRPWMTimebaseClkConfig(SOC_EHRPWM_0_REGS, SOC_EHRPWM_0_MODULE_FREQ/CLOCK_DIV_VAL , SOC_EHRPWM_0_MODULE_FREQ);

  92.     // 配置周期
  93.     EHRPWMPWMOpFreqSet(SOC_EHRPWM_0_REGS, SOC_EHRPWM_0_MODULE_FREQ/CLOCK_DIV_VAL,
  94.                     pwm_clk, EHRPWM_COUNT_UP, EHRPWM_SHADOW_WRITE_DISABLE);

  95.     // 禁用输入同步信号
  96.     EHRPWMTimebaseSyncDisable(SOC_EHRPWM_0_REGS);

  97.     // 禁用输出同步信号
  98.     EHRPWMSyncOutModeSet(SOC_EHRPWM_0_REGS, EHRPWM_SYNCOUT_DISABLE);

  99.     // 仿真(DEBUG)模式行为配置
  100.     EHRPWMTBEmulationModeSet(SOC_EHRPWM_0_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);

  101.     // 配置计数比较器子模块
  102.     // 加载比较器 A 值
  103.     EHRPWMLoadCMPA(SOC_EHRPWM_0_REGS, (SOC_EHRPWM_0_MODULE_FREQ/CLOCK_DIV_VAL/pwm_clk)*(100-duty_ratio)/100, EHRPWM_SHADOW_WRITE_DISABLE,
  104.                    EHRPWM_COMPA_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);

  105.     // 加载比较器 B 值
  106.     EHRPWMLoadCMPB(SOC_EHRPWM_0_REGS, 0, EHRPWM_SHADOW_WRITE_DISABLE,
  107.                    EHRPWM_COMPB_NO_LOAD, EHRPWM_CMPCTL_OVERWR_SH_FL);

  108.     // 功能限定配置(输出引脚触发方式设定)
  109.     // 时间基准计数等于有效计数比较寄存器 A/B 值时EPWM0_B翻转,波形由EPWM0_B输出
  110.     EHRPWMConfigureAQActionOnB(SOC_EHRPWM_0_REGS, EHRPWM_AQCTLB_ZRO_DONOTHING, EHRPWM_AQCTLB_PRD_DONOTHING,
  111.                 EHRPWM_AQCTLB_CAU_EPWMXBTOGGLE,  EHRPWM_AQCTLB_CAD_DONOTHING,  EHRPWM_AQCTLB_CBU_EPWMXBTOGGLE,
  112.                 EHRPWM_AQCTLB_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFB_DONOTHING);

  113.     // 禁用(旁路,信号直接输出到斩波子模块)死区模块
  114.     EHRPWMDBOutput(SOC_EHRPWM_0_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS);

  115.     // 禁用斩波子模块
  116.     EHRPWMChopperDisable(SOC_EHRPWM_0_REGS);

  117.     // 禁用错误控制事件
  118.     EHRPWMTZTripEventDisable(SOC_EHRPWM_0_REGS, EHRPWM_TZ_ONESHOT);
  119.     EHRPWMTZTripEventDisable(SOC_EHRPWM_0_REGS, EHRPWM_TZ_CYCLEBYCYCLE);

  120.     // 事件触发配置
  121.     // 每三次事件发生产生中断
  122.     EHRPWMETIntPrescale(SOC_EHRPWM_0_REGS, EHRPWM_ETPS_INTPRD_THIRDEVENT);
  123.     // 时间基准计数等于有效计数比较寄存器 B 值 产生事件
  124.     EHRPWMETIntSourceSelect(SOC_EHRPWM_0_REGS, EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);
  125.     // 使能中断
  126.     EHRPWMETIntEnable(SOC_EHRPWM_0_REGS);

  127.     // 禁用高精度子模块
  128.     EHRPWMHRDisable(SOC_EHRPWM_0_REGS);

  129. }
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

2

主题

6

帖子

66

积分

注册会员

Rank: 2

积分
66
沙发
发表于 2019-7-19 10:08:15 | 只看该作者
1、前面记得配置pwm1和pwm0的GPIO 管脚复用配置
2、pwm0_A和pwm0_B的输出可以一起写在PWM0Basic下就好, EHRPWMConfigureAQActionOnA和 EHRPWMConfigureAQActionOnB放在一起就好了
回复 支持 反对

使用道具 举报

4

主题

5

帖子

94

积分

注册会员

Rank: 2

积分
94
板凳
 楼主| 发表于 2019-7-22 08:30:39 | 只看该作者
pdnanmi 发表于 2019-7-19 10:08
1、前面记得配置pwm1和pwm0的GPIO 管脚复用配置
2、pwm0_A和pwm0_B的输出可以一起写在PWM0Basic下就好, EH ...

非常感谢你的答复!
1 已经配置了管脚复用
2 因为我需要单独改变每个pwm的状态,所以只能分开配置

可以留个联系方式讨论一下吗。我的vx  18856305288 我是个新手,有很多地方不太懂
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-4-19 20:09 , Processed in 0.036298 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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