驱动代码如下:
- #include "gpio.h"
- #include "debug.h"
- //#define N 4
- #define N 8
- //步进电机正反转数组 数组的值,即对应GPIO引脚的值
- //单四拍
- //uint16_t phasecw[4] ={0x0200,0x0100,0x0080,0x0040};// D-C-B-A.(9-8-7-6)
- //uint16_t phaseccw[4]={0x0040,0x0080,0x0100,0x0200};// A-B-C-D.(6-7-8-9)
- ////双四拍
- //uint16_t phasecw[4] ={0x0300,0x0180,0x00C0,0x0240};// DC-CB-BA-AD.
- //uint16_t phaseccw[4]={0x00C0,0x0180,0x0300,0x0240};// AB-BC-CD-DA.
- //四相八拍
- uint16_t phasecw[8] ={0x0200,0x0300,0x0100,0x0180,0x0080,0x00C0,0x0040,0x0240};// D-DC-C-CB-B-BA-A-AB.
- uint16_t phaseccw[8]={0x0040,0x00C0,0X0080,0x0180,0x0100,0x0300,0x0200,0x0240};// A-AB-B-BC-C-CD-D-DA.
- //电机初始化函数
- void Moto_Init(void)
- {
- //步进电机初始化
- // IN1: PB6 a
- // IN2: PB7 b
- // IN3: PB8 c
- // IN4: PB9 d
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 ;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB,&GPIO_InitStructure);
- GPIO_ResetBits(GPIOB,GPIO_Pin_6 | GPIO_Pin_7 |GPIO_Pin_8 |GPIO_Pin_9 );
- }
- //电机正转函数
- //其中,speed的值越大,速度越慢,值越小,速度越快,speed相当于调节脉冲速度
- //转动速度和脉冲频率成正比,在此处,延时越小,频率越高
- void Motorcw(u8 speed)
- {
- uint8_t i=0;
- for(i=0;i<n;i++)
</n;i++) - {
- GPIO_Write(GPIOB,phasecw);
- Delay_Ms(speed);
- }
- }
- //电机反转函数
- void Motorccw(u8 speed)
- {
- uint8_t i;
- for(i=0;i<n;i++)
</n;i++)
- {
- GPIO_Write(GPIOB,phaseccw);
- Delay_Ms(speed);
- }
- }
- //电机停止函数
- void MotorStop(void)
- {
- //GPIO_ResetBits(GPIOB,GPIO_Pin_6 | GPIO_Pin_7 |GPIO_Pin_8 |GPIO_Pin_9 );
- GPIO_Write(GPIOB,0x0000);
- }
- //电机正转角度
- void Motorcw_angle(int angle,int speed)
- {
- int i,j;
- j=(int)(angle/0.70312);
- for(i=0;i<j;i++)
</j;i++)
- {
- Motorcw(speed);
- }
- }
- //电机反转角度
- void Motorccw_angle(int angle,int speed)
- {
- int i,j;
- j=(int)(angle/0.70312);
- for(i=0;i<j;i++)
</j;i++)
- {
- Motorccw(speed);
- }
- }
复制代码
主函数可以调用我们驱动中的正反转函数来说实现想要的功能
- int main(void)
- {
- USART_Printf_Init(115200);
- Moto_Init();
- Delay_Init();
- printf("This is Stepper motor driver\r\n");
- Motorcw_angle(360,5); //步进电机正转角度函数
- MotorStop();
- Delay_Ms(1000);
- Motorccw_angle(360,5); //步进电机反转角度函数
- MotorStop();
- Delay_Ms(1000);
- }
复制代码
|