OpenEdv-开源电子网

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

用L298N驱动直流电机问题

[复制链接]

12

主题

76

帖子

0

精华

高级会员

Rank: 4

积分
986
金钱
986
注册时间
2017-4-3
在线时间
118 小时
发表于 2017-4-28 13:26:02 | 显示全部楼层 |阅读模式
1金钱
我硬件连线正常,在主函数内单独让俩电机正转,或者只反转,或者都停止,都可正常实现,但是编程让电机正转几秒(用的延时函数)然后再调用反转的程序,实验结果是电机只正转不反转,实验多次得到的结果是哪个状态在程序的前面电机就怎么转,不改变想要的转的状态。请问大神们这是怎么回事啊

最佳答案

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

之前遇到过,l298是5v的pwm和数字引脚正反都正常,用3.3v pwm和数字引脚只会一个方向,后来用三极管,使能5v的pwm和数字引脚就正常了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

51

主题

2166

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10653
金钱
10653
注册时间
2017-4-14
在线时间
2780 小时
发表于 2017-4-28 13:26:03 | 显示全部楼层
之前遇到过,l298是5v的pwm和数字引脚正反都正常,用3.3v  pwm和数字引脚只会一个方向,后来用三极管,使能5v的pwm和数字引脚就正常了 122325eqgbbppf1bcctyab.jpg
回复

使用道具 举报

12

主题

76

帖子

0

精华

高级会员

Rank: 4

积分
986
金钱
986
注册时间
2017-4-3
在线时间
118 小时
 楼主| 发表于 2017-4-28 13:29:49 | 显示全部楼层
#include "stm32f10x.h"
#include "motor.h"
#include "sys.h"

//×óÂÖ3õê¼»ˉ
       
void        MotorDriver_L_Config(void){
       
        GPIO_InitTypeDef                                        GPIO_InitStructure ;
        TIM_TimeBaseInitTypeDef                TIM_BaseInitStructure;
        TIM_OCInitTypeDef                                        TIM_OCInitStructure;
       
        /*ê1ÄüGPIOB¡¢TIM4íaéèê±Öó*/
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_TIM1, ENABLE);
       
        /*3õê¼»ˉPB6¶Ë¿úÎaOut_PPÄ£ê½*/
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
       
        /*3õê¼»ˉPB8¶Ë¿úÎaOut_PPÄ£ê½*/
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
       
        /*3õê¼»ˉPA7¶Ë¿ú(TIM4_CH2)ÎaAF_PPÄ£ê½íÆíìêä3ö*/
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        /*¶¨ê±Æ÷»ù±¾ÅäÖÃtime3 μÄ ch2í¨μà*/
        TIM_BaseInitStructure.TIM_Prescaler = 3-1;                                                                        //ê±ÖóÔ¤·ÖÆμêy3,TIM8μļÆêyê±ÖóÆμÂêÎa24MHz
        TIM_BaseInitStructure.TIM_Period = 1000-1;                                                                        //×Ô¶ˉÖØ×°ÔØ¼Ä′æÆ÷êyÖμ,PWM2ÆμÂêÎa24MHz/1000=24KHz
        TIM_BaseInitStructure.TIM_ClockDivision = 0;                                                                //2éÑù·ÖÆμ
        TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;                                        //ÏòéϼÆêy                       
        TIM_TimeBaseInit(TIM1, &TIM_BaseInitStructure);

       
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;                                                    /*PWM2  ch2êä3öÄ£ê&#189WMÄ£ê½2£- ÔúÏòéϼÆêyê±£¬
                                                                                                                                                                ò&#187;μ&#169;TIMx_CNT<TIMx_CCR1ê±í¨μà1&#206;a&#206;TD§μ&#231;&#198;&#189;£&#172;·&#241;&#212;ò&#206;a
                                                                                                                                                                óDD§μ&#231;&#198;&#189;£&#187;&#212;ú&#207;ò&#207;&#194;&#188;&#198;êyê±£&#172;ò&#187;μ&#169;TIMx_CNT>TIMx_CCR1ê±í¨μà1&#206;aóDD§μ&#231;&#198;&#189;
                                                                                                                                                                £&#172;·&#241;&#212;ò&#206;a&#206;TD§μ&#231;&#198;&#189;&#161;£*/
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;                                //ê1&#196;ü&#184;&#195;í¨μàê&#228;3&#246;
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;                                        //ê&#228;3&#246;&#188;&#171;D&#212;
        TIM_OC4Init(TIM1, &TIM_OCInitStructure);                                                                        //°′&#214;&#184;&#182;¨2&#206;êy3&#245;ê&#188;&#187;ˉ

        TIM_OC4PreloadConfig(TIM8, TIM_OCPreload_Enable);                                                        //ê1&#196;üTIM8&#212;úCCRé&#207;μ&#196;&#212;¤×°&#212;&#216;&#188;&#196;′&#230;&#198;÷
        TIM_ARRPreloadConfig(TIM1, ENABLE);                                                                                        //ê1&#196;üTIM8&#212;úARRé&#207;μ&#196;&#212;¤×°&#212;&#216;&#188;&#196;′&#230;&#198;÷
       
        TIM_Cmd(TIM1, ENABLE);                                                                                                                //ê1&#196;üTIM8
}


