L298N驱动步进电机程序(带PWM)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MCU选择的是stm32F103RBT6,步进电机选择4相5线5V步进电机马达减速电机28BYJ-48-5V,驱动选择的是L298N模块,模块供电选择12V供电(5V可能带不起来),模块的OUT1、OUT2接小型步进电机的一个线圈,OUT3、OUT4接另一个线圈,注意L298N模块的GND和MCU 的GND相连。

*******************************************************************************步进电机头文件Stepmotor.h
#ifndef __MOTOR_H
#define __MOTOR_H
void Motor_Init(void);
void Motor_Go(void);
#endif
源文件Stepmotor.c
#include "stepmotor.h"
#include "sys.h"
void Motor_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能PB端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_5| GPIO_Pin_7| GPIO_Pin_8;//PB3接IN1 PB5接IN2 PB7接IN3 PB8接IN4
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//IO口速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure);//
GPIO_ResetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_5| GPIO_Pin_7| GPIO_Pin_8);
******************************************************************************* PWM调制
头文件mypwm.h
#ifndef __TIMER_H
#define __TIMER_H
#include "sys.h"
void MYTIMER3_Init(u16 arr,u16 psc);
void TIM3_PWM_Init(u16 arr,u16 psc);
#endif
源文件mypwm.c
#include " mypwm.h
#include "stm32f10x.h"
void TIM3_PWM_Init(u16 arr,u16 psc)
{
TIM_OCInitTypeDef TIM_OCInitTypestucture;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitstucture;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能定时器时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO, ENABLE);//使能PC端口,复用时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;//PC6接ENA PC7接ENB GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //推挽复用输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//IO口速度为50MHz GPIO_Init(GPIOC, &GPIO_InitStructure);//
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);//
TIM_TimeBaseInitstucture.TIM_Period=arr;//自动装载值
TIM_TimeBaseInitstucture.TIM_Prescaler=psc;//预分频值
TIM_TimeBaseInitstucture.TIM_CounterMode=TIM_CounterMode_Up;//计数模式向上
TIM_TimeBaseInitstucture.TIM_ClockDivision=0 ;//
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitstucture);
TIM_OCInitTypestucture.TIM_OCMode=TIM_OCMode_PWM1 ;//模式1
TIM_OCInitTypestucture.TIM_OCPolarity=TIM_OCPolarity_High;//高电平
TIM_OCInitTypestucture.TIM_Pulse=599;//改变数值调节占空比
TIM_OCInitTypestucture.TIM_OutputState=TIM_OutputState_Enable;//使能
TIM_OC1Init(TIM3,&TIM_OCInitTypestucture);
TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);//使能预装载
TIM_OCInitTypestucture.TIM_OCMode=TIM_OCMode_PWM1 ;//模式1
TIM_OCInitTypestucture.TIM_OCPolarity=TIM_OCPolarity_High;//高电平
TIM_OCInitTypestucture.TIM_Pulse=599;
TIM_OCInitTypestucture.TIM_OutputState=TIM_OutputState_Enable;//使能
TIM_OC2Init(TIM3,&TIM_OCInitTypestucture);
TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);//使能预装载
TIM_Cmd(TIM3,ENABLE);//使能定时器
}
*******************************************************************************主函数
#include "stepmotor.h"
#include "stm32f10x.h"
#include "delay.h"
#include "timer.h"
int main()
{
delay_init();
Motor_Init();
TIM3_PWM_Init(999,71);// 72M/(71+1)(999+1)=1K hz
while(1) //正转
{
GPIO_SetBits(GPIOB,GPIO_Pin_5| GPIO_Pin_7| GPIO_Pin_8);//0111
GPIO_ResetBits(GPIOB,GPIO_Pin_3);
delay_ms(4);
GPIO_SetBits(GPIOB,GPIO_Pin_3| GPIO_Pin_7| GPIO_Pin_8);//1011
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
delay_ms(4);
GPIO_SetBits(GPIOB,GPIO_Pin_3| GPIO_Pin_5| GPIO_Pin_8);//1101
GPIO_ResetBits(GPIOB,GPIO_Pin_7);
delay_ms(4);
GPIO_SetBits(GPIOB,GPIO_Pin_3| GPIO_Pin_5| GPIO_Pin_7);//1110
GPIO_ResetBits(GPIOB,GPIO_Pin_8);
delay_ms(4);
}
}。

相关文档
最新文档