OpenEdv-开源电子网

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

关于用PWM控制电机速度的问题

[复制链接]

6

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
577
金钱
577
注册时间
2014-10-6
在线时间
38 小时
发表于 2014-11-18 13:15:41 | 显示全部楼层 |阅读模式
5金钱
今天打算用手机控制之前做的那个小车,出了点问题,就是小车的速度是将下来了,可是小车一直颤抖的不行,有点走走停停的感觉,貌似是PWM除了问题,可检查了半天也不知道是哪里错了,程序就是之前做的那个,没有改什么,几天一试就不行了。搞了半天也还是不行,请教各位大神。
下面是关于PWM的代码,用的就是原子哥的。
[mw_shl_code=c,true]uint16_t CCR2_Val_Car_Normal_Speen = 70; void Init_steering(void) { TIM3_Int_Init(199,7199); TIM3_PWM_Init(199,7199); //PWM频率 = 50Hz } void TIM3_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能 //中断优先级NVIC设置 //HCRS04_TIM3_NVIC_Init(); //定时器TIM3初始化 TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断 TIM_Cmd(TIM3, ENABLE); } //TIM3 PWM部分初始化 //PWM输出初始化 //arr:自动重装值 //psc:时钟预分频数 void TIM3_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器3时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE); //初始化TIM3 TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler = psc; //设置用来作为TIMx时钟频率除数的预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 //初始化TIM3 Channel2 PWM模式 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性高 //舵机转向控制 TIM_OC1Init(TIM3, &TIM_OCInitStructure); TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); /* PWM1 Mode configuration: Channel2 */ //TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //TIM_OCInitStructure.TIM_Pulse = 100 ; //TIM_OC1Init(TIM3, &TIM_OCInitStructure); //TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); //控制电机的速度 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = CCR2_Val_Car_Normal_Speen; TIM_OC2Init(TIM3, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3 OC2 TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的预装载寄存器 /*超声波检测部分用到的PWM*/ TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse =200 ; TIM_OC3Init(TIM3,&TIM_OCInitStructure); //初始化外设TIM3 OC3 TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable);//使能TIM3在CCR1上的预装载寄存器 //TIM_ARRPreloadConfig(TIM3, ENABLE); TIM_Cmd(TIM3, ENABLE); //使能TIM3 Steering_Move_Middle(); }[/mw_shl_code]
不知道,哪里错了,小车有点走走停停的感觉,请教啊!

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

使用道具 举报

6

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
577
金钱
577
注册时间
2014-10-6
在线时间
38 小时
 楼主| 发表于 2014-11-18 13:18:03 | 显示全部楼层
程序是之前的,之前没有问题,今天拿出来试了下就出现问题了。真搞不懂,哪里错了
回复

使用道具 举报

6

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
577
金钱
577
注册时间
2014-10-6
在线时间
38 小时
 楼主| 发表于 2014-11-18 16:26:31 | 显示全部楼层
原子哥知道吗?怎么没有有说说是怎么回事啊?大神们,都在哪呢?麻烦你们了
回复

使用道具 举报

6

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
577
金钱
577
注册时间
2014-10-6
在线时间
38 小时
 楼主| 发表于 2014-11-18 16:30:48 | 显示全部楼层
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13125
金钱
13125
注册时间
2012-11-26
在线时间
3814 小时
发表于 2014-11-18 17:37:46 | 显示全部楼层
70/1780  这速度  能跑起来 我觉得都是奇迹了


把速度不要降得太低试试
学无止境
回复

使用道具 举报

6

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
577
金钱
577
注册时间
2014-10-6
在线时间
38 小时
 楼主| 发表于 2014-11-18 20:44:38 | 显示全部楼层
回复【5楼】jermy_z:
恩恩,多谢了,我试了试,还是那个样子,小车电机晃动的不行,应该是速度的问题,可就是检查不出来,哎,伤啊。---------------------------------
回复

使用道具 举报

8

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
414
金钱
414
注册时间
2014-11-15
在线时间
75 小时
发表于 2014-11-18 20:48:57 | 显示全部楼层
电机用什么驱动的?

PWM波形有看过么?
在你旁边看到的黄昏 美得让人窒息 如此美丽 谨献给我即将逝去的大学四年 fq_2015_2_9
回复

使用道具 举报

6

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
577
金钱
577
注册时间
2014-10-6
在线时间
38 小时
 楼主| 发表于 2014-11-18 21:25:17 | 显示全部楼层
回复【7楼】番茄君:
---------------------------------
L298N驱动。波形没有问题,就是不知道哪里有问题、
回复

使用道具 举报

6

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
577
金钱
577
注册时间
2014-10-6
在线时间
38 小时
 楼主| 发表于 2014-11-18 22:15:56 | 显示全部楼层
看来,只能是自己想办法了,居然没有人知道是为什么?自己在慢慢研究去了!!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-18 23:38:17 | 显示全部楼层
回复【9楼】鹅卵石的天空:
---------------------------------
估计是你控制太频繁了(改变PWM占空比太频繁)。
你直接不受控,就PWM控制速度,测试下。
比如固定速度跑,看看颤抖不?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

6

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
577
金钱
577
注册时间
2014-10-6
在线时间
38 小时
 楼主| 发表于 2014-11-20 20:22:21 | 显示全部楼层
恩恩,多谢了。固定速度是不会颤抖的。但我想加入速度控制,就不行了。
今天将舵机控制加上去了,舵机也和小车一样,左右晃动。
回复

使用道具 举报

6

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
577
金钱
577
注册时间
2014-10-6
在线时间
38 小时
 楼主| 发表于 2014-11-20 20:22:39 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
恩恩,多谢了。固定速度是不会颤抖的。但我想加入速度控制,就不行了。
今天将舵机控制加上去了,舵机也和小车一样,左右晃动。
回复

使用道具 举报

3

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2015-5-29
在线时间
4 小时
发表于 2015-6-12 16:11:57 | 显示全部楼层
回复【2楼】鹅卵石的天空:
---------------------------------
能把程序发我一份吗?多谢呀

邮箱:1223430042@qq.com
回复

使用道具 举报

3

主题

62

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2015-5-29
在线时间
0 小时
发表于 2015-6-12 21:44:06 | 显示全部楼层
提高PWM频率,加减速是线性吗?
回复

使用道具 举报

3

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2017-2-27
在线时间
10 小时
发表于 2017-3-4 22:21:25 | 显示全部楼层
能给我这份程序吗  756196186@qq.com
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2017-3-13
在线时间
3 小时
发表于 2017-3-13 13:17:35 | 显示全部楼层
楼主  楼友们 我做一个调控小车速度的任务 能给我发一个控制电机的程序吗。谢谢啦
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2017-3-13
在线时间
3 小时
发表于 2017-3-13 13:18:11 | 显示全部楼层
游逸南山 发表于 2017-3-13 13:17
楼主  楼友们 我做一个调控小车速度的任务 能给我发一个控制电机的程序吗。谢谢啦

邮箱是 842764370@qq.com
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-4-10
在线时间
2 小时
发表于 2017-4-11 16:29:31 | 显示全部楼层
这个是控制的什么电机呢?
回复

使用道具 举报

12

主题

49

帖子

0

精华

初级会员

Rank: 2

积分
161
金钱
161
注册时间
2018-7-14
在线时间
15 小时
发表于 2018-7-17 11:49:03 | 显示全部楼层
楼主可以把代码发我一份吗   谢谢  wenbo_jiang@163.com
回复

使用道具 举报

31

主题

265

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
413
金钱
413
注册时间
2018-1-9
在线时间
65 小时
发表于 2018-7-17 12:04:54 | 显示全部楼层
鹅卵石的天空 发表于 2014-11-20 20:22
恩恩,多谢了。固定速度是不会颤抖的。但我想加入速度控制,就不行了。
今天将舵机控制加上去了,舵机也和 ...

把接收到的速度信号,加一个滤波。让他的变化不要这么剧烈。小车就不会这么抖了。
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2018-7-17 13:14:35 | 显示全部楼层
你小车的程序没发,别人看不出啥来
猪猪熊呢?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-16 07:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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