打印
[国产单片机]

辉芒微全系列的 PWM 占空比更新的问题请教

[复制链接]
1530|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

就是辉芒微全系列的 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:52 | 只看该作者
本帖最后由 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();



使用特权

评论回复
板凳
panxiaoyi|  楼主 | 2023-7-27 15:58 | 只看该作者
按道理,上面的代码,必须是 xxxH 已经写,并且 xxxL 已经写,然后才能更新的,而现实却是,只写 xxxH,或者只写 xxxL,PWM 在溢出后就加载了 xxxH 和 xxxL 的数据。
当然,很有可能是我理解的不对,还请有实际操作过辉芒微的PWM的大家,来指点指点,多谢

使用特权

评论回复
地板
panxiaoyi|  楼主 | 2023-7-27 16:03 | 只看该作者
由于我们使用辉芒微的量还算是比较大的,所以,有时候我也会请教原厂的技术支持,结果每次都是:原厂通知一个代理商,代理商派一个业务过来了解情况,后面的就是不了了之了

使用特权

评论回复
5
panxiaoyi|  楼主 | 2023-7-27 16:25 | 只看该作者
本帖最后由 panxiaoyi 于 2023-7-27 16:30 编辑

占空比寄存器的说明如图

微信截图_20230727162406.png (421.02 KB )

微信截图_20230727162406.png

微信截图_20230727162917.png (246.36 KB )

微信截图_20230727162917.png

使用特权

评论回复
6
rgjinxuan| | 2023-7-28 13:50 | 只看该作者
FMD 没什么服务的

使用特权

评论回复
7
elife| | 2023-7-28 16:34 | 只看该作者
看你上面的资料,这个应该是硬件设计的问题,硬件没有保证一次读写16位数据。资料上已经建议在新周期开始后,立即更新了。可以在周期中断中更新吧,不会有问题。

使用特权

评论回复
8
DanPianJiFangAn| | 2023-7-28 18:49 | 只看该作者
看来PWM只用8位最保险了

使用特权

评论回复
9
kkstun| | 2023-7-29 11:15 | 只看该作者
13x 14x 没抄好,bug挺多的。

使用特权

评论回复
10
panxiaoyi|  楼主 | 2023-7-31 19:54 | 只看该作者
elife 发表于 2023-7-28 16:34
看你上面的资料,这个应该是硬件设计的问题,硬件没有保证一次读写16位数据。资料上已经建议在新周期开始后 ...

是的,只能在计数溢出的中断里面去更新占空比,并且PWM的频率不能太高,以保证中断的可靠更新

使用特权

评论回复
11
mwxpk| | 2023-8-1 10:50 | 只看该作者
控制个LED也这么费劲,片机不懂PWM,所以设计出的产品要江湖码农,经常武林大会。
        PWMA_ARR    = KHZ;          //频率
        PWMA_DTR    = 10;                  // 死区
        PWMA_CCR1   = ZKB;                // 占空比=频率除2(50%对称)
      这是某片结构;

       战空比KHZ=PWMA_ARR /2   

使用特权

评论回复
12
lrhsx33| | 2023-8-3 10:51 | 只看该作者
硬伤无解。  只能软件尽量避免。  原厂解决不了的问题,代理商更是无能为力。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

49

主题

393

帖子

2

粉丝