OpenEdv-开源电子网

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

应群友:spwm+dma【可控pwm周期,spwm周期及个数】

[复制链接]

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
发表于 2019-7-31 18:51:53 | 显示全部楼层 |阅读模式
本帖最后由 nashui_sx 于 2019-8-5 13:26 编辑

0.stm32f103c8t6  PA6输出波形
1.正弦波序列自动生成
  1. //产生正弦波函序列
  2. void TIM3_Spwm_Creat_Buf(void)
  3. {
  4.     u32 i;
  5.     float inc=2*PI/TIM3_Spwm_Buf_Size;        //计算增量

  6.     for(i=0;i<TIM3_Spwm_Buf_Size;i++)
  7.     {
  8.         TIM3_Spwm_Buf[i]=(u16)(TIM3_Spwm_Buf_Zhouqi/2*(1+sin(inc*i))+0.5);    //得到一个0-TIM3_Spwm_Buf_Zhouqi的正弦波控制spwm  +0.5是为了最大值能够达到TIM3_Spwm_Buf_Zhouqi 最小能到0
  9.         printf("%d\r\n",TIM3_Spwm_Buf[i]);
  10.     }  
  11. }
复制代码

2.pwm周期+spwm点数控制spwm周期
  1. #define TIM3_Spwm_Buf_Size  100   //pwm周期*spwm点数=TIM3_Spwm_Buf_Zhouqi*TIM3_Spwm_Buf_Size=spwm周期
  2.                                                      //TIM3_Spwm_Init(TIM3_Spwm_Buf_Zhouqi-1,71);
  3.                                                      //spwm周期=1000*72/72000000*100=100ms
  4. #define TIM3_Spwm_Buf_Zhouqi 1000 //pwm周期控制 psc TIM_Prescaler =71时候代表1000us
复制代码


3.为了输出可控spwm周期数(整周期)开启了dma完成中断  中断内统计周期个数,个数到了关闭定时器输出pwm  需要一直输出的,可以删掉中断相关代码

4.测试如下
  1. TIM3_Spwm_Out(TIM3_Spwm_Buf_Zhouqi-1,71,2);//spwm周期=1000*72/72000000*100=100ms 2个spwm周期  
复制代码

111.png

5.源码(注意 例子是产生两个周期,测量的时候:下载完成--按住复位--开示波器或者逻辑分析仪+松复位抓数据;不然运行一会两个周期过了,肯定没波形  或者自己改输出多点周期)
spwm dma 可控pwm周期,SPWM周期及个数.rar (286.6 KB, 下载次数: 1011)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
 楼主| 发表于 2020-12-21 21:14:25 | 显示全部楼层
双规导航 发表于 2020-11-17 11:02
我要做一个两相四线步进电机驱动器需要四路SPWM波驱动 drv8432
DMA1 通道3 对应的是TIM3-UP吗?
如果我要 ...

你这个dma1表你也看到了,不冲突的一个定时器的只能同时3个通道用dma,频率不高可以用输出比较模式较好,或者看看dma2的定时器能不能同时用4个通道
输出比较模式我也发过
回复 支持 0 反对 1

使用道具 举报

0

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
267
金钱
267
注册时间
2018-12-2
在线时间
76 小时
发表于 2019-11-4 16:05:08 | 显示全部楼层
大佬,可否有群,想进群交流交流
回复 支持 反对

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
 楼主| 发表于 2019-11-4 16:58:02 | 显示全部楼层
yenhok 发表于 2019-11-4 16:05
大佬,可否有群,想进群交流交流

好几个粉丝群我都在
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2019-7-19
在线时间
12 小时
发表于 2020-5-26 09:44:24 | 显示全部楼层
您好,可否问一下这个程序是在哪一块给定时器3的通道给比较器的值的,另外DMA的话传输话不应该是一一对应的吗,TIM3的通道1看手册并不是和DMA1的通道3对应,所以想请教一下您这块怎么写的
回复 支持 反对

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
 楼主| 发表于 2020-5-26 16:07:41 | 显示全部楼层
