当前位置:   article > 正文

STM32之L298N控制130电机+PWM调速_l298n怎么接线

l298n怎么接线

一,接线:

左右两边的OUT0~OUT4接130电机两端;

中间蓝色端口接电源,注意:两个电源口和一个接地口都要接上!!!!!!!!

偏左一些的排针用杜邦线接上io口,如果需要PWM控速的话,ENA和ENB的跳线帽需要拔掉,

然后用两根杜邦线分别连到一个io口,给高电平使能,如果是低电平则电机制动。

同时,IN1~IN4连接到pwm对应的GPIO口。

这样,接线部分基本完成。

具体可参考这位博主,

(63条消息) L298N 驱动电机与单片机的线路连接图_l298n驱动接线方法图_高佬君的博客-CSDN博客

二,编程序

1.首先给对应的GPIO口初始化,给用到的GPIO口设置推挽输出

L298N.c

  1. #include "L298N.h"
  2. void L298_Init(){
  3. GPIO_InitTypeDef GPIO_InitStructure;
  4. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE); //使能PG端口时钟
  5. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
  6. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
  7. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5; //IN1->PB4,IN2->PB5推挽输出
  8. GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIO
  9. GPIO_ResetBits(GPIOB,GPIO_Pin_4|GPIO_Pin_5); //PB4,PB5 输出低
  10. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; //IN3->PB1,IN4->PB0推挽输出
  11. GPIO_Init(GPIOB, &GPIO_InitStructure);
  12. GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1);
  13. GPIO_InitStructure.GPIO_Pin =GPIO_Pin_2|GPIO_Pin_6; //ENA->PB0,ENB->PB6,推挽输出
  14. GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
  15. GPIO_Init(GPIOB, &GPIO_InitStructure);
  16. }

L298N.h

  1. #ifndef __L298N_H__
  2. #define __L298N_H__
  3. #include "sys.h"
  4. #define IN1 PBout(4)
  5. #define IN2 PBout(5)
  6. #define IN3 PBout(0)
  7. #define IN4 PBout(1)
  8. #define ENA1 PBout(2)
  9. #define ENA2 PBout(6)
  10. void L298_Init();
  11. #endif

2.定时器初始化,设置对应的PWM

这里选用通用定时器TIM3的通道1~4;

首先,初始化TIM3,然后,设置端口重映射,并设置PWM输出的GPIO口为推挽复用输出!(切记)

而后,设置PWM参数,使能自动重装载寄存器,arr的预装载,选择通道,使能定时器,完成。

代码如下:PWM.c

  1. #include "PWM.h"
  2. void TIM3_PWM_Init(u16 arr,u16 psc){
  3. GPIO_InitTypeDef gpio;
  4. TIM_TimeBaseInitTypeDef time;
  5. TIM_OCInitTypeDef time_oc;
  6. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
  7. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
  8. //GPIO_PinRemapConfig();
  9. GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);
  10. gpio.GPIO_Mode=GPIO_Mode_AF_PP;
  11. gpio.GPIO_Pin=GPIO_Pin_5;
  12. gpio.GPIO_Speed=GPIO_Speed_50MHz;
  13. GPIO_Init(GPIOB,&gpio);
  14. gpio.GPIO_Mode=GPIO_Mode_AF_PP;
  15. gpio.GPIO_Pin=GPIO_Pin_1;
  16. gpio.GPIO_Speed=GPIO_Speed_50MHz;
  17. GPIO_Init(GPIOB,&gpio);
  18. time.TIM_Period=arr;
  19. time.TIM_Prescaler=psc;
  20. time.TIM_ClockDivision=0;
  21. time.TIM_CounterMode=TIM_CounterMode_Up;
  22. TIM_TimeBaseInit(TIM3,&time);
  23. time_oc.TIM_OCMode=TIM_OCMode_PWM1;
  24. time_oc.TIM_OutputState=TIM_OutputState_Enable;
  25. time_oc.TIM_OCPolarity=TIM_OCPolarity_High;
  26. TIM_OC1Init(TIM3,&time_oc);
  27. TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
  28. time_oc.TIM_OCMode=TIM_OCMode_PWM1;
  29. time_oc.TIM_OutputState=TIM_OutputState_Enable;
  30. time_oc.TIM_OCPolarity=TIM_OCPolarity_High;
  31. TIM_OC2Init(TIM3,&time_oc);
  32. TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
  33. time_oc.TIM_OCMode=TIM_OCMode_PWM2;
  34. time_oc.TIM_OutputState=TIM_OutputState_Enable;
  35. time_oc.TIM_OCPolarity=TIM_OCPolarity_High;
  36. TIM_OC3Init(TIM3,&time_oc);
  37. TIM_OC3PreloadConfig(TIM3,TIM_OCPreload_Enable);
  38. time_oc.TIM_OCMode=TIM_OCMode_PWM2;
  39. time_oc.TIM_OutputState=TIM_OutputState_Enable;
  40. time_oc.TIM_OCPolarity=TIM_OCPolarity_High;
  41. TIM_OC4Init(TIM3,&time_oc);
  42. TIM_OC4PreloadConfig(TIM3,TIM_OCPreload_Enable);
  43. TIM_ARRPreloadConfig(TIM3,ENABLE);//使能自动重装载寄存器,arr的预装载
  44. TIM_Cmd(TIM3,ENABLE);
  45. }

pwm.h

  1. #ifndef __PWM_H__
  2. #define __PWM_H__
  3. #include "sys.h"
  4. void TIM3_PWM_Init(u16 arr,u16 psc);
  5. #endif

main.c

  1. #include "stm32f10x.h"
  2. #include "L298N.h"
  3. #include "key.h"
  4. #include "uart.h"
  5. /************************************************
  6. ALIENTEK 精英STM32F103开发板实验0
  7. 工程模板
  8. 注意,这是手册中的新建工程章节使用的main文件
  9. 技术支持:www.openedv.com
  10. 淘宝店铺:http://eboard.taobao.com
  11. 关注微信公众平台微信号:"正点原子",免费获取STM32资料。
  12. 广州市星翼电子科技有限公司
  13. 作者:正点原子 @ALIENTEK
  14. ************************************************/
  15. int main(void)
  16. {
  17. u16 led0pwmval=0;
  18. u8 dir=1;
  19. L298_Init();
  20. TIM3_PWM_Init(450,7199);
  21. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  22. Uart_Init(115200);
  23. Key_Init();
  24. delay_init(); //延时函数初始化
  25. //设置 NVIC 中断分组 2
  26. ENA1=1;
  27. ENA2=1;
  28. //Ind=0;
  29. TIM_SetCompare2(TIM3,100);//设置通道2的占空比实现PWM调速,这里是100,在0~450间,越小速度越快
  30. // TIM_SetCompare1(TIM3,400);//设置通道1的占空比实现PWM调速
  31. // TIM_SetCompare3(TIM3,400);
  32. TIM_SetCompare4(TIM3,100);
  33. //Ina=1;
  34. //IN1=1;
  35. // IN4=1;
  36. while(1)
  37. {
  38. printf("%d\r\n", Get_Key(Key_Scan(0)) );
  39. delay_ms(1000);
  40. }
  41. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/690482
推荐阅读
相关标签
  

闽ICP备14008679号