找回密码
 立即注册
查看: 27|回复: 8

AI8H1K28 用PWMB 驱动WS2812, 单脉冲停止后是否可以自动输出低电平或空闲电平

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2026-03-31 11:48:31

2

主题

7

回帖

50

积分

注册会员

积分
50
发表于 前天 16:19 | 显示全部楼层 |阅读模式
1. 采用MCU为AI8H1K28-TSSOP20.
2. 因改款原因, 只能使用P1.7、P5.4、P3.3三个引脚里的一个引脚驱动WS2812炫彩灯带,目前采用P1.7引脚, PWM5_2

3. 因WS2812时序要求,0码高电平需要大于0.3us, 1码高电平需要大于0.9us。
4. 目前采用PWM模式1,单脉冲模式。
5. 现在所遇问题:PWM单次启动停止后,引脚输出为高电平,因装载下1bit数据需要时间,导致再次启动PWM输出时,高电平时长增加。
6. 逻辑分析仪抓取的波形如下:
7. PWMB初始化代码如下:

8. 验证PWM输出到相关代码如下:

逻辑分析仪抓到的波形

逻辑分析仪抓到的波形

PWM初始化代码

PWM初始化代码

验证PWM输出代码

验证PWM输出代码
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:651
  • 最近打卡:2026-03-31 10:58:01
已绑定手机

52

主题

2527

回帖

8888

积分

论坛元老

积分
8888
发表于 前天 16:33 | 显示全部楼层
正常修改有效电平就可以
截图202603301631392873.jpg

当设置低电平有效时:
截图202603301632255968.jpg

当设置高电平有效时:
截图202603301632567325.jpg
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2026-03-31 11:48:31

2

主题

7

回帖

50

积分

注册会员

积分
50
发表于 前天 16:39 | 显示全部楼层
只是反向输出了哦, 这个并不是我们想要的效果哦。
我们需要停止时(单脉冲结束后)低电平; CNT<CCR时高电平;CNT>=CCR时低电平。

辛苦帮忙看看, 是否还有其它办法? 感谢
截图202603301638091226.jpg
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2026-03-31 11:48:31

2

主题

7

回帖

50

积分

注册会员

积分
50
发表于 前天 16:48 | 显示全部楼层
我们也尝试过反向输出, 和PWM模式2类似。 等效于每一个数据位输出是 先输出低电平波形、再输出高电平波形。而这和WS2812要求的时序不相吻合。

反向+延时输出 可以解决,约170us可以发送完毕5个灯珠的波形。
发送期间关闭了中断,因此会导致115200bps波特率的串口丢字节的可能性(假设串口硬件无超过2个字节的FIFO的话)。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:651
  • 最近打卡:2026-03-31 10:58:01
已绑定手机

52

主题

2527

回帖

8888

积分

论坛元老

积分
8888
发表于 前天 17:05 | 显示全部楼层
可参考这个帖子的设置,8H1K28没有DMA,将其中的DMA功能去掉

PWM-DMA 驱动 WS2812彩灯@Ai8051U,最多1365个灯同时, 32K SRAM
https://www.stcaimcu.com/thread-10850-1-1.html
(出处: 国芯人工智能技术交流网站)
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2026-03-31 11:48:31

2

主题

7

回帖

50

积分

注册会员

积分
50
发表于 前天 17:31 | 显示全部楼层
请问AI8H1K28的 PWMA 是否可以实现 停止时(单脉冲结束后)低电平; CNT<CCR时高电平;CNT>=CCR时低电平。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2026-03-31 11:48:31

2

主题

7

回帖

50

积分

注册会员

积分
50
发表于 前天 17:46 | 显示全部楼层
PWMB5_2, 采用反向输出+延时,输出5个灯珠的波形,并确保0码和1码的周期满足1.2us以上,则整体发送时间为215us.  如果同时串口接收数据的话, 可能会丢失2个字节。
截图202603301746128057.jpg
截图202603301746502564.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:651
  • 最近打卡:2026-03-31 10:58:01
已绑定手机

52

主题

2527

回帖

8888

积分

论坛元老

积分
8888
发表于 昨天 10:58 | 显示全部楼层
5楼帖子里面例子的处理方法是:
鉴于PWM的特点,在发数据前先发一个占空比为0的周期,最后也发一个占空比为0的周期(发送完后连续输出低电平)。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2026-03-31 11:48:31

2

主题

7

回帖

50

积分

注册会员

积分
50
发表于 昨天 11:48 | 显示全部楼层
需求已解决。
采用PWM4P 输出, 波形发送耗时为145us,   1.2*5*24=144us, 基本无浪费多余时间。
驱动WS2812要点:采用预加载,PWM模式1,循环输出,设置死区时间,本次发送前先发送1次占空比为0的波形,最后再发送1次占空比为0的波形。
感谢陈工的指点,希望可以帮助后来人
截图202603311144302991.jpg
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-4-1 03:39 , Processed in 0.120177 second(s), 77 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表