完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
请问在pwm中调整下一个周期的占空比的问题。我现在用timer4的第二通道产生pwm,利用预装载功能,在每个pwm更新周期前设置下一个周期的占空比,但好像临停止的时候(脉冲流的尾段)会送多一个到两个错误的脉冲。请帮忙看看是什么问题。代码是这样的: ...... ...... if (buff[t]&0x08) TIM4->CCR2=50; else TIM4->CCR2=130; //(A处) while (!(TIM4->SR&1)) ; TIM4->SR&=~1; //清除更新事件标志 if (buff[t]&0x04) TIM4->CCR2=50; else TIM4->CCR2=130; //(B处) //这里不等A处设置的pwm时间周期结束,就直接再写入新的参数,利用预装载功能 while (!(TIM4->SR&1)) ; //检查更新事件。这里等待的是A处设置的pwm时间周期结束 TIM4->SR&=~1; if (buff[t]&0x02) TIM4->CCR2=50; else TIM4->CCR2=130; //(C处) while (!(TIM4->SR&1)) ; TIM4->SR&=~1; if (buff[t]&0x01) TIM4->CCR2=50; else TIM4->CCR2=130; //(D处) while (!(TIM4->SR&1)) ; //这里等待的是C处设置的pwm时间周期结束 TIM4->SR&=~1; //D处设置的pwm时间周期这时还没有结束 } TIM4->CR1|=1<<3; //到最后了,改单脉冲模式,这个脉冲结束时,定时器自动停止。但这里好像会送多一到两个错误脉冲出去。
或者有否其他更好的处理方面? 请帮忙。 谢谢。 |
|
相关推荐
4个回答
|
|
你这样的做法,貌似不靠谱.
当你检查到更新的时候,并不是立即更新的,while,赋值,都需要时间,这个期间,可能PWM的下一个周期已经开始输出了,然后你又修改CCR2的值,导致输出脉冲不正确. |
|
|
|
那怎搞嘛?
|
|
|
|
我那里检查更新是检查前一个pwm周期是不是结束,见代码的第5行。我是想用那个预装载功能,即是我现在赋的值要等前一个pwm周期完成后,在更新周期时才装入,我就在前一个pwm周期还没结束时(前一个pwm周期的期间),再赋一个新的值给它。等它下次更新周期时拿这个值。
另外,速度很高,1uS级别的。 |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1614 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1541 浏览 1 评论
970 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
682 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1592 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 01:22 , Processed in 0.583687 second(s), Total 55, Slave 47 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号