Hi,
based on the ehrpwm_haptics-example I created some code that emits a frequency at EHRPWM2B output with variable pulse width which works well:
EHRPWMTimebaseClkConfig(SOC_EPWM_2_REGS,SOC_EHRPWM_2_MODULE_FREQ/CLOCK_DIV_VAL,SOC_EHRPWM_2_MODULE_FREQ); EHRPWMPWMOpFreqSet(SOC_EPWM_2_REGS,SOC_EHRPWM_2_MODULE_FREQ/CLOCK_DIV_VAL, (unsigned int)(SOC_EHRPWM_2_MODULE_FREQ/CLOCK_DIV_VAL)/100, // divisor specifies frequency (unsigned int)EHRPWM_COUNT_UP,(bool)EHRPWM_SHADOW_WRITE_DISABLE); EHRPWMTimebaseSyncDisable(SOC_EPWM_2_REGS); EHRPWMSyncOutModeSet(SOC_EPWM_2_REGS, EHRPWM_SYNCOUT_DISABLE); EHRPWMTBEmulationModeSet(SOC_EPWM_2_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT); EHRPWMLoadCMPB(SOC_EPWM_2_REGS, 80, (bool)EHRPWM_SHADOW_WRITE_DISABLE,(unsigned int)EHRPWM_COMPA_NO_LOAD,(bool)EHRPWM_CMPCTL_OVERWR_SH_FL); EHRPWMConfigureAQActionOnB(SOC_EPWM_2_REGS, EHRPWM_AQCTLB_ZRO_EPWMXBHIGH, EHRPWM_AQCTLB_PRD_DONOTHING, EHRPWM_AQCTLB_CAU_DONOTHING, EHRPWM_AQCTLB_CAD_DONOTHING, EHRPWM_AQCTLB_CBU_EPWMXBLOW, EHRPWM_AQCTLB_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFB_DONOTHING); EHRPWMDBOutput(SOC_EPWM_2_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS); EHRPWMChopperDisable(SOC_EPWM_2_REGS); EHRPWMTZTripEventDisable(SOC_EPWM_2_REGS,(bool)EHRPWM_TZ_ONESHOT); EHRPWMTZTripEventDisable(SOC_EPWM_2_REGS,(bool)EHRPWM_TZ_CYCLEBYCYCLE); EHRPWMHRDisable(SOC_EPWM_2_REGS);
In next step I want to emit a frequency with same frequency base but with different output frequency/pwm at EHRPWM2A. The code is very similar but I do not get a signal on related output of BeagleBone Black:
EHRPWMTimebaseClkConfig(SOC_EPWM_2_REGS,SOC_EHRPWM_2_MODULE_FREQ/CLOCK_DIV_VAL,SOC_EHRPWM_2_MODULE_FREQ); EHRPWMPWMOpFreqSet(SOC_EPWM_2_REGS,SOC_EHRPWM_2_MODULE_FREQ/CLOCK_DIV_VAL, (unsigned int)(SOC_EHRPWM_2_MODULE_FREQ/CLOCK_DIV_VAL)/100, // divisor specifies frequency (unsigned int)EHRPWM_COUNT_UP,(bool)EHRPWM_SHADOW_WRITE_DISABLE); EHRPWMTimebaseSyncDisable(SOC_EPWM_2_REGS); EHRPWMSyncOutModeSet(SOC_EPWM_2_REGS, EHRPWM_SYNCOUT_DISABLE); EHRPWMTBEmulationModeSet(SOC_EPWM_2_REGS, EHRPWM_STOP_AFTER_NEXT_TB_INCREMENT); EHRPWMLoadCMPA(SOC_EPWM_2_REGS, 80, (bool)EHRPWM_SHADOW_WRITE_DISABLE,(unsigned int)EHRPWM_COMPA_NO_LOAD,(bool)EHRPWM_CMPCTL_OVERWR_SH_FL); EHRPWMConfigureAQActionOnA(SOC_EPWM_2_REGS, EHRPWM_AQCTLA_ZRO_EPWMXAHIGH, EHRPWM_AQCTLA_PRD_DONOTHING, EHRPWM_AQCTLA_CAU_EPWMXALOW, EHRPWM_AQCTLA_CAD_DONOTHING, EHRPWM_AQCTLA_CBU_DONOTHING, EHRPWM_AQCTLA_CBD_DONOTHING, EHRPWM_AQSFRC_ACTSFA_DONOTHING); EHRPWMDBOutput(SOC_EPWM_2_REGS, EHRPWM_DBCTL_OUT_MODE_BYPASS); EHRPWMChopperDisable(SOC_EPWM_2_REGS); EHRPWMTZTripEventDisable(SOC_EPWM_2_REGS,(bool)EHRPWM_TZ_ONESHOT); EHRPWMTZTripEventDisable(SOC_EPWM_2_REGS,(bool)EHRPWM_TZ_CYCLEBYCYCLE); EHRPWMHRDisable(SOC_EPWM_2_REGS);
Any idea what could be wrong in my second code?
Thanks!