fafen 发表于 2020-12-23 21:25

HC32F030如何实现不用中断更新CCR调节互补PWM占空比?

因为要使用互补PWM控制H桥来驱动电机,参考HC32F030驱动下的产生互补PWM的例子“HC32F030_DDL_Rev1.2.0\example\timer3\timer3_m23_tpcmp_pwm”,可以产生控制互补PWM占空比控制电机转动。但问题是这种方式需要在定时器溢出中断频繁更新CCR的值,频繁的中断服务程序频繁占用系统处理时间,而我只需要输出互补PWM而已。
尝试在参考例子中关掉中断,使能PWM自动输出。
//stcTim3BaseCfg.pfnTim3Cb= Tim3_LRMotorPWM_Int;                      //中断函数入口
//Tim3_ClearAllIntFlag();                                 //清中断标志
//Tim3_Mode23_EnableIrq(Tim3UevIrq);                        //使能TIM3 UEV更新中断
//EnableNvic(TIM3_IRQn, IrqLevel0, TRUE);                   //TIM3中断使能
Tim3_M23_EnPWM_Output(TRUE, TRUE);                      //端口输出使能

应用程序中改变CCR的值,试图改变PWM占空比:
Init_LRMotor_PWM();
Tim3_M23_CCR_Set(Tim3CCR0A, 250);
Tim3_M23_CCR_Set(Tim3CCR0B, 750);
Tim3_M23_CCR_Set(Tim3CCR1A, 250);
Tim3_M23_CCR_Set(Tim3CCR1B, 750);
Tim3_M23_Run();
Delay_MS(2000);
Tim3_M23_Stop();
Delay_MS(2000);
Tim3_M23_CCR_Set(Tim3CCR0A, 750);
Tim3_M23_CCR_Set(Tim3CCR0B, 250);
Tim3_M23_CCR_Set(Tim3CCR1A, 750);
Tim3_M23_CCR_Set(Tim3CCR1B, 250);
Tim3_M23_Run();
      
      下载视频         

martinhu 发表于 2020-12-24 09:44

中断里面修改CCRx只是个例子,使能传输buf之后,你可以在任何位置修改CCRx以改变PWM占空比……

中子家 发表于 2020-12-28 13:29

可以的,打开缓冲就行,随时都可以些,出现更新事件的时候才会实际改变占空比
页: [1]
查看完整版本: HC32F030如何实现不用中断更新CCR调节互补PWM占空比?