24BYJ48电机的使用,带驱动程序

一、尺寸与接线

一种是红、橙、黄、粉、蓝的,电机实物如下:

注意电机的接头可能是XH2.54-5P的(上左图),也可能是ZH1.5-5P的(上右图)。

还有一种是红、黑、黄、棕、蓝的

这两种线色都是红色为公共线,然后挨着的4根线分别为A、B、C、D。

二、电机结构与参数

这种5线4相电机的内部结构图如下:

给公共极通正电,然后依次把A、B、C、D拉低,就可以形成一个旋转的磁场,拖动转子转动了。

电机自带减速器,减速比为1:64,步进角为5.625/64度,如果需要转动1圈,那么需要360/5.625*64=4096个脉冲信号。

电机还包含以下主要参数(仅供参考,不同厂家生产的有区别)

三、驱动电路

一般使用达林顿管驱动,如ULN2003A。

四、驱动程序

一般对力矩要求高使用2相励磁,对精度要求高使用1-2相励磁。

1、1相励磁的51单片机例程(使用ULN2003)

sbit D1=P1^4; //定义步进电机连接端口
sbit C1=P1^5; //定义步进电机连接端口
sbit B1=P1^6; //定义步进电机连接端口
sbit A1=P1^7; //定义步进电机连接端口

#define Coil_A  {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电
#define Coil_B  {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电
#define Coil_C  {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电
#define Coil_D  {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电

main()
{

 Speed=50; //调整转动速度,速度不可以调节的过快,不然就没有力矩转动了
 while(1)            
  {         
     Coil_A                  //遇到Coil_A  用{A1=1;B1=0;C1=0;D1=0;}代替
     DelayMs(Speed);         //改变这个参数可以调整电机转速 ,
	                         //数字越小,转速越大,力矩越小
     Coil_B                  //遇到Coil_B  用{A1=0;B1=1;C1=0;D1=0;}代替
     DelayMs(Speed);
     Coil_C                  //遇到Coil_C  用{A1=0;B1=0;C1=1;D1=0;}代替
     DelayMs(Speed); 
     Coil_D                  //遇到Coil_D  用{A1=0;B1=0;C1=0;D1=1;}代替
     DelayMs(Speed);
  }
}

2、2相励磁的51单片机例程(使用ULN2003)

sbit D1=P1^4; //定义步进电机连接端口
sbit C1=P1^5; //定义步进电机连接端口
sbit B1=P1^6; //定义步进电机连接端口
sbit A1=P1^7; //定义步进电机连接端口

#define Coil_AB {A1=1;B1=1;C1=0;D1=0;}//AB相通电,其他相断电
#define Coil_BC {A1=0;B1=1;C1=1;D1=0;}//BC相通电,其他相断电
#define Coil_CD {A1=0;B1=0;C1=1;D1=1;}//CD相通电,其他相断电
#define Coil_DA {A1=1;B1=0;C1=0;D1=1;}//DA相通电,其他相断电
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电

main()
{

 Speed=50; //调整转动速度,速度不可以调节的过快,不然就没有力矩转动了
 while(1)  
  {         
     Coil_AB                //遇到Coil_AB 用{A1=1;B1=1;C1=0;D1=0;}代替
     DelayMs(Speed);        //改变这个参数可以调整电机转速 ,
	                        //数字越小,转速越大,力矩越小
     Coil_BC                //遇到Coil_BC 用{A1=0;B1=1;C1=1;D1=0;}代替
     DelayMs(Speed);
     Coil_CD                //遇到Coil_CD 用{A1=0;B1=0;C1=1;D1=1;}代替
     DelayMs(Speed);
     Coil_DA                //遇到Coil_DA 用{A1=1;B1=0;C1=0;D1=1;}代替
     DelayMs(Speed);
  }
}

3、1-2相励磁的51单片机例程(使用ULN2003)

sbit D1=P1^4; //定义步进电机连接端口
sbit C1=P1^5; //定义步进电机连接端口
sbit B1=P1^6; //定义步进电机连接端口
sbit A1=P1^7; //定义步进电机连接端口

#define Coil_AB {A1=1;B1=1;C1=0;D1=0;}//AB相通电,其他相断电
#define Coil_BC {A1=0;B1=1;C1=1;D1=0;}//BC相通电,其他相断电
#define Coil_CD {A1=0;B1=0;C1=1;D1=1;}//CD相通电,其他相断电
#define Coil_DA {A1=1;B1=0;C1=0;D1=1;}//D相通电,其他相断电
#define Coil_A {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电
#define Coil_B {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电
#define Coil_C {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电
#define Coil_D {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电

main()
{

 Speed=100; //调整转动速度,速度不可以调节的过快,不然就没有力矩转动了
 while(1)  
  {         
     Coil_A       
     DelayMs(Speed);
     Coil_AB                 //遇到Coil_AB  用{A1=1;B1=1;C1=0;D1=0;}代替
     DelayMs(Speed);         //改变这个参数可以调整电机转速 ,
                             //数字越小,转速越大,力矩越小
     Coil_B       
     DelayMs(Speed);
     Coil_BC
     DelayMs(Speed);
     Coil_C       
     DelayMs(Speed);
     Coil_CD
     DelayMs(Speed);
     Coil_D       
     DelayMs(Speed);
     Coil_DA
     DelayMs(Speed);
  }
}

 

STM32单片机的串口通信需要以下步骤: 1. 初始化串口:设置波特率、数据位、停止位、奇偶校验位等参数。 2. 配置串口中断:设置串口接收中断,以便在接收到数据时触发中断处理函数进行处理。 3. 发送数据:通过串口发送数据,可以使用printf函数或者直接使用串口发送寄存器进行发送。 4. 接收数据:通过串口接收中断获取接收到的数据,并进行处理。 下面是一个简单的STM32单片机串口通信代码示例: ```c #include "stm32f10x.h" #include <stdio.h> void USART1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; //使能USART1和GPIOA的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE); //USART1 Tx(PA.09)配置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); //USART1 Rx(PA.10)配置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); //USART1配置 USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_Init(USART1, &USART_InitStructure); //使能USART1接收中断 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //USART1中断配置 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); //启动USART1 USART_Cmd(USART1, ENABLE); } void USART1_SendChar(uint8_t ch) { //等待发送缓冲区为空 while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); //发送一个字节数据 USART_SendData(USART1, ch); } void USART1_SendString(char* str) { while (*str) { USART1_SendChar(*str++); } } void USART1_IRQHandler(void) { if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { //接收到数据 uint8_t data = USART_ReceiveData(USART1); //处理数据 //清除接收中断标志 USART_ClearITPendingBit(USART1, USART_IT_RXNE); } if (USART_GetITStatus(USART1, USART_IT_TXE) != RESET) { //发送数据完成 USART_ClearITPendingBit(USART1, USART_IT_TXE); } } int main(void) { USART1_Init(); while (1) { //发送数据 USART1_SendString("Hello, world!\r\n"); //延时 for (volatile int i = 0; i < 1000000; i++); } } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qlexcel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值