OpenEdv-开源电子网

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

关于用stm32驱动L298N控制电机转动问题

[复制链接]

6

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
577
金钱
577
注册时间
2014-10-6
在线时间
38 小时
发表于 2014-10-10 10:18:57 | 显示全部楼层 |阅读模式
5金钱
今天看了下原子哥的关于PWM输出试验,打算用PWM输出脉冲来控制电机转动,但是不知道在主函数里面应该怎样调用?才能使电机转动,希望高手能指点下?
主要代码还是原子哥的关于pwm输出试验的代码:

[mw_shl_code=c,true]void TIM3_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能 TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500ms TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能 NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器 TIM_Cmd(TIM3, ENABLE); //使能TIMx外设 } //定时器3中断服务程序 void TIM3_IRQHandler(void) //TIM3中断 { if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源 { TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx的中断待处理位:TIM 中断源 LED1=!LED1; } } //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_GPIOB | RCC_APB2Periph_AFIO, ENABLE); //使能GPIO外设和AFIO复用功能模块时钟 GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射 TIM3_CH2->B5 //设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形 GPIOB.5 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO //初始化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_High; //输出极性:TIM输出比较极性高 TIM_OC2Init(TIM3, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3 OC2 TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIM3在CCR2上的预装载寄存器 TIM_Cmd(TIM3, ENABLE); //使能TIM3 }[/mw_shl_code]
主函数应该怎样写才能使电机转动啊?
[mw_shl_code=c,true] int main(void) { u16 led0pwmval=100; u8 dir=1; delay_init(); //延时函数初始化 //NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(9600); //串口初始化为9600 LED_Init(); //LED端口初始化 Scan_Key_Configuration(); TIM3_PWM_Init(600,0); //不分频。PWM频率=72000/900=8Khz while(1) { delay_ms(10); if(dir) { led0pwmval++; }else { led0pwmval--; } if(led0pwmval > 300) { dir = 0; } if(led0pwmval == 0) { dir = 1; } TIM_SetCompare2(TIM3,led0pwmval); } } [/mw_shl_code]
主函数怎样调用?

最佳答案

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

我手头没有现成的,这是问学弟要的代码   你凑合看看吧
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

83

主题

349

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2012-8-10
在线时间
13 小时
发表于 2014-10-10 10:18:58 | 显示全部楼层
我手头没有现成的,这是问学弟要的代码   你凑合看看吧

越障小车_1.rar

55.59 KB, 下载次数: 4636

回复

使用道具 举报

6

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
577
金钱
577
注册时间
2014-10-6
在线时间
38 小时
 楼主| 发表于 2014-10-10 10:18:58 | 显示全部楼层
回复【10楼】电子狼:
---------------------------------
多谢了,你给的代码解决了我的问题,好人啊!
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-10-10 12:52:10 | 显示全部楼层
你想怎么转动?
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

6

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
577
金钱
577
注册时间
2014-10-6
在线时间
38 小时
 楼主| 发表于 2014-10-10 16:05:33 | 显示全部楼层
回复【2楼】Badu_Space:
---------------------------------
怎么转都行,只要让车转下就行了。不知道怎么解决?求指导
回复

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
发表于 2014-10-10 16:21:42 | 显示全部楼层
需要接外部功率放大电路。PWM输出脉冲只是信号,驱动能力顶多就是500mA。
手艺人要内外兼修。
回复

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
发表于 2014-10-10 16:27:20 | 显示全部楼层
哦,原来你有外部功率放大电路,你说的应该是怎么调速吧。
手艺人要内外兼修。
回复

使用道具 举报

83

主题

349

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2012-8-10
在线时间
13 小时
发表于 2014-10-10 17:27:44 | 显示全部楼层
首先,你要确保没有PWM的情况下,你能控制电机转动么?
其次,如果可以转动,那么PWM输出测量一下波形,正常么?
最后,在你的问题里,其实PWM就是调速而已。好好检查你的接线!
回复

使用道具 举报

15

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2013-9-24
在线时间
20 小时
发表于 2014-10-10 17:58:04 | 显示全部楼层
L298按照两相4拍控制的话。你要输出4路PWM按照顺序排列。。、。或者直接用IO扣模拟电平实现。。功率很小,只能驱动小电机。。
回复

使用道具 举报

6

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
577
金钱
577
注册时间
2014-10-6
在线时间
38 小时
 楼主| 发表于 2014-10-10 19:19:09 | 显示全部楼层
回复【6楼】电子狼:
---------------------------------
多谢了。我试试。
回复

使用道具 举报

6

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
577
金钱
577
注册时间
2014-10-6
在线时间
38 小时
 楼主| 发表于 2014-10-10 19:19:48 | 显示全部楼层
回复【7楼】kqh1120:
---------------------------------
能给个示范吗?直接点,怎么写?麻烦你了
回复

使用道具 举报

83

主题

349

帖子

1

精华

高级会员

Rank: 4

积分
908
金钱
908
注册时间
2012-8-10
在线时间
13 小时
发表于 2014-10-11 22:54:39 | 显示全部楼层
回复【11楼】鹅卵石的天空:
--------------------------------呵呵呵    我叫雷锋
回复

使用道具 举报

6

主题

92

帖子

0

精华

高级会员

Rank: 4

积分
577
金钱
577
注册时间
2014-10-6
在线时间
38 小时
 楼主| 发表于 2014-10-11 23:06:42 | 显示全部楼层
回复【12楼】电子狼:
---------------------------------
恩恩,雷锋好啊。这几年就缺雷锋了。支持
回复

使用道具 举报

7

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2015-1-3
在线时间
26 小时
发表于 2015-5-24 17:35:36 | 显示全部楼层
支持支持,学习了。正好用到
总有人是要赢的,那为什么不是我呢?
博客: http://mindthink.me
回复

使用道具 举报

3

主题

261

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2075
金钱
2075
注册时间
2014-2-20
在线时间
284 小时
发表于 2015-5-27 14:06:37 | 显示全部楼层
支持了,。下载来学习,刚好要用到
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2015-6-25
在线时间
0 小时
发表于 2015-6-26 09:08:03 | 显示全部楼层
请问,在没有示波器的情况下,怎么能显示PWM波呢
回复

使用道具 举报

36

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2015-3-29
在线时间
3 小时
发表于 2015-8-16 12:05:35 | 显示全部楼层
请问STM32 IO口输出电平不是3.3V吗!L298N的逻辑电平是5V啊!是怎么解决的呢?
回复

使用道具 举报

1

主题

6

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2017-4-10
在线时间
2 小时
发表于 2017-4-17 10:18:04 | 显示全部楼层
你好,请问一下,这个是控制什么电机啊
回复

使用道具 举报

5

主题

33

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2017-7-24
在线时间
8 小时
发表于 2017-7-25 23:10:45 | 显示全部楼层
你好,请问一下,这个是控制什么电机啊
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2017-8-17
在线时间
8 小时
发表于 2017-8-17 16:43:14 | 显示全部楼层
有没有例程
回复

使用道具 举报

8

主题

569

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2363
金钱
2363
注册时间
2015-5-8
在线时间
320 小时
发表于 2017-11-19 09:42:38 | 显示全部楼层
只是转动只要配置定时器输出PWM就行了,不过大点的电机需要外部驱动
回复

使用道具 举报

4

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2018-6-1
在线时间
15 小时
发表于 2018-6-7 23:51:26 | 显示全部楼层
电子狼 发表于 2014-10-10 10:18
我手头没有现成的,这是问学弟要的代码   你凑合看看吧

我我只只学过库函数版本的,没学过寄存的,有库函数版本的吗,想学习一下,谢谢,
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-29 10:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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