0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

JL杰理AC696N开发板PWM波形生成与控制(1):频率、占空比

李杰 来源:jf_74684824 作者:jf_74684824 2026-04-03 13:39 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

引言

PWM这玩意儿,做调光、调速、甚至模拟音频都离不开。JL杰理AC696N的定时器自带PWM输出功能,配置起来不算复杂,但真要调出稳定的波形,有几个坑是绕不开的。比如初始化的时候LED会闪一下、占空比设0反而输出一个高电平、想换个引脚输出还得搞清楚通道映射。之前在AC696N开发板上调PWM驱动呼吸灯和电机,把这些小问题都踩了一遍,整理出来方便后面用的时候直接抄。

PWM常用于控制灯光亮度、电机速度等。JL杰理AC696N芯片的定时器支持灵活的PWM输出。

PWM的核心参数是频率和占空比。

wKgZO2nPUoeACJtrAAAMZndDLCU05.webp

如图,高电平的时间(1ms) + 低电平的时间(3ms) = 4ms(一个周期)

频率 = 1s / 4ms = 250HZ

高电平时间 / 一个周期时间 = 1ms / 4ms = 25%(占空比)

使用timer_pwm_init函数可以初始化指定定时器产生PWM。需要传入定时器(如JL_TIMER3)、频率(Hz)、初始占空比(0-10000对应0-100%)和输出引脚。

每个定时器有对应的硬件引脚,也可通过通道映射(如CH2_T3_PWM_OUT)输出到其他引脚,但需注意避免IO冲突和定时器被系统占用(如TIMER1、TIMER2)。

常见问题包括:

初始化时LED闪烁,可通过先设置周期和占空比再开启计数模式解决;

wKgZPGnPUoeAV-U2AAA2pkjcOYI73.webp

占空比设为0时可能出现一个周期的高电平,需调整寄存器操作顺序;

