5323|0

299

帖子

3831

TA的资源

纯净的硅(初级)

楼主
 

TI-AM335X A8的EHRPWM双路输出代码分享 [复制链接]

分享一个做A8控制两路电机的写的一个驱动
  1. /*****************************************Copyright(C)******************************************
  2. *******************************************XXXX*********************************************
  3. **-----------------------------------------文件信息---------------------------------------------
  4. **文    件    名: bsp_pwm.c
  5. **硬          件: am335x
  6. **创    建    人: WB
  7. **创  建  日  期: 2015-01-21
  8. **最  新  版  本: V0.1
  9. **描          述: EHRPWM配置文件
  10. **---------------------------------------历史版本信息-------------------------------------------
  11. **修    改    人:
  12. **日          期:
  13. **版          本:
  14. **描          述:
  15. **----------------------------------------------------------------------------------------------
  16. ***********************************************************************************************/

  17. /* Includes-----------------------------------------------------------------------------------*/
  18. #include "include.h"
  19. #include "bsp_pwm.h"
  20. #include "soc_AM335x.h"
  21. #include "evmAM335x.h"
  22. #include "ehrpwm.h"
  23. #include "hw_control_AM335x.h"
  24. #include "hw_cm_per.h"
  25. #include "hw_types.h"

  26. /* Private define-----------------------------------------------------------------------------*/
  27. #define CLOCK_DIV_VAL                 (10)               //分频,也就是计数时钟(SOC_EHRPWM_2_MODULE_FREQ/CLOCK_DIV_VAL)
  28. #define SOC_EHRPWM_2_MODULE_FREQ      (100000000)       //模块时钟
  29. /* Private typedef----------------------------------------------------------------------------*/

  30. /* Private macro------------------------------------------------------------------------------*/
  31. //PWMSS基地址
  32. const INT32U PWMSS_REGS_Table[3]     = {
  33.                                           SOC_PWMSS0_REGS,
  34.                                           SOC_PWMSS1_REGS,
  35.                                           SOC_PWMSS2_REGS,
  36.                                           };
  37. //EHRPWM基地址                                             
  38. const INT32U EPWM_REGS_Table[3]     =   {
  39.                                           SOC_EPWM_0_REGS,
  40.                                           SOC_EPWM_1_REGS,
  41.                                           SOC_EPWM_2_REGS,
  42.                                           };

  43. /* Private variables--------------------------------------------------------------------------*/
  44. /* Private function prototypes----------------------------------------------------------------*/
  45. /* Private functions--------------------------------------------------------------------------*/
  46. /***********************************************************************************************
  47. * Function Name        : EHRPWMConfigure
  48. * Description        :PWM配置主要是配置占空比
  49. * Input                        :
  50. * Return                :
  51. * Note(s)                :
  52. * Contributor        : 150204 WB
  53. ***********************************************************************************************/
  54. void EHRPWMConfigure(_BSPEHRPWM_CONFIG *epwmconfig)
  55. {
  56.   
  57.    
  58.     /* TimeBase configuration */
  59.     /* Configure the clock frequency */
  60.     EHRPWMTimebaseClkConfig(EPWM_REGS_Table[epwmconfig->EPWMOutNum],
  61.                             SOC_EHRPWM_2_MODULE_FREQ/CLOCK_DIV_VAL,
  62.                             SOC_EHRPWM_2_MODULE_FREQ);

  63.     /* Configure the period of the output waveform */
  64.     EHRPWMPWMOpFreqSet(EPWM_REGS_Table[epwmconfig->EPWMOutNum],
  65.                        SOC_EHRPWM_2_MODULE_FREQ/CLOCK_DIV_VAL,//计数时钟
  66.                        (unsigned int)(SOC_EHRPWM_2_MODULE_FREQ/CLOCK_DIV_VAL)/epwmconfig->EPWMLoad,//255计数重载
  67.                        (unsigned int)EHRPWM_COUNT_UP,//向上计数
  68.                        (bool)EHRPWM_SHADOW_WRITE_DISABLE);

  69.     /* Disable synchronization*/
  70.     EHRPWMTimebaseSyncDisable(EPWM_REGS_Table[epwmconfig->EPWMOutNum]);

  71.     /* Disable syncout*/
  72.     EHRPWMSyncOutModeSet(EPWM_REGS_Table[epwmconfig->EPWMOutNum], EHRPWM_SYNCOUT_DISABLE);

  73.     /* Configure the emulation behaviour*/
  74.     EHRPWMTBEmulationModeSet(EPWM_REGS_Table[epwmconfig->EPWMOutNum], EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT);

  75.     /* Configure Counter compare cub-module */
  76.     /* Load Compare A value *///配置A的比较计数值
  77.     EHRPWMLoadCMPA(EPWM_REGS_Table[epwmconfig->EPWMOutNum],
  78.                    epwmconfig->LoadCMPA,
  79.                    (bool)EHRPWM_SHADOW_WRITE_DISABLE,
  80.                    (unsigned int)EHRPWM_COMPA_NO_LOAD,
  81.                    (bool)EHRPWM_CMPCTL_OVERWR_SH_FL);

  82.     /* Load Compare B value *///配置B的比较计数值
  83.     EHRPWMLoadCMPB(EPWM_REGS_Table[epwmconfig->EPWMOutNum],
  84.                    epwmconfig->LoadCMPB,
  85.                    (bool)EHRPWM_SHADOW_WRITE_DISABLE,
  86.                    (unsigned int) EHRPWM_COMPB_NO_LOAD,
  87.                    (bool)EHRPWM_CMPCTL_OVERWR_SH_FL);

  88.     /* Configure Action qualifier */
  89.     /* Toggle when CTR = CMPA *///设置A输出的一些配置,这里配置为ZRO即初始低,PRD即EHRPriod到低,CAU即A计数值到为高电平,其余节点不做
  90.     EHRPWMConfigureAQActionOnA(EPWM_REGS_Table[epwmconfig->EPWMOutNum],
  91.                                EHRPWM_AQCTLA_ZRO_EPWMXALOW,
  92.                                EHRPWM_AQCTLA_PRD_EPWMXALOW,
  93.                                EHRPWM_AQCTLA_CAU_EPWMXAHIGH,
  94.                                EHRPWM_AQCTLA_CAD_DONOTHING,
  95.                                EHRPWM_AQCTLA_CBU_DONOTHING,
  96.                                EHRPWM_AQCTLA_CBD_DONOTHING,
  97.                                EHRPWM_AQSFRC_ACTSFA_DONOTHING);

  98.        /* Configure Action qualifier */
  99.     /* Toggle when CTR = CMPB *///设置B输出的一些配置,这里配置为ZRO初始低,PRD即EHRPriod到低,,CBU即B计数值到为高电平,其余节点不做
  100.     EHRPWMConfigureAQActionOnB(EPWM_REGS_Table[epwmconfig->EPWMOutNum],
  101.                                EHRPWM_AQCTLB_ZRO_EPWMXBLOW,
  102.                                EHRPWM_AQCTLB_PRD_EPWMXBLOW,
  103.                                EHRPWM_AQCTLB_CAU_DONOTHING,
  104.                                EHRPWM_AQCTLB_CAD_DONOTHING,
  105.                                EHRPWM_AQCTLB_CBU_EPWMXBHIGH,
  106.                                EHRPWM_AQCTLB_CBD_DONOTHING,
  107.                                EHRPWM_AQSFRC_ACTSFB_DONOTHING);
  108.    
  109.     /* Bypass dead band sub-module */
  110.     EHRPWMDBOutput(EPWM_REGS_Table[epwmconfig->EPWMOutNum], EHRPWM_DBCTL_OUT_MODE_BYPASS);

  111.     /* Disable Chopper sub-module */
  112.     EHRPWMChopperDisable(EPWM_REGS_Table[epwmconfig->EPWMOutNum]);

  113.     /* Disable trip events */
  114.     EHRPWMTZTripEventDisable(EPWM_REGS_Table[epwmconfig->EPWMOutNum],(bool)EHRPWM_TZ_ONESHOT);
  115.     EHRPWMTZTripEventDisable(EPWM_REGS_Table[epwmconfig->EPWMOutNum],(bool)EHRPWM_TZ_CYCLEBYCYCLE);

  116.     /* Event trigger */
  117.     /* Generate interrupt every 3rd occurance of the event */
  118.     //EHRPWMETIntPrescale(EPWM_REGS_Table[epwmconfig->EPWMOutNum], EHRPWM_ETPS_INTPRD_THIRDEVENT);
  119.     /* Generate event when CTR = CMPB */
  120.    // EHRPWMETIntSourceSelect(EPWM_REGS_Table[epwmconfig->EPWMOutNum], EHRPWM_ETSEL_INTSEL_TBCTREQUCMPBINC);

  121.     /* Disable High resolution capability 禁止高分辨率*/
  122.     EHRPWMHRDisable(EPWM_REGS_Table[epwmconfig->EPWMOutNum]);

  123. }
  124. /***********************************************************************************************
  125. * Function Name        : EPWMPinMuxSetup
  126. * Description        :
  127. * Input                        :
  128. * Return                :
  129. * Note(s)                :
  130. * Contributor        : 150204 WB
  131. ***********************************************************************************************/
  132. void  EPWMPinMuxSetup(INT8U pwmnum)
  133. {


  134.     switch (pwmnum)
  135.     {
  136.       case 0:   
  137.         HWREG(SOC_CONTROL_REGS + CONTROL_CONF_MCASP0_ACLKX) = CONTROL_CONF_MUXMODE(1);
  138.         HWREG(SOC_CONTROL_REGS + CONTROL_CONF_MCASP0_FSX) = CONTROL_CONF_MUXMODE(1);
  139.         break;
  140.       case 1:
  141.         HWREG(SOC_CONTROL_REGS + CONTROL_CONF_LCD_DATA(10)) = CONTROL_CONF_MUXMODE(2);
  142.         HWREG(SOC_CONTROL_REGS + CONTROL_CONF_LCD_DATA(11)) = CONTROL_CONF_MUXMODE(2);
  143.         break;
  144.      case 2:
  145.         HWREG(SOC_CONTROL_REGS + CONTROL_CONF_GPMC_AD(9)) = CONTROL_CONF_MUXMODE(4);
  146.         HWREG(SOC_CONTROL_REGS + CONTROL_CONF_GPMC_AD(8)) = CONTROL_CONF_MUXMODE(4);
  147.         break;
  148.       default:
  149.         break;        
  150.     }

  151. }
  152. /***********************************************************************************************
  153. * Function Name        : Bsp_PwmInit
  154. * Description        :PWM初始化配置
  155. * Input                        :
  156. * Return                :
  157. * Note(s)                :
  158. * Contributor        : 150204 WB
  159. ***********************************************************************************************/
  160. void Bsp_EhrPwmConfig(_BSPEHRPWM_CONFIG *epwmconfig)
  161. {
  162.     PWMSSModuleClkConfig(epwmconfig->EPWMOutNum);

  163.     EPWMPinMuxSetup(epwmconfig->EPWMOutNum);
  164.    
  165.     /* Enable Clock for EHRPWM in PWM sub system */
  166.     EHRPWMClockEnable(PWMSS_REGS_Table[epwmconfig->EPWMOutNum]);

  167.     /* Enable Timer Base Module Clock in control module */
  168.     PWMSSTBClkEnable(epwmconfig->EPWMOutNum);

  169.     /* EHRPWM is configured to generate PWM waveform on EPWMBxB Pin*/
  170.     EHRPWMConfigure(epwmconfig);

  171. }
  172. /************************(C)COPYRIGHT 2015 XXXX*****END OF FILE****************************/