模拟电路 发表于 2020-5-26 09:44
您好,可否问一下这个程序是在哪一块给定时器3的通道给比较器的值的,另外DMA的话传输话不应该是一一对应的 ...

1.dma设置的定时器的输出比较值
2.dma里面的通道是触发源 的意思  定时器3 有5个触发源  分别在dma1 通道2  通道3*2  通道*2
3.例子用的是DMA1_Channel3  TIM_DMACmd(TIM3, TIM_DMA_Update, ENABLE);  也就是溢出的时候触发dma  写入下次的比较值
回复 支持 反对

使用道具 举报

21

主题

217

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2121
金钱
2121
注册时间
2017-12-11
在线时间
459 小时
发表于 2020-7-18 13:49:53 | 显示全部楼层
感谢楼主分享!
回复 支持 反对

使用道具 举报

11

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
305
金钱
305
注册时间
2015-6-27
在线时间
60 小时
发表于 2020-11-4 10:03:41 | 显示全部楼层
谢谢楼主
回复 支持 反对

使用道具 举报

11

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
305
金钱
305
注册时间
2015-6-27
在线时间
60 小时
发表于 2020-11-10 14:01:35 | 显示全部楼层
本帖最后由 双规导航 于 2020-11-10 14:08 编辑

请问一下上位机的串口要发送怎么样的数据包
回复 支持 反对

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
 楼主| 发表于 2020-11-10 15:10:30 | 显示全部楼层
双规导航 发表于 2020-11-10 14:01
请问一下上位机的串口要发送怎么样的数据包

????????????????
回复 支持 反对

使用道具 举报

11

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
305
金钱
305
注册时间
2015-6-27
在线时间
60 小时
发表于 2020-11-10 18:00:47 | 显示全部楼层
nashui_sx 发表于 2020-11-10 15:10
????????????????

程序下载到stm32f103c8t6芯片里面PA6引脚没有波形输出,是不是要上位机串口发送什么数据包芯片PA6引脚才有波形输出呀。
微信截图_20201110175055.png
回复 支持 反对

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
 楼主| 发表于 2020-11-10 18:16:52 | 显示全部楼层
双规导航 发表于 2020-11-10 18:00
程序下载到stm32f103c8t6芯片里面PA6引脚没有波形输出,是不是要上位机串口发送什么数据包芯片PA6引脚才 ...

不需要,
看帖子第5条
5.源码(注意 例子是产生两个周期,测量的时候:下载完成--按住复位--开示波器或者逻辑分析仪+松复位抓数据;不然运行一会两个周期过了,肯定没波形  或者自己改输出多点周期)
回复 支持 反对

使用道具 举报