void set_timer_pwm_duty(JL_TIMER_TypeDef *JL_TIMERx, u32 duty) { if(duty == 0){ if(JL_TIMERx->PWM == 0){ return; } //计时标志,进来此函数前PB3已经设置为高电平,PB3部分控制可省略 JL_PORTB->OUT &= ~BIT(3); /*周期内低电平时期进入此函数,强制延长半个到一个周期等下一个周期下降沿再触发, 防止一个周期最后1us左右时间触发此函数导致的程序执行时间不够导致极短时间的高电平*/ if(JL_TIMERx->CNT > JL_TIMERx->PWM){ while(JL_TIMERx->CNT > JL_TIMERx->PWM){ delay(1); } while(JL_TIMERx->CNT < JL_TIMERx- >PWM){ delay(1); } } //周期内高电平时间进入此函数,等周期内低电平时间触发 while(JL_TIMERx->CNT < JL_TIMERx- >PWM){ delay(1); } //关闭PWM波形 JL_TIMERx->CON &= ~BIT(8); //时间标志 JL_PORTB->OUT |= BIT(3); } else{ //开启PWM JL_TIMERx->CON |= BIT(8); } JL_TIMERx->PWM = (JL_TIMERx->PRD * duty) / 10000; //0~10000对应0~100% //时间标志 JL_PORTB->OUT &= ~BIT(3); } void timer_pwm_test(void) { //PB3为了计时设置,可以去掉 gpio_set_pull_down(IO_PORTB_03,0); gpio_set_pull_up(IO_PORTB_03,0); gpio_set_direction(IO_PORTB_03,0); timer_pwm_init(JL_TIMER3, 100000, 2000, IO_PORTB_05, 0); } //测试按键消息 case KEY_SET_PWM: log_info("KEY_SET_PWMn"); static int pwm_flag = 0; JL_PORTB->OUT |= BIT(3); if(pwm_flag){ set_timer_pwm_duty(JL_TIMER3,0); pwm_flag = 0; } else{ set_timer_pwm_duty(JL_TIMER3,5000); pwm_flag = 1; } break;

问题波形1(占空比变为0时1周期的高电平):

wKgZO2nPUoeAWyzUAAAe6GIhv6Y03.webp

问题波形2(周期末尾操作寄存器执行时间不够导致波形顺延到下周期才执行):

wKgZPGnPUoiAPRfTAAAi_Ew8hgg16.webp

以及操作寄存器时机不当导致波形顺延。

理解时钟源选择(系统时钟或晶振时钟)对产生高频率PWM也至关重要。

总结

PWM配置看着简单,但细节决定成败。

定时器别跟系统冲突,TIMER1和TIMER2通常被系统占用,建议用TIMER3及以后的。

初始化顺序很重要,先配周期和占空比,再开计数,不然会看到一个意外的脉冲。占空比从0到10000对应0%到100%,想设50%就写5000。

如果需要高频率输出(比如几十kHz以上),时钟源选系统时钟,别选晶振时钟,频率上限更高。

建议在AC696N开发板上先用示波器把基础波形抓出来,确认频率和占空比都对得上,再往实际应用里套,省得后面调半天分不清是代码问题还是硬件问题。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PWM
    PWM
    +关注

    关注

    116

    文章

    5894

    浏览量

    226555
  • 开发板
    +关注

    关注

    26

    文章

    6419

    浏览量

    120793
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用JLAC696N开发板实现PC模式下读取外挂SPI Flash虚拟为U盘的具体案例操作说明_V1.0

    、Flash参数及USB模式。具体宏定义请参考资料包中的示例工程。 三、使用流程:通过USB拷贝MP3文件 步骤1:编译与烧录 完成上述配置后,编译固件并烧录到 JL
    发表于 04-18 00:04

    JLAC696N开发板PWM波形生成控制(2):问题排查

    AC696N上都有对应的解决办法。刚用AC696N开发板PWM的时候把这些坑都踩了一遍,把问题现象和解决方案整理出来,方便遇到类似情况时快速定位。
    发表于 04-07 14:07

    JLAC696N开发板做存储设备适配(1):SD/TF卡与MMC卡的基础配置与兼容

    JLAC696N开发板做存储设备适配(1):SD/TF卡与MMC卡的基础配置与兼容 引言 做
    发表于 04-06 19:31

    JLAC696N开发板PWM波形生成控制(2):问题排查

    JLAC696N开发板PWM波形
    发表于 04-05 23:45

    JLAC696N开发板PWM波形生成控制(1):频率占空比配置

    32-JLAC696N开发板PWM波形
    发表于 04-03 21:44

    JLAC696N系列开发GPIO控制大全:模式、API与特殊引脚

    JLAC696N系列开发GPIO控制大全:模式、API与特殊引脚 引言 GPIO配置看着简单
    发表于 04-02 21:21

    JLAC696N系列芯片SPI接口实战:驱动Flash、LCD与RGB灯

    文章阐述了,AC696N系列芯片功能:驱动Flash、LCD、RGB等。AC696N开发板支持SPI主机模式,可轻松驱动这种类型外设。
    的头像 发表于 04-01 17:49 1188次阅读
    <b class='flag-5'>JL</b><b class='flag-5'>杰</b><b class='flag-5'>理</b><b class='flag-5'>AC696N</b>系列芯片SPI接口实战:驱动Flash、LCD与RGB灯

    JLAC696N开发板引脚速查:AC6966B开发板关键接口连接图

    硬件开发,引脚定义是“地图”。本文将JLAC696N开发板的核心引脚连接以图表形式清晰呈现
    发表于 04-01 09:52

    JLAC696N系列芯片开发UART串口应用宝典:打印、调音与通信Demo

    本文阐述了关于AC696N系列芯片开发UART串口应用:打印、调音、通信Demo,能够为大家对AC696N系列芯片做串口类方案时的一个小
    的头像 发表于 03-31 10:00 453次阅读
    <b class='flag-5'>JL</b><b class='flag-5'>杰</b><b class='flag-5'>理</b><b class='flag-5'>AC696N</b>系列芯片<b class='flag-5'>开发</b>UART串口应用宝典:打印、调音与通信Demo

    JLAC696N开发之定时器系统全解析:sys_timer与usr_timer的应用

    做蓝牙音频或IoT嵌入式开发,定时器用不好是真要命——回调睡过头、中断里卡死、低功耗唤醒乱套……这些坑估计不少人都踩过。 最近在整理总结JL A
    发表于 03-31 09:53

    JLAC696N系列芯片开发经验:芯片复位与唤醒源深度解析

    简介 做低功耗产品,最头疼的就是两个问题:一是设备无缘无故重启了,找不到原因;二是睡眠之后唤不醒,或者误唤醒导致功耗居高不下。 JLAC696N这个系列的芯片在蓝牙耳机、音箱、Io
    发表于 03-28 10:57

    JLAC696N开发板电源管理精要:提高内核电压与长按复位配置

    本文简易阐述了JLAC696N开发板电源管理模块的信息。
    的头像 发表于 03-28 10:54 326次阅读
    <b class='flag-5'>JL</b><b class='flag-5'>杰</b><b class='flag-5'>理</b><b class='flag-5'>AC696N</b><b class='flag-5'>开发板</b>电源管理精要:提高内核电压与长按复位配置

    AC6966B开发板开发准备-环境搭建:Windows下JLAC696N开发环境配置

    做蓝牙音频、音箱或IoT产品的开发,最怕的不是写代码,而是环境配半天跑不起来。JLAC696N这颗芯片在耳机、音箱方案里很常见,性价比高
    的头像 发表于 03-28 09:52 381次阅读
    <b class='flag-5'>AC</b>6966B<b class='flag-5'>开发板</b><b class='flag-5'>开发</b>准备-环境搭建:Windows下<b class='flag-5'>JL</b><b class='flag-5'>杰</b><b class='flag-5'>理</b><b class='flag-5'>AC696N</b><b class='flag-5'>开发</b>环境配置

    蓝牙音频产品开发,五分钟上手:从AC696N开发板出厂直观的功能体验开始

    无需编写一行代码,JLAC696N开发板出厂程序已集成了完整的多媒体功能。通过几个按键,快速体验它的所有功能和强大。 “蓝牙模式” “音
    发表于 03-24 23:49

    JLAC696N开发板引脚速查:AC6966B开发板关键接口连接图

    硬件开发,引脚定义是“地图”。本文将JLAC696N开发板的核心引脚连接以图表形式清晰呈现
    发表于 03-23 21:21