OpenEdv-开源电子网

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

PWM输出的问题

[复制链接]

1

主题

6

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2017-7-14
在线时间
2 小时
发表于 2017-7-14 20:36:13 | 显示全部楼层 |阅读模式
1金钱
我参照教程里的PWM输出实验,修改了相关文件,但是在进行实验的时候,那PB.5输出的PWM去控制舵机,结果舵机不动。
后来我用debug的仿真查看PB.5和PB.E的输出波形,结果都是0,请大家帮忙指点迷津~~~
(~~8BA4F$KWFC)SOB]%L([6.png

最佳答案

查看完整内容[请看2#楼]

PWM是通过定时器来输出的,你在选引脚的时候,先查看定时器的通道有没有接在该引脚上,如果没有,是不会产生pwm的。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

93

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1234
金钱
1234
注册时间
2016-7-17
在线时间
145 小时
发表于 2017-7-14 20:36:14 | 显示全部楼层
PWM是通过定时器来输出的,你在选引脚的时候,先查看定时器的通道有没有接在该引脚上,如果没有,是不会产生pwm的。
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2017-7-14
在线时间
5 小时
发表于 2017-7-14 21:33:33 | 显示全部楼层
主函数没毛病,发下TIM3_PWM_Init()源代码看看
回复

使用道具 举报

1

主题

8

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-7-5
在线时间
4 小时
发表于 2017-7-14 23:02:13 | 显示全部楼层
看这个程序,是想实现PWM输出不同的占空比来控制舵机的快慢对吗,但是你不要忘记了,PWM输出是离散信号,舵机输入是电流(或电压)驱动型的电机,需要转换成连续信号,这中间就需要驱动器了。
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2017-7-14
在线时间
2 小时
 楼主| 发表于 2017-7-15 22:48:56 | 显示全部楼层
谢谢大家的解答,这个是TIM3_PWM_Init()函数,请帮忙看一下是不是有问题
123.jpg.png
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2017-7-14
在线时间
2 小时
 楼主| 发表于 2017-7-15 22:50:53 | 显示全部楼层
josephine 发表于 2017-7-14 21:33
主函数没毛病,发下TIM3_PWM_Init()源代码看看

谢谢~TIM3_PWM_Init()发了~
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2017-7-14
在线时间
2 小时
 楼主| 发表于 2017-7-15 22:52:41 | 显示全部楼层
shenalun 发表于 2017-7-14 23:02
看这个程序,是想实现PWM输出不同的占空比来控制舵机的快慢对吗,但是你不要忘记了,PWM输出是离散信号,舵 ...

是的,PWM电机买的时候没有买驱动器,说明上是三个接口,两个是电源线,一个是信号线,信号线输入PWM信号。我打算通过占空比控制角度的,输出的不同的占空比对应不同的舵机转角。
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2017-7-14
在线时间
2 小时
 楼主| 发表于 2017-7-15 22:53:50 | 显示全部楼层
虾兵蟹将 发表于 2017-7-14 21:13
PWM是通过定时器来输出的,你在选引脚的时候,先查看定时器的通道有没有接在该引脚上,如果没有,是不会产 ...

是将TIM3的通道2部分映射到PB.5和PB.E上的
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2017-7-14
在线时间
5 小时
发表于 2017-7-18 21:07:01 | 显示全部楼层
本帖最后由 josephine 于 2017-7-18 21:16 编辑
手抓饼 发表于 2017-7-15 22:50
谢谢~TIM3_PWM_Init()发了~

你自己看下TIM3_PWM_Init(19999,71)这个有没有问题
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2017-7-14
在线时间
5 小时
发表于 2017-7-18 21:16:19 | 显示全部楼层
手抓饼 发表于 2017-7-15 22:50
谢谢~TIM3_PWM_Init()发了~

你自己看下,你把TIM3_PWM_Init(19999,71),溢出一次需要20ms,而你while(1)里面delay_ms(10)已经延时了10ms,执行下面语句才us级别,之后又进入了delay()里面,加起来差不多20ms,就没达到pwm的输出效果。
本来的话,程序在delay_ms(10)里面会进行多次溢出,就会有多次比较,会有pwm效果。前提是TIM3_PWM_Init(arr,pres) 一次溢出时间<<delay_ms。
另外TIM3_CH2的部分重映射我看到好像只映射到PB5上,你说的PB.E是什么?
以上是我的个人见解
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2017-7-14
在线时间
2 小时
 楼主| 发表于 2017-7-19 17:01:48 | 显示全部楼层
josephine 发表于 2017-7-18 21:16
你自己看下,你把TIM3_PWM_Init(19999,71),溢出一次需要20ms,而你while(1)里面delay_ms(10)已经延时 ...

       改了delay_ms()的值,用delay_ms(30),再用板子上的LED灯,明暗确实可以看出来了。
       原来while{  }里的delay_ms()是每执行一次就延迟一次,delay_ms()是为了让板子有时间把上一次的PWM做完,而实际板子需要的时间不是程序中几条语句所占的ums级时间能够提供的。
       但是,这样的话,delay_ms()要是太大的话,不就在此时间内,把一个占空比的PWM重复输好几遍出来,没达到及时改变占空比的目的。
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2017-7-14
在线时间
5 小时
发表于 2017-7-19 21:05:11 | 显示全部楼层
手抓饼 发表于 2017-7-19 17:01
改了delay_ms()的值,用delay_ms(30),再用板子上的LED灯,明暗确实可以看出来了。
       原来w ...

你说的很对
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-3 03:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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