辉芒微全系列的 PWM 占空比更新的问题请教
就是辉芒微全系列的 PWM 的占空比的问题
PWM,大于8位,例如16位,就会有 xxxH 和 xxxL 两个占空比的比较寄存器(包含影子寄存器)
问题是,我查了所有系列的数据手册,都没有说明要先写 xxxH 寄存器还是先写 xxxL 寄存器。
如果我正在写 xxxH(还没有来得及写 xxxL) ,这时,计数器刚刚好计数溢出,然后从0开始下一轮的计数,器件这时就会把 xxxH 和 xxxL 的数据同时加载到比较寄存器,很明显,这个比较值并不是我想要的。
特别是在 LED 调光时,在 LED 微弱发光的时候
本来我要从原来的
xxxH=0x00; xxxL=0xFF
调整到
xxxH=0x01;xxxL=0x00;(就是占空比+1)
而实际上PWM加载进比较寄存器的值却是
H=0x01; L=0xFF
这样,LED光线 就会出现抖动的现象 本帖最后由 panxiaoyi 于 2023-7-27 15:53 编辑
我测试了 FT61E13x ,它的确有这个现象的存在。
我查阅了包括 FT61E13x,FT61F14X,FT62F08X,FT62F0Gx 的数据手册,它们都说有缓冲寄存器(影子寄存器),先后写的顺序都说没有区分
但是,下面的 FT61E13x 代码,每运行一条语句,LED都会有明显的变化,NOP()是断点观察用途,已经打开了溢出更新(否则就是立即更新)
P1ADTL=255;
NOP();
P1ADTH=2;
NOP();
P1ADTH=0;
NOP();
P1ADTL=50;
NOP();
按道理,上面的代码,必须是 xxxH 已经写,并且 xxxL 已经写,然后才能更新的,而现实却是,只写 xxxH,或者只写 xxxL,PWM 在溢出后就加载了 xxxH 和 xxxL 的数据。
当然,很有可能是我理解的不对,还请有实际操作过辉芒微的PWM的大家,来指点指点,多谢 由于我们使用辉芒微的量还算是比较大的,所以,有时候我也会请教原厂的技术支持,结果每次都是:原厂通知一个代理商,代理商派一个业务过来了解情况,后面的就是不了了之了 本帖最后由 panxiaoyi 于 2023-7-27 16:30 编辑
占空比寄存器的说明如图
FMD 没什么服务的 看你上面的资料,这个应该是硬件设计的问题,硬件没有保证一次读写16位数据。资料上已经建议在新周期开始后,立即更新了。可以在周期中断中更新吧,不会有问题。 看来PWM只用8位最保险了 13x 14x 没抄好,bug挺多的。 elife 发表于 2023-7-28 16:34
看你上面的资料,这个应该是硬件设计的问题,硬件没有保证一次读写16位数据。资料上已经建议在新周期开始后 ...
是的,只能在计数溢出的中断里面去更新占空比,并且PWM的频率不能太高,以保证中断的可靠更新 控制个LED也这么费劲,片机不懂PWM,所以设计出的产品要江湖码农,经常武林大会。
PWMA_ARR = KHZ; //频率
PWMA_DTR = 10; // 死区
PWMA_CCR1 = ZKB; // 占空比=频率除2(50%对称)
这是某片结构;
战空比KHZ=PWMA_ARR /2 硬伤无解。只能软件尽量避免。原厂解决不了的问题,代理商更是无能为力。
页:
[1]