//óò&#194;&#214;3&#245;ê&#188;&#187;ˉ
void        MotorDriver_R_Config(void){

        GPIO_InitTypeDef                                        GPIO_InitStructure ;
        TIM_TimeBaseInitTypeDef                TIM_BaseInitStructure;
        TIM_OCInitTypeDef                                        TIM_OCInitStructure;

        /*ê1&#196;üGPIOc&#161;¢TIM8íaéèê±&#214;ó*/
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC  | RCC_APB2Periph_TIM8, ENABLE);

        /*3&#245;ê&#188;&#187;ˉPB10&#182;&#203;&#191;ú&#206;aOut_PP&#196;£ê&#189;*/
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, &GPIO_InitStructure);

        /*3&#245;ê&#188;&#187;ˉPB.111&#182;&#203;&#191;ú&#206;aOut_PP&#196;£ê&#189;*/
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
        GPIO_Init(GPIOC, &GPIO_InitStructure);

        /*3&#245;ê&#188;&#187;ˉPC.09&#182;&#203;&#191;ú(TIM8_CH4)&#206;aAF_PP&#196;£ê&#189;*/
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, &GPIO_InitStructure);

        /*&#182;¨ê±&#198;÷&#187;ù±&#190;&#197;&#228;&#214;&#195;time8 μ&#196; ch4í¨μà*/
        TIM_BaseInitStructure.TIM_Prescaler = 3-1;                                        //ê±&#214;ó&#212;¤·&#214;&#198;μêypsc=3,TIM8μ&#196;&#188;&#198;êyê±&#214;ó&#198;μ&#194;ê&#206;a24MHz
        TIM_BaseInitStructure.TIM_Period = 1000-1;                                        //×&#212;&#182;ˉ&#214;&#216;×°&#212;&#216;&#188;&#196;′&#230;&#198;÷êy&#214;μarr=1000,PWM2&#198;μ&#194;ê&#206;a24MHz/1000=24KHz
        TIM_BaseInitStructure.TIM_ClockDivision = 0;                                                                                                //2é&#209;ù·&#214;&#198;μ
        TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;                                        //&#207;òé&#207;&#188;&#198;êy
        TIM_TimeBaseInit(TIM8, &TIM_BaseInitStructure);

        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;                                                                                //PWM2  ch2ê&#228;3&#246;&#196;£ê&#189;
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;                                //ê1&#196;ü&#184;&#195;í¨μàê&#228;3&#246;
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;                                                //ê&#228;3&#246;&#188;&#171;D&#212;
        TIM_OC4Init(TIM8, &TIM_OCInitStructure);                                                                                                                //°′&#214;&#184;&#182;¨2&#206;êy3&#245;ê&#188;&#187;ˉ

        TIM_OC4PreloadConfig(TIM8, TIM_OCPreload_Enable);                                                                                //ê1&#196;üTIM8&#212;úCCRé&#207;μ&#196;&#212;¤×°&#212;&#216;&#188;&#196;′&#230;&#198;÷
        TIM_ARRPreloadConfig(TIM8, ENABLE);                                                                                                                                        //ê1&#196;üTIM8&#212;úARRé&#207;μ&#196;&#212;¤×°&#212;&#216;&#188;&#196;′&#230;&#198;÷
       
        TIM_Cmd(TIM8, ENABLE);                                                                                                                                                                                        //′ò&#191;aTIM8
}

