【原创】基于单片机的智能小车之步进电机28BYJ-48的转动_01

【原创】基于单片机的智能小车之步进电机28BYJ-48的转动_01_Cayden

最近想做一个步进电机转动,看着挺简单,也就5根线连接,结果栽在了线序上

先简单讲讲编程所需要的相关必要知识,再说驱动步进电机的程序

一:先来认识 步进电机28BYJ-48

28BYJ-48:全称为:4项8拍-28mm最大有效外径-永磁减速步进电机

28:有效的最大外径28mm

B:步进电机

Y:永磁

J:减速电机

4:4项

8:8拍

 

二:步进电机编程的必要知识

A:步进电机的3个关键参数:步进角+减速比+空载启动频率

01)步进角

4项8拍时,步进角5.625°(旋转360°,需要转动8个循环,每1个循环为1个4项8拍  64=8循环*8拍)

4项4拍时,步进角11.25°(旋转360°,需要转动8个循环,每1个循环为1个4项4拍 32=8循环*4拍)

本程序选择:每拍转动的角度5.625°

 

02:减速比

4项8拍时,步进角5.625°,如果减速比64,那么步进角=5.625°/64

4项4拍时,步进角11.25°,如果减速比64,那么步进角=11.25°/64

结论:减速比越高,精度越高,但是转速越慢(因为旋转每一拍的时间有限定,涉及到第三个参数:空载启动频率)

 

03:空载启动频率

空载启动频率最大为550Hz,也就是最小时间为1.8ms(T=1/f=1/550=1.8ms),本程序选定的是2ms/拍;

4项8拍,旋转360°需要的时间:

cnt=360/(5.625/64)=4096拍

T=2ms*4096拍=8192ms=8.192s,时间还是挺长的。

 

其实,步进电机还有一个参数:带载能力。只是此处编程用不上,我也没有列到关键参数里,等接下来的42步进电机+TB6600驱动器,再重点讲述,在此处,已经够用。

 

B:引脚电平

上图里列出8拍的电平,每4项8拍为一次循环

四相八拍

A=0          0x0e       0x01(ULN2003)

A=0;B=0; ... ...

B=0; ... ...

B=0;C=0; ... ...

C=0; ... ...

C=0;D=0; ... ...

D=0; 0x07 0x08(ULN2003)

D=0;A=0; 0x06 0x09(ULN2003)

A=0;

unsigned char code tab_motor[]={0x0e,0x0c,0x0d,0x09,0x0b,0x03,0x07,0x06}; //单片机直接和步进电机相连

unsigned char code tab_motor[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//ULN2003和步进电机直接相连

 

C:引脚

上午为了步进电机28BYJ-48引脚头痛很久,怎么弄都是光震动不转动,

//版本1:我淘宝网购买,有白色接插件,限定线序

步进电机引脚:

VCC:蓝色

A:粉色   P0^0

B:黄色   P0^1

C:橙色   P0^2

D:红色   P0^3

sbit motor_rotation_A=P0^0;

sbit motor_rotation_B=P0^1;

sbit motor_rotation_C=P0^2;

sbit motor_rotation_D=P0^3;

 

//版本2:网上讲解最多的线序

步进电机引脚:

VCC:红色

A:橙色   P0^0

B:黄色   P0^1

C:粉色   P0^2

D:蓝色   P0^3

sbit motor_rotation_A=P0^0;

sbit motor_rotation_B=P0^1;

sbit motor_rotation_C=P0^2;

sbit motor_rotation_D=P0^3;

 

三:编程思路

定时器T0定时中断,每2ms中断一次,中断里,数据变更一次输出到步进电机,循环输出或者4096次之后不再输出,两种方式都可以

 

/****************************************

电路元器件:STC89s52+步进电机28BYJ-48+ULN2003驱动

****************************************/

#include<reg52.h>

 

//cnt_duty

unsigned char cnt_1ms=0;

//unsigned char code tab_motor[]={0x0e,0x0c,0x0d,0x09,0x0b,0x03,0x07,0x06}; //4项8拍

unsigned char code tab_motor[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};  //4项8拍

 

//************************//

//功能:初始化函数

//输入:无

//输出:无

//************************//

void motor_rotation_Init(void)

{

P0=0x00;

}

 

//************************//

//功能:初始化函数

//输入:无

//输出:无

//************************//

void T0_init()  

{

TMOD=0x01;

 

TH0=0xF8; //2ms

TL0=0xcc;

 

ET0=1;

EA=1;

TR0=1;

}

 

//************************//

//功能:主函数main()

//输入:无

//输出:无   

//************************//

void main(void)

{

motor_rotation_Init();

T0_init();

 

while(1)

{

}

}

 

//************************//

//功能:T0中断函数

//输入:无

//输出:无

//************************//

void T0_intr(void) interrupt 1 using 1

{

static unsigned char i=0;

 

TH0=0xF8;  //2ms

TL0=0xcc;

 

//版本04 //ok

//  if(cnt_1ms%2==0)  //fuck!  (%) and(/),I can't define it  //if(cnt_1ms/2==0)

//     P0=tab_motor[i++];

++cnt_1ms;

if(i>=8)

i=0;

}

 

//中文:坤豆豆

//英文:Cayden

//时间:2020-11-15

//链接:https://mbb.eet-china.com/blog/1580238-417915.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值