复制代码
  1. /*****************************************Copyright(C)******************************************
  2. *******************************************XXXX*********************************************
  3. **-----------------------------------------文件信息---------------------------------------------
  4. **文    件    名: bsp_pwm.h
  5. **硬          件: am3352
  6. **创    建    人: WB
  7. **创  建  日  期: 2015-01-21
  8. **最  新  版  本: V0.1
  9. **描          述: PWM
  10. **---------------------------------------历史版本信息-------------------------------------------
  11. **修    改    人:
  12. **日          期:
  13. **版          本:
  14. **描          述:
  15. **----------------------------------------------------------------------------------------------
  16. ***********************************************************************************************/
  17. #ifndef        __BSP_PWM_H_
  18. #define        __BSP_PWM_H_
  19. /* Includes-----------------------------------------------------------------------------------*/
  20. #include "bsp_conf.h"
  21. /* Private define-----------------------------------------------------------------------------*/
  22. /* Private typedef----------------------------------------------------------------------------*/

  23. /*EPWMLoad为一个周期,EPWMLoad-LoadCMP为一个周期内的高电平时间,其余周期内的时间

  24. 为低电平,这个就可以作为一个占空比的调节。PWM计数时钟默认为10M,可更改,若EPWMLoad=255,则

  25. PWM频率为10M/255=39.215K*/

  26. typedef struct
  27. {
  28.   INT8U  EPWMOutNum;       //0~2输出号
  29.   INT8U  EPWMLoad;       //EPWM重载计数值,即分辨率
  30.   INT8U  LoadCMPA;         //A通道计数值
  31.   INT8U  LoadCMPB;        //B通道计数值
  32.   
  33. }_BSPEHRPWM_CONFIG;
  34. /* Private macro------------------------------------------------------------------------------*/
  35. /* Private variables--------------------------------------------------------------------------*/
  36. /* Private function prototypes----------------------------------------------------------------*/
  37. /* Private functions--------------------------------------------------------------------------*/
  38. /***********************************************************************************************
  39. * Function Name        : Bsp_PwmInit
  40. * Description        :PWM初始化
  41. * Input                        :
  42. * Return                :
  43. * Note(s)                :
  44. * Contributor        : 150120 WB
  45. ***********************************************************************************************/
  46. void Bsp_EhrPwmConfig(_BSPEHRPWM_CONFIG *epwmconfig);
  47. #endif        //__BSP_PWM_H_
  48. /************************(C)COPYRIGHT 2015 XXXX*****END OF FILE****************************/
复制代码

A8.zip (3.09 KB, 下载次数: 62)

点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表