8770|7

18

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

STM32输出精确个PWM波形 [复制链接]

本帖最后由 Tristan.Wu 于 2015-9-1 16:15 编辑 最近涉及到一个超声波测距的项目,测距开始时需要触发指定个数的方波。此为背景。 在网上搜集了相关资料,有以下几个思路供参考: 1、最直观的
  1. while(pulsecnt--)
  2. {
  3. for(;;);//delay up to the frequency
  4. Pin_ON();
  5. for(;;);
  6. Pin_OFF();
  7. }
复制代码
2、如果你的timer有RCR,那就好办了。看ST参考手册的解释:
If the repetition counter is used, the update event (UEV) is generated after upcounting is repeated for the number of times programmed in the repetition counter register (TIMx_RCR). Else the update event is generated at each counter overflow.[/quote] 用此方法需要考虑到RCR只有8位,以及PWM的edge-aligned and center-aligned模式:
Each time the REP_CNT related downcounter reaches zero, an update event is generated and it restarts counting from REP value. As REP_CNT is reloaded with REP value only at the repetition update event U_RC, any write to the TIMx_RCR register is not taken in account until the next repetition update event. It means in PWM mode (REP+1) corresponds to: – the number of PWM periods in edge-aligned mode – the number of half PWM period in center-aligned mode.
3、DMA方式送数。 将DMA与Tim的CCR绑定,通过控制DMA的数据数量,输出同等数量的波形,该方式有以下优缺点: 优点:PWM的脉冲宽度控制较为灵活,可事先将脉冲宽度写入DMA的传输Buffer中; 缺点:PWM的周期控制可能会不那么准确,因为DMA传输的触发到传输完成需要一定时间; 4、利用Timer之间的同步: [quote]Configure Timer 1 in master mode so that it outputs a periodic trigger signal on each update event UEV. If you write MMS=010 in the TIM1_CR2 register, a rising edge is output on TRGO1 each time an update event is generated. • To connect the TRGO1 output of Timer 1 to Timer 2, Timer 2 must be configured in slave mode using ITR1 as internal trigger. You select this through the TS bits in the TIM2_SMCR register (writing TS=000). • Then the Timer2's slave mode controller should be configured in external clock mode 1 (write SMS=111 in the TIM2_SMCR register). This causes Timer 2 to be clocked by the rising edge of the periodic Timer 1 trigger signal (which correspond to the timer 1 counter overflow). • Finally both timers must be enabled by setting their respective CEN bits within their respective TIMx_CR1 registers. Make sure to enable Timer2 before enabling Timer1.
Tim1负责PWM输出,Tim2控制脉冲数。Tim1、Tim2设置好后,给Tim2的ARR设置为 PulseCnt-1 以及为Tim2的Update事件设置中断,在中断服务程序中关闭Tim以完成PulseCnt脉冲的发送。 Note: 1、Tim1设置为PWM mode 2,避免在结束输出时Tim1多输出一个脉冲; 2、代码着重说明Tim的配置,若用此方法需要结合应用增添相应代码。 代码:
  1. TIM1->CR2 |= TIM_CR2_MMS_1;
  2. TIM2->SMCR |= TIM_SMCR_SMS_2 | TIM_SMCR_SMS_1 | TIM_SMCR_SMS_0;
  3. TIM1->PSC = 47999;
  4. TIM1->ARR = 999;
  5. TIM2->ARR = PulseCnt-1;
  6. TIM1->CR1 |= TIM_CR1_CEN;
  7. TIM2->CR1 |= TIM_CR1_CEN;
复制代码
以上是个人通过学习相关资料所做的总结,如有不当之处,欢迎拍砖。 PS. 几个链接: https://bbs.eeworld.com.cn/thread-252318-1-1.htmlhttp://www.amobbs.com/thread-5509627-1-1.html http://www.stmcu.org/module/forum/thread-559739-1-1.html PPS.几次想上传图片,以便更好说明问题,为什么总是失败,是我公司网络问题,还是Server的问题?PPPS.在这个位置贴的链接也会丢失,不知道是什么问题。
此帖出自stm32/stm8论坛

最新回复

不错,谢谢分享!!  详情 回复 发表于 2018-10-21 13:54
点赞 关注(2)
 

回复
举报

9185

帖子

6

TA的资源

管理员

沙发
 
你好,是如下图这样操作上传图片的吗?



此帖出自stm32/stm8论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
eric_wang 发表于 2015-9-1 15:42
你好,是如下图这样操作上传图片的吗?

是的!
此帖出自stm32/stm8论坛
 
 

回复

4008

帖子

0

TA的资源

版主

4
 
本帖最后由 huo_hu 于 2015-9-1 21:43 编辑

不用那么麻烦,每个pwm周期就是定时器的溢出,在定时器的溢出中断里计数然后再更新通道值就行了.
此帖出自stm32/stm8论坛
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

5
 
huo_hu 发表于 2015-9-1 21:42
不用那么麻烦,每个pwm周期就是定时器的溢出,在定时器的溢出中断里计数然后再更新通道值就行了.

这样实现确实很简单,但主要考虑到中断过于频繁会影响MCU处理性能。
此帖出自stm32/stm8论坛

点评

是的,200K以上用方法一,它的限制是每周期占空比固定. 不知道你关于压电陶瓷的阻尼特性做实验了没有,恐怕不是说停就能停的.  详情 回复 发表于 2015-9-2 17:07
 
 
 

回复

4008

帖子

0

TA的资源

版主

6
 
Tristan.Wu 发表于 2015-9-2 09:18
这样实现确实很简单,但主要考虑到中断过于频繁会影响MCU处理性能。

是的,200K以上用方法一,它的限制是每周期占空比固定.
不知道你关于压电陶瓷的阻尼特性做实验了没有,恐怕不是说停就能停的.
此帖出自stm32/stm8论坛
 
 
 

回复

32

帖子

0

TA的资源

一粒金砂(中级)

7
 

Tristan.Wu 发表于 2015-9-2 09:18
这样实现确实很简单,但主要考虑到中断过于频繁会影响MCU处理性能。

是的,200K以上用方法一,它的限制是每周期占空比固定.
不知道你关于压电陶瓷的阻尼特性做实验了没有,恐怕不是说停就能停的.
Tristan.Wu 发表于 2015-9-2 09:18
这样实现确实很简单,但主要考虑到中断过于频繁会影响MCU处理性能。

是的,200K以上用方法一,它的限制是每周期占空比固定.
不知道你关于压电陶瓷的阻尼特性做实验了没有,恐怕不是说停就能停的.
此帖出自stm32/stm8论坛
 
 
 

回复

10

帖子

2

TA的资源

一粒金砂(初级)

8
 
不错,谢谢分享!!
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表