工具/软件:Code Composer Studio
你好。 我正在为 BLDC 电机创建驱动程序。 它可以正常工作、但我想添加单分流器的电流测量值。 现在、我每1ms 启动一次 ADC、因此 resumalts 会产生噪声。 我想、如果我在经过一段时间的 PWM 点击后开始谈话、我将获得更好的结果。
我可以实现吗?
以下是我的代码、其中 ePWM 和 ADC:
AdcRegs.ADCCTL1.bit.INTPULSEPOS= 1;//ADCINT1在 AdcResults 锁存 器 AdcRegs.INTSEL1N2.bit.INT1E 之后跳闸 = 1;//启用 ADCINT1 AdcRegs.INTSEL1N2.bit.INT1CONT = 0;//禁用 ADCINT1连续模式 AdcRegs.INTSEL1N2.bit.INT1SEL= 1;//设置 EOC0以触发 ADCINT1以触发 AdcRegs.ADCSOC0CTL??? ????? ?????)将 SOC0通道选择设置为 ADCINA5 (在内部连接到温度传感器) AdcRegs.ADCSOC1CTL.bit.CHSEL= 1;//(????????????? ????? 将 SOC1通道选择设置为 ADCINA5 (在内部连接到温度传感器)勘误表变通办法 AdcRegs.ADCSO2CTL.bit.CHSEL= 5;//temp0 MCU AdcRegs.ADCSO3CTL.bit.CHSEL= 8;//temp1 AdcRegs.ADCCOCL.ADCSOC0 = ADCTR2.ADCTRL = ADCSOTCL.ADCTR0;ADCSOCTR1.ADCTR1.ADCTRL = ADCTR1.ADCTR2.ADCTR1.TCL.ADCTR0 = ADCTR1.ADCTR0 = ADCTR1.ADCTR2.ADCTR1.ADCTR1.ADCTR1.ADCTRL = ADCTR1.ADCTR1.ADCTR1.ADCTR2.ADCTRL = ADCTR1.ADCTR1.TCM0 //设置 EPWM1A 上的 SOC0启动触发器勘误表 ADcRegs.ADCSOC2CTL.bit.TRIGSEL = 0;//设置 EPWM1A 上的 SOC0启动触发器勘误表 AdcRegs.ADCSOC3CTL.bit.TRIGSEL= 0; AdcRegs.ADCSOC4CTL.PS = 36位 ADC36.ADCMCTL.ADC36.ADC36.ADCMCTL.ADC36.ADC36.ADCTIGCLP=36位 ADC36.ADC36.ADCTRCLK 周期;ADC36.ADC36.ADCMCTRCL.ADC36.ADCTRCL.ADC36.ADC36.ADC36.ADC36.ADCTRCLPs = ADC //将 SOC1 S/H 窗口设置为37个 ADC 时钟周期,(36个 ACQPS 加1)勘误表变通办法 AdcRegs.ADCSOC2CTL.bit.ACQPS= 36;//将 SOC1 S/H 窗口设置为37个 ADC 时钟周期,(36个 ACQPS 加1)勘误表 AdcRegs.ADCSOC3CTL.bit.ACQPS = 36个 ADCCTRL = ADCCTR1.tb.ADCCTRL = 36 个 ADCCTRK = ADCCTRF_ADCCTRL = ADCCTRM 36个 ADCCTRK = ADCCTRL = ADCCTRM 36个 ADCCTRK = ADCCTRL (ADCCTRL = ADCC3CTL = ADCC3CTL = ADCC3CTL //对 EPwm1Regs.TBPRD 进行计数= EPWM1_TIMER_TBPRD; //设置定时器周期 EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;//禁用相位加载 EPwm1Regs.TBPHS.Half.TBPHS = 0x0000; //相位为0 EPwm1Regs.TBCTR = 0x0000; //清除计数 器 EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1; //在0 EPwm1Regs.CMTL.RCC.PHM1RP.AMCC.AMCC.WCTL.STR= 0;SYSMRP.WCMDR.AMPCM1RP.DR.WCMTL.RP.WCMTL.RP.WCMTL.DR.WCMTL.TL.DR.WCMTL.TL.TL.TL.TL.RCMPADDR.TL.TL.TL.TL.TL.RCMPADDR.TL.TL.TL.RCMPADRCMPO.TL.TL.RCMPADRCMTL.TL.TL.TL.TL.TL.TL.TL.TL.TL.TL.TL.TL.RCMTL.RCMTL.TL.RCMPO. //设置比较 A 值 EPwm1Regs.CMPB = 0.5 * EPWM1_TIMER_TBPRD; //设置比较 B 值 //设置操作 EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; //在零 EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR 上设置 PWM1A; //在事件 A 上清除 PWM1A,向上计数 //EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET; //将 PWM1B 置为零 //EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR; //清除事件 B 上的 PWM1B,向上计数 //低电平有效 PWM -设置死区 EPwm1Regs.DBCTL.bit.out_mode = DB_full_enable; EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC;EPwm1Regs.DBCTL.bit.DBWRM1= DB_DPWDD_RM1; DB_REDM1LD_REP.DB_REP.DB_REDP_DP_LD_REDM.DB_REDP_REM1REP.DB_REDP_DP_LD_REM1REDP_LD_REDP_REML.DB_DP_REDP_REM1RE //中断,我们将在其中更改比较值 EPwm1Regs.ETSEL.bit.INTSEL = et_CTR_ZERO; //选择零事件 EPwm1Regs.ETSEL.bit.INTEN 上的 INT = 1; //启用 INT EPwm1Regs.ETPS.bit.INTPRD = et_3rd; //在发生第三个事件时生成 INT //信息此示例用于跟踪 // CMPA/CMPB 值 的移动方向,允许的最小值和最大值以及 //指向正确 ePWM 寄存 器 epwm1_info.EPwmTimerIntCount = 0的指针; //将中断计数器 epwm1_info.EPwmRegHandle =&EPwm1Regs; //将指向 ePWM 模块 epwm1_info.ePWMx 的指针设置为0; }