OpenEdv-开源电子网

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

PWM输出脉冲应用在伺服电机外部脉冲控制模式,高人,大神们求指导。

[复制链接]

32

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
227
金钱
227
注册时间
2013-10-16
在线时间
1 小时
发表于 2013-10-16 17:05:17 | 显示全部楼层 |阅读模式

我用TIM3定时中断也能实现,但是TIM3不知道怎么回事儿容易丢脉冲,或者多脉冲,后来想想还是用PWM比较好一点,但是问题就出来了,我怎么通过上位机给单片机发送指令从而控制PWM的频率和个数呢?TIM3定时中断有中断函数可以在中断函数改变频率和个数。但是PWM完全靠硬件输出0,1上的,我该怎么做啊?求指导,求指导。最好是能给个直接控制寄存器的程序例子或者给小的讲解一下PWM的原理小弟在这里不胜感激。这个问题已经纠结小弟一个多星期了。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

32

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
227
金钱
227
注册时间
2013-10-16
在线时间
1 小时
 楼主| 发表于 2013-10-16 17:21:28 | 显示全部楼层
大神们你们都去吃饭了吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-16 18:21:23 | 显示全部楼层
我做过一个方法:用两个定时器做,一个定时器做主一个做从,使用定时器的门控模式。
这样,可以用一个定时器,控制另外一个定时器产生指定个数脉冲。
至于频率,你可以设置两个定时器的分频和ARR来修改。

另外,我这个方法比较复杂,貌似高级定时器还有个脉冲统计的寄存器,看看能否用这个解决。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

32

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
227
金钱
227
注册时间
2013-10-16
在线时间
1 小时
 楼主| 发表于 2013-10-17 09:15:21 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------如果用两个定时器做的话,改变脉冲的个数只能在程序里面改无法做到实时控制啊原子哥
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-17 11:26:58 | 显示全部楼层
你所谓的实时控制,难道不需要程序???
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

19

主题

199

帖子

0

精华

高级会员

Rank: 4

积分
513
金钱
513
注册时间
2012-11-18
在线时间
72 小时
发表于 2013-10-17 11:50:04 | 显示全部楼层
1:上位机发指令给下位机,写个简单的协议,串口通讯
2WM比较输出,不会丢脉冲.也不需要中断.检查定时器配置,
回复 支持 反对

使用道具 举报

32

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
227
金钱
227
注册时间
2013-10-16
在线时间
1 小时
 楼主| 发表于 2013-10-17 13:11:39 | 显示全部楼层
回复【5楼】正点原子:---------------------------------比如200mm的电动缸,分4段速度前50mm速度是10mm/s,第二段50mm速度是5mm/s,第三段50mm速度是25mm/s,第四段50mm速度是50mm/s,我想通过串口通信来控制PWM的频率和脉冲数实现这样的运动。
回复 支持 反对

使用道具 举报

32

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
227
金钱
227
注册时间
2013-10-16
在线时间
1 小时
 楼主| 发表于 2013-10-17 13:15:47 | 显示全部楼层
回复【6楼】lansing1648:
---------------------------------能不能小给个PWM程序啊,亲
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-17 13:56:52 | 显示全部楼层
我们开发板就有PWM例程啊。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

32

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
227
金钱
227
注册时间
2013-10-16
在线时间
1 小时
 楼主| 发表于 2013-10-17 17:21:05 | 显示全部楼层
回复【9楼】正点原子:
--------------------------------我看了开发板的程序感觉还是不太理解,我把频率降到8Hz了应该能看到led灯闪烁的可是led一直常亮什么情况
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-17 23:34:38 | 显示全部楼层
说明你改的有问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

71

主题

467

帖子

0

精华

高级会员

Rank: 4

积分
800
金钱
800
注册时间
2011-11-18
在线时间
5 小时
发表于 2013-10-18 08:06:02 | 显示全部楼层
你是山寨直流伺服吧?pmw个数来加减速?想法比较奇葩....你应用时间的改变来对应调整pmw吧。
我的工作就是天天在玩
回复 支持 反对

使用道具 举报

32

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
227
金钱
227
注册时间
2013-10-16
在线时间
1 小时
 楼主| 发表于 2013-10-18 12:33:00 | 显示全部楼层
回复【12楼】chinafox:
---------------------------------
你理解错了 我是通过PWM的个数控制电机的圈数,PWM的频率控制电机的速度的
回复 支持 反对

使用道具 举报

32

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
227
金钱
227
注册时间
2013-10-16
在线时间
1 小时
 楼主| 发表于 2013-10-18 13:40:12 | 显示全部楼层
回复【11楼】正点原子:
---------------------------------
原子哥 下面是我在你的程序上改的应该没什么问题吧
int main(void)
{     
u16 led0pwmval=0;    
u8 dir=1;
Stm32_Clock_Init(9); //系统时钟设置
uart_init(72,9600);   //串口初始化为9600
delay_init(72);       //延时初始化 
LED_Init();    //初始化与LED连接的硬件接口
BEEP_Init();          //初始化蜂鸣器端口
KEY_Init();          //初始化与按键连接的硬件接口
   TIM3_PWM_Init(8999999,0); //不分频。PWM频率=72000/(899+1)=80Khz
    while(1)
{      
//        delay_ms(10);  
// if(dir)led0pwmval++;
// else led0pwmval--;  
//  if(led0pwmval>300)dir=0;
// if(led0pwmval==0)dir=1
                  LED0_PWM_VAL=0x8000;    
}
}其他函数我没有改动,但是最后显示的led常亮
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-18 14:06:24 | 显示全部楼层
回复【14楼】higerd_han:
---------------------------------
8999999,这个溢出了!!
请看看ARR寄存器,是32位的,还是16位的?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

18

主题

102

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2012-12-2
在线时间
0 小时
发表于 2013-10-18 15:12:46 | 显示全部楼层
是步进电机吗?那就用定时中断 取反取反呀
回复 支持 反对

使用道具 举报

32

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
227
金钱
227
注册时间
2013-10-16
在线时间
1 小时
 楼主| 发表于 2013-10-18 15:29:37 | 显示全部楼层
回复【15楼】正点原子:
---------------------------------
回去我再仔细的看看你的视频教程
回复 支持 反对

使用道具 举报

1

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-10-13
在线时间
3 小时
发表于 2013-10-20 15:20:07 | 显示全部楼层
http://www.openedv.com/posts/list/22829.htm

求一起研究加减速算法。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-11 01:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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