JL杰理AC696N开发板PWM波形生成与控制(1):频率、占空比
引言PWM这玩意儿做调光、调速、甚至模拟音频都离不开。JL杰理AC696N的定时器自带PWM输出功能配置起来不算复杂但真要调出稳定的波形有几个坑是绕不开的。比如初始化的时候LED会闪一下、占空比设0反而输出一个高电平、想换个引脚输出还得搞清楚通道映射。之前在AC696N开发板上调PWM驱动呼吸灯和电机把这些小问题都踩了一遍整理出来方便后面用的时候直接抄。PWM常用于控制灯光亮度、电机速度等。JL杰理AC696N芯片的定时器支持灵活的PWM输出。PWM的核心参数是频率和占空比。如图高电平的时间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闪烁可通过先设置周期和占空比再开启计数模式解决占空比设为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_PWM\n); 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周期的高电平问题波形2周期末尾操作寄存器执行时间不够导致波形顺延到下周期才执行以及操作寄存器时机不当导致波形顺延。理解时钟源选择系统时钟或晶振时钟对产生高频率PWM也至关重要。总结PWM配置看着简单但细节决定成败。定时器别跟系统冲突TIMER1和TIMER2通常被系统占用建议用TIMER3及以后的。初始化顺序很重要先配周期和占空比再开计数不然会看到一个意外的脉冲。占空比从0到10000对应0%到100%想设50%就写5000。如果需要高频率输出比如几十kHz以上时钟源选系统时钟别选晶振时钟频率上限更高。建议在AC696N开发板上先用示波器把基础波形抓出来确认频率和占空比都对得上再往实际应用里套省得后面调半天分不清是代码问题还是硬件问题。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2483461.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!