完美WORD格式
步电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。您可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
步进电机28BYJ48型四相八拍电机,电压为DC5V—DC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A。。。),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。)
左——右 CCW旋转方向(轴伸端视)
步进电机分三种:永磁式(PM) ,反应式(VR)和混合式(HB)永磁式步进一般为两相,转矩和体积较小,步进角一般为7.5度 或15度;反应式步进一般为三相,可实现大转矩输出,步进角一般为1.5度,但噪声和振动都很大。在欧美等发达国家80年代已被淘汰;混合式步进是指混合了永磁式和反应式的优点。它又分为两相和五相:两相步进角一般为1.8度而五相步进角一般为 0.72度。这种步进电机的应用最为广泛。
红线接电源5V,橙色电线接P1.3口,黄色电线接P1.2口,粉色电线接P1.1口,蓝色接P1.0口。由于单片机接口信号不够大需要通过ULN2003放大再连接到相应的电机接口,如下:
步进电机驱动
橙 A P1.3 1 黄B P1.2 粉C P1.1 蓝D P1.0 十六制(P1口) 0 0 0 0x08 专业 知识分享
完美WORD格式
1 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 1 0x0c 0x04 0x06 0x02 0x03 0x01 0x09 速度计算公式:运转速度=脉冲频率×60/步进电机分割数/减速比64
步进电机分割数=360/6.625
调速程序:
#include
#define uchar unsigned char #define uint unsigned int
#define st_mo P1
sbit k1=P2^0;//正转键 sbit k2=P2^1;//反转键 sbit k3=P2^2;//停止按键 sbit k4=P2^3;//加按键 sbit k5=P2^4;//减按键
sbit dula=P2^5;//定义段码位 sbit wela=P2^6;//定位段码位 sbit alarm=P2^7;//定义蜂鸣器位
uchar ccw[]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //反转 uchar cw[]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; //正传
uchar code ducode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//定义段码 uchar code wecode[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//定位段码
uchar tempdata[8],speed=10;
void delay(uchar z) //延时1ms {
uchar i,j;
for(i=z;i>0;i--) for(j=110;j>0;j--); }
void delay500us(void) //延时500us {
int i;
专业 知识分享
完美WORD格式
for(i=0;i<58;i++); }
void buzzer() //产生报警音 {
uchar t;
for(t=0;t<100;t++) {
delay500us();
alarm=!alarm; //产生脉冲 }
alarm=1; //关闭蜂鸣器 }
void ccw_motor()//反转子程序 {
uchar i;
for(i=0;i<8;i++)//旋转一周 内部旋转一周 {
for(i=0;i<8;i++) {
st_mo=ccw[i]; delay(speed); } } }
void cw_motor()//正转子程序 {
uchar i;
for(i=0;i<8;i++)//旋转一周 内部旋转一周 {
for(i=0;i<8;i++) {
st_mo=cw[i]; delay(speed); } } }
void diaplay(uchar first,uchar num) //LED 显示函数 {
static uchar i;
P0=0xff;
专业 知识分享
完美WORD格式
wela=1; wela=0;
P0=wecode[i+first]; wela=1; wela=0;
P0=tempdata[i]; dula=1; dula=0; i++;
if(i==num) {
i=0; } }
void init()/定时器1、2初始化函数 {
TMOD|=0X11;
TH0=(65536-2000)/256; TL0=(65536-2000)%6; TH1=(65536-1000)/256; TL1=(65536-1000)%6; EA=1; ET0=1; ET1=1; TR0=1; TR1=1;
PT0=1; //边沿触发 如不设置 LED显示时会跳动 }
void main() {
uchar num; init(); while(1) {
if(k1==0) {
buzzer();
for(num=0;num<512;num++) {
if(k3==0)
专业 知识分享
完美WORD格式
{
buzzer(); break; }
cw_motor(); } }
if(k2==0) {
buzzer();
for(num=0;num<64;num++) {
if(k3==0) {
buzzer(); break; }
ccw_motor(); } }
st_mo=0; } }
void timer0() interrupt 1//定时器1 {
TH0=(65536-2000)/256; //延时2ms TL0=(65536-2000)%6;
tempdata[0]=ducode[speed]; tempdata[1]=ducode[speed/10]; diaplay(0,2); }
void timer1() interrupt 3//定时器2 {
TH1=(65536-1000)/256; //延时1ms TL1=(65536-1000)%6; if(k4==0) {
delay(5); if(k4==0) speed++; }
while(k4==0);
专业 知识分享