11

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
305
金钱
305
注册时间
2015-6-27
在线时间
60 小时
发表于 2020-11-10 18:47:54 | 显示全部楼层
nashui_sx 发表于 2020-11-10 18:16
不需要,
看帖子第5条
5.源码(注意 例子是产生两个周期,测量的时候:下载完成--按住复位--开示波器或 ...

谢谢抓到波形了
回复 支持 反对

使用道具 举报

11

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
305
金钱
305
注册时间
2015-6-27
在线时间
60 小时
发表于 2020-11-17 11:02:09 | 显示全部楼层
本帖最后由 双规导航 于 2020-11-18 16:11 编辑

我要做一个两相四线步进电机驱动器需要四路SPWM波驱动 drv8432
DMA1 通道3 对应的是TIM3-UP吗?
如果我要开启四路PWM  怎么用DMA1通道去传输数据
微信截图_20201117105147.png
微信截图_20201117105213.png
微信截图_20201117105232.png
微信截图_20201117105330.png
微信截图_20201117110545.png
回复 支持 反对

使用道具 举报

11

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
305
金钱
305
注册时间
2015-6-27
在线时间
60 小时
发表于 2020-12-19 17:59:53 | 显示全部楼层
大神请问一下怎么把SPWM的占空比控制在一个合理的范围 让它整体的占空比不高于90%不低于10%
回复 支持 反对

使用道具 举报

11

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
305
金钱
305
注册时间
2015-6-27
在线时间
60 小时
发表于 2020-12-19 18:02:02 | 显示全部楼层
还有程序中  SPWM波 TIM3_Spwm_Buf[i]=(u16)(TIM3_Spwm_Buf_Zhouqi/2*(1+sin(inc*i))+0.5) 是怎么推到出来的
回复 支持 反对

使用道具 举报

11

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
305
金钱
305
注册时间
2015-6-27
在线时间
60 小时
发表于 2020-12-21 12:22:00 | 显示全部楼层
楼主在吗  有偿讲解也可以呀
回复 支持 反对

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
 楼主| 发表于 2020-12-21 21:06:55 | 显示全部楼层
双规导航 发表于 2020-12-19 18:02
还有程序中  SPWM波 TIM3_Spwm_Buf=(u16)(TIM3_Spwm_Buf_Zhouqi/2*(1+sin(inc*i))+0.5) 是怎么推到出来的

这就是正弦波的函数表达式呀
回复 支持 反对

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
 楼主| 发表于 2020-12-21 21:08:28 | 显示全部楼层
双规导航 发表于 2020-12-19 17:59
大神请问一下怎么把SPWM的占空比控制在一个合理的范围 让它整体的占空比不高于90%不低于10%

你改那个正弦波生成函数,占空比不在范围内的处理成90或10就行了
回复 支持 反对

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
 楼主| 发表于 2020-12-21 21:10:09 | 显示全部楼层
双规导航 发表于 2020-12-19 17:59
大神请问一下怎么把SPWM的占空比控制在一个合理的范围 让它整体的占空比不高于90%不低于10%

也就是把TIM3_Spwm_Buf中大于90%小与10%弄成90  10就行了
回复 支持 反对

使用道具 举报

11

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
305
金钱
305
注册时间
2015-6-27
在线时间
60 小时
发表于 2021-1-6 17:47:13 | 显示全部楼层
nashui_sx 发表于 2020-12-21 21:14
你这个dma1表你也看到了,不冲突的一个定时器的只能同时3个通道用dma,频率不高可以用输出比较模式较好, ...

这个问题我通过数字电路解决了谢谢
回复 支持 反对

使用道具 举报

11

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
305
金钱
305
注册时间
2015-6-27
在线时间
60 小时
发表于 2021-1-6 17:48:00 | 显示全部楼层
nashui_sx 发表于 2020-12-21 21:10
也就是把TIM3_Spwm_Buf中大于90%小与10%弄成90  10就行了

有空了我试一下,谢谢。
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-7-10
在线时间
38 小时
发表于 2021-5-31 00:01:03 来自手机 | 显示全部楼层
这个能用高级定时器TIM1做吗?我移植到TIM1并无波形
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2018-7-10
在线时间
38 小时
发表于 2021-5-31 00:02:41 来自手机 | 显示全部楼层
TIM_DMACmd(TIM3, TIM_DMA_Update, ENABLE); 从这个函数来看,我看库函数,参数只有TIM2,3,4,5..,并无定时器1,但是我看DMA又有通道5,TIM1-UP的选择,可以解惑吗
回复 支持 反对

使用道具 举报

28

主题

294

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1790
金钱
1790
注册时间
2018-3-26
在线时间
294 小时
发表于 2021-6-23 16:11:23 | 显示全部楼层
本帖最后由 htao 于 2021-6-23 16:41 编辑

老哥,我用你之前发过的一个功能里面的功能,可控周期和脉冲数的PWM 输出,有个问题,就是在控制输出PWM 之后, 电平有时候保持高电平
22.png

类似图中黄色标注的

具体问题麻烦移步帖子详情,谢谢大佬
http://www.openedv.com/thread-327463-1-1.html
回复 支持 反对

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
 楼主| 发表于 2021-6-23 22:59:59 | 显示全部楼层
htao 发表于 2021-6-23 16:11
老哥,我用你之前发过的一个功能里面的功能,可控周期和脉冲数的PWM 输出,有个问题,就是在控制输出PWM 之 ...

最初没配置也是高电平,极性翻转应该能反过来  实在翻转不过来外部反向一下
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-9-8
在线时间
4 小时
发表于 2024-11-13 11:06:25 | 显示全部楼层
:感谢
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 01:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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