STM32单片机驱动步进电机(一)
驱动电机运动
软件:Keil5
设备:步进电机(17HS4401)、驱动器、单片机(STM32F103)
接线方式:
- 电机与驱动器:黑A+,绿A-,红B+,蓝B-
- 驱动器与单片机:MF-PC8,DR-PC9,PU-PB5,COM-3.3V
main.c:(注解部分为此次用不上的程序)
1#include "led.h" 2#include "delay.h" 3#include "key.h" 4#include "sys.h" 5#include "usart.h" 6#include "timer.h" 7#include "foot_definition.h" 8 9int main(void) 10{ 11 TIM3_PWM_Init(99,99); 12 PC89_Init(); 13 //uart1_init(115200);//PA9 PA10 14 //uart2_init(115200);//PA2 PA3 15 //uart3_init(115200);//PB10 PB11 16 delay_init(); 17 //KEY_Init(); 18 LED_Init(); 19 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 20 21 while (1) 22 { 23 GPIO_SetBits(GPIOC,GPIO_Pin_9); 24 GPIO_SetBits(GPIOC,GPIO_Pin_8); 25 TIM_Cmd(TIM3, ENABLE); 26 LED1=!LED1; 27 } 28}
time.c:
1#include "timer.h" 2#include "led.h" 3#include "usart.h" 4 5void TIM3_PWM_Init(u16 arr,u16 psc) 6{ 7 GPIO_InitTypeDef GPIO_InitStructure; 8 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; 9 TIM_OCInitTypeDef TIM_OCInitStructure; 10 11 12 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); 13 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); 14 15 GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); 16 17 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; 18 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 19 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 20 GPIO_Init(GPIOB, &GPIO_InitStructure); 21 22 TIM_TimeBaseStructure.TIM_Period = arr; 23 TIM_TimeBaseStructure.TIM_Prescaler =psc; 24 TIM_TimeBaseStructure.TIM_ClockDivision = 0; 25 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 26 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 27 28 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; 29 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 30 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 31 TIM_OCInitStructure.TIM_Pulse=arr; 32 TIM_OC2Init(TIM3, &TIM_OCInitStructure); 33 34 TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); 35 36 TIM_Cmd(TIM3, DISABLE); 37}
time.h:
1#ifndef __TIMER_H 2#define __TIMER_H 3#include "sys.h" 4 5void TIM3_PWM_Init(u16 arr,u16 psc);
foot_definition.c:(名字随意取得,用以存放调用串口的程序)
1#include "foot_definition.h" 2#include "stm32f10x_it.h" 3#include "delay.h" 4 5void PC89_Init(void) // 6{ 7 8 GPIO_InitTypeDef GPIO_InitStructure; 9 10 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); 11 12 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9; 13 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 14 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 15 16 GPIO_Init(GPIOC, &GPIO_InitStructure); 17 GPIO_ResetBits(GPIOC,GPIO_Pin_8); //MF 18 GPIO_ResetBits(GPIOC,GPIO_Pin_9); //DIR 19}
foot_definition.h:
1#ifndef _FOOT_DEFINITION_H 2#define _FOOT_DEFINITION_H 3 4void PC89_Init(void);
可以通过修改 TIM3_PWM_Init(99,99) 括号中的两个参数来改变PWM脉冲发送的频率,以达到控制电机转速的目的。