OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10847|回复: 21

用STM32的定时器3PWM输出四路不同占空比的波形,怎样随时控制开始和停止,并设定输出脉冲波的个数

[复制链接]

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2013-12-16
在线时间
0 小时
发表于 2014-2-16 11:14:29 | 显示全部楼层 |阅读模式
用TIM3输出四路波形,想要预先设定输出的脉冲个数。PWM频率为8Khz,比如通道一输出100个脉冲停止然后输出通道二,通道二输出200个然后停止输出通道三,以此类推。
该怎么实现呢?
另外我简单尝试了一下,两路输出,不计算脉冲数目看能否实现关停,使用函数 TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Disable);,但无效。。
请教各位大神指点迷津。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-2-16 14:07:14 | 显示全部楼层
回复【楼主位】超哥nb:
---------------------------------
关闭,用这种:
TIM3->CCER&=~(1<<4);    //OC2 输出关闭

统计脉冲,可以用定时器的门控模式.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2013-12-16
在线时间
0 小时
 楼主| 发表于 2014-2-16 17:35:53 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我写了程序是这样的
在main()中
                  ch1_open();
  delay_ms(1000);
  ch2_open();
  delay_ms(1000);
  ch3_open();
  delay_ms(1000);
  ch4_open();
  delay_ms(1000);
在timer.c中添加了

//开启通道一,同时关闭通道二三四
 void ch1_open(void)
  {
TIM3->CCER|=(1<<1);
TIM3->CCER&=~(1<<4);
TIM3->CCER&=~(1<<8);
TIM3->CCER&=~(1<<12);
  }
//开启通道二,同时关闭通道一三四
void ch2_open(void)
 {
TIM3->CCER&=~(1<<1);
TIM3->CCER|=(1<<4);
TIM3->CCER&=~(1<<8);
TIM3->CCER&=~(1<<12);
 }
//开启通道三,同时关闭通道一二四
void ch3_open(void)
 {
TIM3->CCER&=~(1<<1);
TIM3->CCER&=~(1<<4);
TIM3->CCER|=(1<<8);
TIM3->CCER&=~(1<<12);
 }
//开启通道四,同时关闭通道一二三
void ch4_open(void)
 {
TIM3->CCER&=~(1<<1);
TIM3->CCER&=~(1<<4);
TIM3->CCER&=~(1<<8);
TIM3->CCER|=(1<<12);
 }
能实现关断,但是时间并不对,按照设想应该是每个通道输出持续一秒然后开始下一个通道,关停四秒,但时间上并不是这样,这样写程序有问题吗?原子大哥
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-2-16 18:42:39 | 显示全部楼层
你测试是怎样的?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2013-12-16
在线时间
0 小时
 楼主| 发表于 2014-2-16 20:20:29 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
每一个通道的波形都是交替一秒出现和停止,正确的应该是间隔四秒出现一次,持续一秒吧
回复 支持 反对

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2013-12-16
在线时间
0 小时
 楼主| 发表于 2014-2-16 20:35:02 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
原子哥,另外,要想实现预先设定输出脉冲个数的话,shibushixuyao再用一个定时器?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-2-16 21:16:59 | 显示全部楼层
回复【5楼】超哥nb:
---------------------------------
我看你这代码没问题啊,呵呵
你仿真看看CCER寄存器是不是正确的值?

回复【6楼】超哥nb:
---------------------------------
是的
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2013-12-16
在线时间
0 小时
 楼主| 发表于 2014-2-17 17:42:29 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
对定时器门控模式始终没完全弄懂,如果是统计四路输出的脉冲数的话,只添加一个定时器可以吗?还是要用四个来设定?有相应代码吗?
谢谢原子哥
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-2-17 23:22:13 | 显示全部楼层
回复【8楼】超哥nb:
---------------------------------
一个定时器输出4路PWM,你是频率相同么?
频率相同就可以,但是四路的脉冲数是一样的。
说白了门控模式就是一个定时器,去控制另外一个定时器的时钟,开启或者关闭,从而控制PWM波形的个数。
所以这个被控制的定时器的4路PWM必定是一样的波形数。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2013-12-16
在线时间
0 小时
 楼主| 发表于 2014-2-18 16:20:49 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
频率是相同的,但是四路脉冲数不同,所以这样的话是不是需要多个定时器了?
有没有更简单的办法呢?假如我的频率是10KHz,第一路输出100个脉冲,那时间就是100*(1/10000),即10ms,就让它输出这个时间然后再开始第二路,以此类推,这样的做话输出的脉冲数准确吗?因为不知道怎么通过仿真统计脉冲数,所以不知道结果如何,个人觉得应该不太准确。尤其是频率更高时候。
另外:实验九例程中TIM_PWM_Init(899,0);//不分频,PWM频率=72000/900=8Khz,是不是有问题呢  不是80K吗?还是我理解有误
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-2-18 20:26:57 | 显示全部楼层
回复【10楼】超哥nb:
---------------------------------
分时复用的话,没问题,你可以一路输出完了,再去搞另外一路.
是很准的,这个我测试过.
至于例程这个确实注释有误.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2013-12-16
在线时间
0 小时
 楼主| 发表于 2014-2-19 09:30:27 | 显示全部楼层
回复【11楼】正点原子:
---------------------------------
但是72000/900=80Khz这是没有错的啊 ,就是72Mhz除以(899+1)对吧,如果8Khz也没错,那是我理解的不对吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-2-19 14:13:09 | 显示全部楼层
回复【12楼】超哥nb:
---------------------------------
我说是我的备注有误,实际是80Khz,被我备注成8Khz了...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2013-12-16
在线时间
0 小时
 楼主| 发表于 2014-2-19 15:02:54 | 显示全部楼层
回复【13楼】正点原子:
---------------------------------
好的,谢谢原子哥了
回复 支持 反对

使用道具 举报

13

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2014-2-21
在线时间
7 小时
发表于 2014-2-22 15:25:50 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
原子哥,有门控模式的例子吗?我要统计五路输出的脉冲数,频率不同,怎么办啊?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-2-22 17:52:55 | 显示全部楼层
我在论坛发过了。
你搜索下,不过你要5路,不好做了。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2013-12-16
在线时间
0 小时
 楼主| 发表于 2014-3-20 11:20:48 | 显示全部楼层
回复【2楼】正点原子:
-------------------------
原子哥ADC那个例程中如果想要在不解外部电压时液晶屏显示时数为0,而不是在3V左右跳变,该怎么做,我把VDDA和REF+之间跳线帽拿掉不起作用,ADC和TPAD之间跳线帽拿掉也不起作用
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-3-20 18:12:42 | 显示全部楼层
回复【17楼】超哥nb:
---------------------------------
接100K的下拉电阻到GND。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2013-12-16
在线时间
0 小时
 楼主| 发表于 2014-3-21 10:30:10 | 显示全部楼层
回复【18楼】正点原子:
---------------------------------
这个。。要怎么接呢?不太会啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-3-21 14:12:33 | 显示全部楼层
回复【19楼】超哥nb:
---------------------------------
找个懂电路的帮你下。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

13

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2014-2-21
在线时间
7 小时
发表于 2014-3-24 15:22:02 | 显示全部楼层
回复【11楼】正点原子:
---------------------------------
原子哥,如果将【8楼】所说的这种用delay()来控制脉冲数的方法用于多线程的UCOSII环境中还准确吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2014-3-24 19:25:21 | 显示全部楼层
回复【21楼】SSSA:
---------------------------------
你可以用定时器。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-13 06:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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