OpenEdv-开源电子网

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

求一个l298n驱动直流电机的程序

[复制链接]

3

主题

11

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2019-4-19
在线时间
8 小时
发表于 2019-4-27 13:45:22 | 显示全部楼层 |阅读模式
1金钱
  32单片机,l298n驱动器,直流减速电机,

最佳答案

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

#ifndef __MOTOR_CONTROL_H #define __MOTOR_CONTROL_H #include "stm32f10x.h" #define ONWARD 1 #define BACKWARD 0 #define Out1 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0) #define Out2 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) #define Out3 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_2) #define Out4 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4) void GPIO_Configuration(void); void TIM3_GPIO_Config(vo ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2019-4-7
在线时间
3 小时
发表于 2019-4-27 13:45:23 | 显示全部楼层
#ifndef __MOTOR_CONTROL_H
#define        __MOTOR_CONTROL_H

#include "stm32f10x.h"

#define ONWARD   1
#define BACKWARD 0
#define  Out1 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)
#define  Out2 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)
#define  Out3 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_2)
#define  Out4 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4)

void GPIO_Configuration(void);
void TIM3_GPIO_Config(void);
void TIM3_Configuration(u16 CCR_Val_12,u16 CCR_Val_34);
void Motor_speed_a(u8 speed,u8 flag);
void Motor_speed_b(u8 speed,u8 flag);
void Motor_speed_c(u8 speed,u8 flag);
void Motor_speed_d(u8 speed,u8 flag);
void Forward_run(void);
void Backward_run(void);
void Left_turn(void);
void Right_turn(void);
void Stop(void);
void Auto_run(void);
void Xunji_Forward_run(void);
void Xunji_Left_turn(void);
void Xunji_Right_turn(void);
void Xunji_Stop(void);
void Xunji_run(void);
void Control_GPIOE_Config(void);


#endif  /* __MOTOR_CONTROL_H */
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2019-4-7
在线时间
3 小时
发表于 2019-4-27 15:10:23 | 显示全部楼层
#include "motor_control.h"
#include "sys.h"
#include "usart.h"       

#define ONWARD   1
#define BACKWARD 0
extern vu8  count;
extern vu32 averge_distance;
vu8 left,right,middle;
vu32 S2;
vu32 S4;
vu32 S1;
vu32 timer;
int i;
//u16 Pwm_Right;
//u16 Pwm_Left;

/**************************************
        函数名        :Control_GPIO_Config
        函数描述:配置Control小车用到的I/O口
        输入参数:无
        输出参数:无
**************************************/
void  GPIO_Configuration(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;   //定义两个GPIO_InitTypeDef类型的结构体
       
        RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC,ENABLE);//开启GPIOA外设时钟

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_0|GPIO_Pin_13; //选择要控制的GPIOA引脚(PA.4,pa5端口配置)
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置引脚模式为推挽式输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置引脚速度为50Mhz
        GPIO_Init(GPIOC,&GPIO_InitStructure); //调用库函数初始化        GPIOA
        //刚开始停止电机转动
        GPIO_ResetBits(GPIOC,GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_0|GPIO_Pin_13);
       
}

