基于阿波罗stm32F767下uln2003驱动28byj48(四相步进电机)

本人采用的旋转相序为四相八拍,以此为例如下

通过数据手册,可以算出每八拍是5.625/8 = 0.703125度

如果需要旋转90度 则需要八拍的次数为:90/5.625*8 = 128

四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A。。。),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。)



#include "stepm.h"

#include "delay.h"
#include "sys.h"


//28BYJ-48


void ULN2003_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
                             
__HAL_RCC_GPIOC_CLK_ENABLE();
GPIO_InitStructure.Pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;     
GPIO_InitStructure.Speed  = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init (GPIOC, &GPIO_InitStructure);
}


void ULN2003_Driver_90(void)
 {
    u8 m,n;      
for(m=0;m<=127;m++) //顺时针90
  { 
PC6(1);PC7(0);PC8(0);PC9(0); delay_ms(2);//A
PC6(1);PC7(1);PC8(0);PC9(0); delay_ms(2);//AB
PC6(0);PC7(1);PC8(0);PC9(0); delay_ms(2);//B
PC6(0);PC7(1);PC8(1);PC9(0); delay_ms(2);//BC 
 PC6(0);PC7(0);PC8(1);PC9(0); delay_ms(2);//C
PC6(0);PC7(0);PC8(1);PC9(1); delay_ms(2);//CD
PC6(0);PC7(0);PC8(0);PC9(1); delay_ms(2);//D
PC6(1);PC7(0);PC8(0);PC9(1); delay_ms(2);//DA
  }
delay_ms(1000);
    for(n=0;n<=127;n++) //·逆时针90
 {
PC6(1);PC7(0);PC8(0);PC9(0); delay_ms(2);//A
PC6(1);PC7(0);PC8(0);PC9(1); delay_ms(2);//DA
PC6(0);PC7(0);PC8(0);PC9(1); delay_ms(2);//D
PC6(0);PC7(0);PC8(1);PC9(1); delay_ms(2);//CD  
 PC6(0);PC7(0);PC8(1);PC9(0); delay_ms(2);//C
PC6(0);PC7(1);PC8(1);PC9(0); delay_ms(2);//BC
PC6(0);PC7(1);PC8(0);PC9(0); delay_ms(2);//B
PC6(1);PC7(1);PC8(0);PC9(0); delay_ms(2);//AB
 }

PC6(0);PC7(0);PC8(0);PC9(0);//0

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
我可以回答这个问题。以下是一个基本的控制28BYJ-48步进电机STM32F103代码: #include "stm32f10x.h" #define MOTOR_PORT GPIOA #define MOTOR_PIN1 GPIO_Pin_0 #define MOTOR_PIN2 GPIO_Pin_1 #define MOTOR_PIN3 GPIO_Pin_2 #define MOTOR_PIN4 GPIO_Pin_3 void delay_us(uint32_t us) { uint32_t i; for(i=0; i<us*8; i++); } void motor_step(uint8_t step) { switch(step) { case 0: GPIO_ResetBits(MOTOR_PORT, MOTOR_PIN1); GPIO_ResetBits(MOTOR_PORT, MOTOR_PIN2); GPIO_ResetBits(MOTOR_PORT, MOTOR_PIN3); GPIO_SetBits(MOTOR_PORT, MOTOR_PIN4); break; case 1: GPIO_ResetBits(MOTOR_PORT, MOTOR_PIN1); GPIO_ResetBits(MOTOR_PORT, MOTOR_PIN2); GPIO_SetBits(MOTOR_PORT, MOTOR_PIN3); GPIO_SetBits(MOTOR_PORT, MOTOR_PIN4); break; case 2: GPIO_ResetBits(MOTOR_PORT, MOTOR_PIN1); GPIO_ResetBits(MOTOR_PORT, MOTOR_PIN3); GPIO_SetBits(MOTOR_PORT, MOTOR_PIN2); GPIO_SetBits(MOTOR_PORT, MOTOR_PIN4); break; case 3: GPIO_ResetBits(MOTOR_PORT, MOTOR_PIN3); GPIO_ResetBits(MOTOR_PORT, MOTOR_PIN2); GPIO_SetBits(MOTOR_PORT, MOTOR_PIN1); GPIO_SetBits(MOTOR_PORT, MOTOR_PIN4); break; case 4: GPIO_ResetBits(MOTOR_PORT, MOTOR_PIN4); GPIO_ResetBits(MOTOR_PORT, MOTOR_PIN2); GPIO_SetBits(MOTOR_PORT, MOTOR_PIN1); GPIO_SetBits(MOTOR_PORT, MOTOR_PIN3); break; case 5: GPIO_ResetBits(MOTOR_PORT, MOTOR_PIN4); GPIO_ResetBits(MOTOR_PORT, MOTOR_PIN1); GPIO_SetBits(MOTOR_PORT, MOTOR_PIN2); GPIO_SetBits(MOTOR_PORT, MOTOR_PIN3); break; case 6: GPIO_ResetBits(MOTOR_PORT, MOTOR_PIN4); GPIO_ResetBits(MOTOR_PORT, MOTOR_PIN1); GPIO_SetBits(MOTOR_PORT, MOTOR_PIN2); GPIO_SetBits(MOTOR_PORT, MOTOR_PIN3); break; case 7: GPIO_ResetBits(MOTOR_PORT, MOTOR_PIN4); GPIO_ResetBits(MOTOR_PORT, MOTOR_PIN3); GPIO_SetBits(MOTOR_PORT, MOTOR_PIN1); GPIO_SetBits(MOTOR_PORT, MOTOR_PIN2); break; } } int main(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = MOTOR_PIN1 | MOTOR_PIN2 | MOTOR_PIN3 | MOTOR_PIN4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(MOTOR_PORT, &GPIO_InitStructure); while(1) { for(int i=0; i<512; i++) { motor_step(i%8); delay_us(1000); } } }

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值