void        MotorDriver_L_Turn_Forward(void){                        //×ó&#194;&#214;μ&#231;&#187;ú&#213;y×a
       
        IN1=1;
        IN2=0;

}

void        MotorDriver_L_Turn_Reverse(void){                        //×ó&#194;&#214;μ&#231;&#187;ú·′×a
       
        IN1=0;
        IN2=1;

}

void        MotorDriver_R_Turn_Forward(void){                        //óò&#194;&#214;μ&#231;&#187;ú&#213;y×a
       
        IN3=1;
        IN4=0;
}

void        MotorDriver_R_Turn_Reverse(void){                        //óò&#194;&#214;μ&#231;&#187;ú·′×a
       
        IN3=0;
        IN4=1;
}

void        MotorDriver_L_Turn_Stop(void)                                //×ó&#194;&#214;μ&#231;&#187;ú&#214;&#198;&#182;ˉ
{
        IN1=0;
        IN2=0;
}
void        MotorDriver_R_Turn_Stop(void)                                //óò&#194;&#214;μ&#231;&#187;ú&#214;&#198;&#182;ˉ
{
  IN3=0;
        IN4=0;
}

void        MotorDriver_Init(void){
       
        MotorDriver_R_Config();
        MotorDriver_L_Config();
       
        MotorDriver_L_Turn_Stop();                                //×ó&#194;&#214;μ&#231;&#187;ú&#214;&#198;&#182;ˉ
        MotorDriver_R_Turn_Stop();                                //óò&#194;&#214;μ&#231;&#187;ú&#214;&#198;&#182;ˉ
}
回复

使用道具 举报

12

主题

76

帖子

0

精华

高级会员

Rank: 4

积分
986
金钱
986
注册时间
2017-4-3
在线时间
118 小时
 楼主| 发表于 2017-4-28 13:31:13 | 显示全部楼层
这是电机的C文件,有哪里初始化不对么,298N上的ENA和ENB我都差的跳线帽,所以和PWM没关系
回复

使用道具 举报

1

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2017-4-15
在线时间
26 小时
发表于 2017-4-28 15:31:22 来自手机 | 显示全部楼层
嗯...主函数正转延时反转后有延时么
回复

使用道具 举报

12

主题

76

帖子

0

精华

高级会员

Rank: 4

积分
986
金钱
986
注册时间
2017-4-3
在线时间
118 小时
 楼主| 发表于 2017-4-28 19:23:52 | 显示全部楼层
dlamji 发表于 2017-4-28 15:31
嗯...主函数正转延时反转后有延时么

有延时的啊,我还在中间加了个5毫秒的停止呢
回复

使用道具 举报

12

主题

76

帖子

0

精华

高级会员

Rank: 4

积分
986
金钱
986
注册时间
2017-4-3
在线时间
118 小时
 楼主| 发表于 2017-4-28 22:19:51 | 显示全部楼层
已解决
回复

使用道具 举报

12

主题

76

帖子

0

精华

高级会员

Rank: 4

积分
986
金钱
986
注册时间
2017-4-3
在线时间
118 小时
 楼主| 发表于 2017-4-28 22:20:08 | 显示全部楼层
已解决
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2017-5-21
在线时间
3 小时
发表于 2017-5-21 20:21:15 来自手机 | 显示全部楼层
你好,你是怎么解决的,我也遇到了相同问题
回复

使用道具 举报

14

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2017-5-24
在线时间
26 小时
发表于 2017-7-12 09:25:51 | 显示全部楼层

说说呀,怎么解决的。
回复

使用道具 举报

4

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2018-6-1
在线时间
15 小时
发表于 2018-6-2 20:59:56 | 显示全部楼层

我也想学L298N驱动直流电机,不知道怎么弄,想问一下你是怎么弄的,谢谢
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
60
金钱
60
注册时间
2021-5-13
在线时间
24 小时
发表于 2021-7-22 15:16:19 来自手机 | 显示全部楼层
请问怎么解决的呀
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-24 04:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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