void TIM3_Configuration(u16 CCR_Val_12,u16 CCR_Val_34)
{
       
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef    TIM_OCInitStructure;
       
        //CCR_Val_12 = 900;
        //CCR_Val_34 = 900;
        /* -----------------------------------------------------------------------
    TIM3 Configuration: generate 2 PWM signals with 2 different duty cycles:
    TIM3CLK = 36 MHz, Prescaler = 0x0, TIM3 counter clock = 36 MHz
    TIM3 ARR Register = 999 => TIM3 Frequency = TIM3 counter clock/(ARR + 1)
    TIM3 Frequency = 36 KHz.
          TIM3 Channel1 duty cycle = (CCR_Val_12/ TIM3_ARR)* 100 = 50%
          TIM3 Channel1 duty cycle = (CCR_Val_34/ TIM3_ARR)* 100 = 50%
  ----------------------------------------------------------------------- */
        /***通道1的配置*****/
        TIM_TimeBaseStructure.TIM_Period = 999;        //设定总周期值
        TIM_TimeBaseStructure.TIM_Prescaler = 0;      //设置预分频:不预分频,即为36MHz
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ;        //设置时钟分频系数:不分频
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上计数模式
       
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
       
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;            //配置为PWM模式1
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;       
  TIM_OCInitStructure.TIM_Pulse = CCR_Val_12;           //设置跳变值,当计数器计数到这个值时,电平发生跳变
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;  //当定时器计数值小于CCR_Val时为高电平
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = CCR_Val_34;          //设置通道3的电平跳变值,输出另外一个占空比的PWM
       
  TIM_OC1Init(TIM3, &TIM_OCInitStructure);         //使能通道1
  TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
       

  TIM_OC2Init(TIM3, &TIM_OCInitStructure);          //使能通道2
        TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
        /***通道3的配置*****/
       
  TIM_ARRPreloadConfig(TIM3, ENABLE);                         // 使能TIM3重载寄存器ARR
  TIM_Cmd(TIM3, ENABLE);                   //使能定时器3       
               
}

/*************前进***********/
void Forward_run(void)
{
     /*左侧轮子停转*/
//                                Pwm_Left = 900;
//                                Pwm_Right = 900;
                               
                                TIM3_Configuration(700,700);
       
                                GPIO_ResetBits(GPIOC,GPIO_Pin_2);//0
                                GPIO_SetBits(GPIOC,GPIO_Pin_3);//1
                       
                        GPIO_ResetBits(GPIOC,GPIO_Pin_0);//0
                                GPIO_SetBits(GPIOC,GPIO_Pin_13);//1
     
                               
}
/*************后退***********/
void Backward_run(void)
{
   
    /*左侧轮子停转*/
//                                Pwm_Left = 900;
//                                Pwm_Right = 900;
                               
                                TIM3_Configuration(700,700);
       
          
             GPIO_SetBits(GPIOC,GPIO_Pin_2);//1
              GPIO_ResetBits(GPIOC,GPIO_Pin_3);//0
                         
              GPIO_SetBits(GPIOC,GPIO_Pin_0);//1
               GPIO_ResetBits(GPIOC,GPIO_Pin_13);//0
               
}
回复

使用道具 举报

3

主题

11

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2019-4-19
在线时间
8 小时
 楼主| 发表于 2019-4-30 14:33:31 | 显示全部楼层
拾叶 发表于 2019-4-27 15:11
#ifndef __MOTOR_CONTROL_H
#define        __MOTOR_CONTROL_H

谢谢你啊,有没有那种直接可以下载的工程的,我现在是个初学者,自己用你们的东西建立工程,总是出错
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2019-4-7
在线时间
3 小时
发表于 2019-5-14 13:51:26 | 显示全部楼层
无友与 发表于 2019-4-30 14:33
谢谢你啊,有没有那种直接可以下载的工程的,我现在是个初学者,自己用你们的东西建立工程,总是出错

我也是个初学者,之前遇到问题的时候上论坛逛逛正好看到你的问题,就回复了一下。之前我建工程的时候即使看网上的教程也遇到很多问题,后来发现正点的程序里有提供新建工程用的模板,直接用就行了。这么久了也不知道你还需要吗,随便上传一个之前下的程序吧

stm32-超声波避障.zip

9.18 MB, 下载次数: 350

小车程序

回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2019-6-17
在线时间
0 小时
发表于 2019-6-17 09:45:19 | 显示全部楼层
请问楼主有没有控制32f103通过l298n控制直流电机的程序,可以直接下载那种
回复

使用道具 举报

0

主题

10

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2019-6-22
在线时间
9 小时
发表于 2019-6-22 20:59:12 | 显示全部楼层
有没有连接的实物图呢?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-15 15:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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