HC32L130J8TA做LED控制,灯还有微亮的问题
最近用HC32L130J8TA的做了一个LED控制的项目,发现灯一直没有办法完全熄灭,想请教是不是华大PWM的硬件bug,怎么规避通用定时器0/1/2的关于PWM输出基本特性具有2路独立PWM输出CHA,CHB,1路互补PWM输出(CHA,CHB)+1路独立PWM输出(gate),1路互补PWM输出(CHA,CHB)+1路捕获功能(gate)。
HC32L130_HC32L136系列用户手册Rev1.8中将基础定时器的模式2/3放到了一起进行说明,其中的原因是在模式2/3下功能大体相同,不同之处在于模式2为锯齿波计数波形,模式3为三角波计数波形。
比较输出OCREF可以配置为单点输出,使用比较寄存器 CCRA控制OCREFA的输出;OCREFA也可以配置为双点比较,使用比较寄存器CCRA、CCRB一起控制OCREFA的比较输出。
OCREFB,则只能使用单点比较,用比较寄存器CCRB控制OCREFB的比较输出。
OCREF输出使用OCMx选择,在这里选择PWM模式1/2,两种模式的高低电平相反。
锯齿波技术单点比较OCREF输出波形(PWM模式2)
三角波计数单点比较OCREF输出波形(PWM模式2)
进行OCREF比较输出的大体流程为:
1.配置时钟并使能;
2.设置CHA,CHB的输出引脚;
3.配置Tim0;
4.设置重载值与比较值;
5.配置通道比较控制结构体。
添加中断,将重复计数器产生的更新事件UEV作为中断使能,将比较值CCRA和CCRB进行交换使双通道的波形每个周期进行对换。
锯齿波模式输出波形
三角波模式输出波形
总结:通过控制两个比较寄存器CCRA、CCRB的值来控制输出波形的占空比来输出不同的波形。
例如 : u16CompareAValue++;
Bt_M23_CCR_Set(TIM0, BtCCR0A, u16CompareAValue);
i++;
if(i == 65535)
{
for(i=65535;i--;i<1)
{
u16CompareAValue--;
Bt_M23_CCR_Set(TIM0, BtCCR0A, u16CompareAValue);
}
}周期性控制产生波形的占空比。 这个LED是怎么控制的,GPIO还是什么外设模块? 应该不是华大的BUG。操作问题吧。 问题已经找到, 太厉害了,不错的,真的不错的感觉。
人的发个哈哈 发表于 2020-8-31 21:01
应该不是华大的BUG。操作问题吧。
{:smile:} 华大的芯片还是比较好用的,性价比,都不错
通用定时器0/1/2的关于PWM输出基本特性具有2路独立PWM输出CHA,CHB,1路互补PWM输出(CHA,CHB)+1路独立PWM输出(gate),1路互补PWM输出(CHA,CHB)+1路捕获功能(gate)。
HC32L130_HC32L136系列用户手册Rev1.8中将基础定时器的模式2/3放到了一起进行说明,其中的原因是在模式2/3下功能大体相同,不同之处在于模式2为锯齿波计数波形,模式3为三角波计数波形。 楼主咋解决的啊! 问一下一级代理商 qq1593449604,可能有经验 检查PWM配置 更新固件或更换到新的硬件版本。
最后是咋解决的? 升级 升级
页:
[1]