stepmotor备用

stepmotor.h

#ifndef __STEPMOTOR_H
#define __STEPMOTOR_H
#include “stm32f10x.h”

void motor_Init(void); //初始化引脚

extern void motor_F(int n); //反转,n 脉冲间隔时间 extern 可有可无 表明函数在其他地方有定义
void motor_Z(int n); //正转,n 脉冲间隔时间
void Motor_Off(void); //关闭电机
void Motor_Angle(int angle,int n); // angle 角度 n 脉冲间隔时间

#endif

stepmotor.c

#include “stepmotor.h”
#include “stm32f10x.h”
#include “delay.h”
/**********************************************
用正点原子战舰版 STM32F103ZET6
PC0–PC7是给OLED显示屏用的,现在显示屏不用,
使用PC0,PC1,PC2,PC3 给步进电机用
驱动板上接线
PC0 -------IN1
PC1 -------IN2
PC2 -------IN3
PC3 -------IN4
步进电机型号:28BYJ-48 5VDC
驱动芯片;ULN2003APG
在CSDN找程序,改参数
2020/3/15 LZ完成
2020/3/17 修改注释
***********************************************/

#define orange_H GPIO_SetBits(GPIOC, GPIO_Pin_0); //橙色
#define orange_L GPIO_ResetBits(GPIOC, GPIO_Pin_0);

#define yellow_H GPIO_SetBits(GPIOC, GPIO_Pin_1); //黄色
#define yellow_L GPIO_ResetBits(GPIOC, GPIO_Pin_1);

#define pink_H GPIO_SetBits(GPIOC, GPIO_Pin_2); //粉色
#define pink_L GPIO_ResetBits(GPIOC, GPIO_Pin_2);

#define blue_H GPIO_SetBits(GPIOC, GPIO_Pin_3); //蓝色
#define blue_L GPIO_ResetBits(GPIOC, GPIO_Pin_3);

void motor_Init(void)//PC0,PC1,PC2,PC3
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStruct);

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStruct);

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStruct);

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStruct);


GPIO_ResetBits(GPIOC, GPIO_Pin_0);
GPIO_ResetBits(GPIOC, GPIO_Pin_1);
GPIO_ResetBits(GPIOC, GPIO_Pin_2);
GPIO_ResetBits(GPIOC, GPIO_Pin_3);

}

void motor_F(int n) //反转 逆时针
{
orange_H;
delay_ms(n);
blue_L;
delay_ms(n);
yellow_H;
delay_ms(n);
orange_L;
delay_ms(n);
pink_H;
delay_ms(n);
yellow_L;
delay_ms(n);
blue_H;
delay_ms(n);
pink_L;
delay_ms(n);
}

void motor_Z(int n) //正转 顺时针
{
blue_H;
delay_ms(n);
orange_L;
delay_ms(n);
pink_H;
delay_ms(n);
blue_L;
delay_ms(n);
yellow_H;
delay_ms(n);
pink_L;
delay_ms(n);
orange_H;
delay_ms(n);
yellow_L;
delay_ms(n);

}

void Motor_Off(void)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3);
}

void Motor_Angle(int angle,int n) //angle 角度 n 脉冲间隔时间
{
u16 j;
for(j=0;j<64*angle/45;j++) // 64 减速比 定子8个齿,正反转函数执行一次,转子转一个齿距角。360/45=8
{
motor_F(n); // 反转(逆时针),换成正转函数就正转(顺时针)
}
}

main.c

int main(void) //步进电机主函数 逆时针转360度 停止
{
motor_Init();
delay_init();

Motor_Angle(360,10);

Motor_Off();

while(1)
{	 
	delay_ms(1000); 
}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值