步进电机转速控制.docx

上传人:b****8 文档编号:9292938 上传时间:2023-02-04 格式:DOCX 页数:28 大小:77.01KB
下载 相关 举报
步进电机转速控制.docx_第1页
第1页 / 共28页
步进电机转速控制.docx_第2页
第2页 / 共28页
步进电机转速控制.docx_第3页
第3页 / 共28页
步进电机转速控制.docx_第4页
第4页 / 共28页
步进电机转速控制.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

步进电机转速控制.docx

《步进电机转速控制.docx》由会员分享,可在线阅读,更多相关《步进电机转速控制.docx(28页珍藏版)》请在冰豆网上搜索。

步进电机转速控制.docx

步进电机转速控制

步进电机转速控制求助!

小弟学步进电机,哪位大虾可以发给我一个步进电机转速控制的程序,最好有注解的,C语言的更好,定时器控制的要!

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

步进电机正转(转n*30度)

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

voidmotor_ffw(unsignedinttime)

{

  unsignedinti,j;

  ms30_count=time;

  TR1=1;

  for(j=0;j<12;j++)

  //转n*30度

  {

  for(i=0;i<8;i++)

  //一个周期转30度

  {

  if(ms30_count<=0)

  {

  P3=Ffw_Change;//取数据

  ms30_count=time;

  TR1=0;

  }

  elseP3=Ffw_Change;

    //delayms(time);//调节转速

  }

  }

//P3=0xf0;//使步进电机掉电

}

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

步进电机反转(转n*30度)

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

voidmotor_rev(unsignedinttime)

{

  unsignedinti,j;

  ms30_count=time;

  TR1=1;

  for(j=0;j<12;j++)

  //转n*30度

  {

  for(i=0;i<8;i++)

  //一个周期转30度

  {

  if(ms30_count<=0)

  {

  P3=Rev_Change;//取数据

  ms30_count=time;

  TR1=0;

  }

  elseP3=Ffw_Change;

    //delayms(time);//调节转速

  }

  }

//P3=0xf0;//使步进电机掉电

}

voidMotor_Control()

{

  ad_display();

  if(receivebuf[0]>receivebuf[1])

  {

  if(sub<1)

motor_rev(10);

elseif((sub>=1)&&(sub<=3))

motor_rev(5);

elseif((sub>3)&&(sub<=5))

motor_rev

(1);

  }

  elseif(receivebuf[0]

  {

  if(sub<1)

motor_ffw(10);

elseif((sub>=1)&&(sub<=3))

motor_ffw(5);

elseif((sub>3)&&(sub<=5))

motor_ffw

(1);

  }

  elseP3=0xf0;

}

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

定时中断服务程序

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

voidtimer1_int(void)interrupt3

{

  TH1=0xdc;

  TL1=0x00;

  ms10_count++;

  ms30_count--;

}

其中sub=abs(receivebuf[0]-receivebuf[1]);

ad_display函数得出AD两个通道receivebuf[0]和receivebuf[1]的值,根据这两个值的差去控制步进电机转速。

用定时器1控制转速,可是电压值在LCD上显示是有差的,但步进电机就是不转!

这是为啥呢?

UID

129693 

帖子

精华

积分

阅读权限

10 

在线时间

1小时 

注册时间

2010-11-27 

最后登录

2011-3-18 

查看详细资料

TOP

8051

管理员

版主

∙个人空间

∙发短消息

∙加为好友

∙当前离线

2#大中小发表于2011-3-210:

22 只看该作者

;/********************************************************************************

;*  标题:

  xl系列单片机实验仪演示程序LCD1602显示步进电机控制器速度方向圈数可调*

;*  文件:

  lcd1602dj.asm                                    *

;*  日期:

  2006-1-5                                        *

;*  版本:

  3.0(试验通过版)可用xl600-xl1000单片机综合试验仪试验          *

;*  邮箱:

  sxj1974@                                    *

;*  网站:

                        *

;********************************************************************************

;*  描述:

          LCD1602显示步进电机控制器速度方向圈数可调          *

;K1-启动与停止步进电机运行;K2-设定步进电机运行圈数(1-20圈)            *

;K3-设定步进电机转动方向;K4-设定步进电机运行速度                    *

;步进电机的转速控制分16档,数字越小,转速越快。

                      *

;7.5度步进电机;周期7.5×4=30度,电机转动一圈需12个周期?

                *

;资源:

p1.0-p1.3接反向器74ls14,输出后接步进电机p3.7接小喇叭提供按键音      *

;p1.4-p1.7接端口按键:

lcd1602插入实验仪                            *

;********************************************************************************

;*【版权】Copyright(C)深圳市学林电子有限公司              *

;*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!

            *

;*  【技术支持】请访问  官方论坛          *

;********************************************************************************/

        K1  EQU  P1.4    ;K1键

        K2  EQU  P1.5    ;K2键

        K3  EQU  P1.6    ;K3键

        K4  EQU  P1.7    ;K4键

        BA  EQU  P1.0    ;步进电机A端

        BB  EQU  P1.1    ;步进电机B端

        BC  EQU  P1.2    ;步进电机C端

        BD  EQU  P1.3    ;步进电机D端

        BEEP  EQU  P3.7  ;蜂鸣器

        RS  EQU  P2.0

        RW  EQU  P2.1

        EN  EQU  P2.2

        LCD_X  EQU  2FH

        RATE    EQU  32H  ;转速档次

        D_BUF1  EQU  33H  ;显示缓存1

        D_BUF2  EQU  34H  ;显示缓存2

        TEMP    EQU  35H  ;临时过渡

        TURN_NUM  EQU  36H  ;存放运行圈数

        CYCLE    EQU  37H  ;存放周期数

;--------------------------------------------

        ORG  0000H

        JMP  MAIN

        ORG  000BH

        JMP  INTT0

        ORG  0080H

;---------------------------------------------

MAIN:

        MOV  SP,#60H

        ACALL  SET_LCD    ;显示启动画面

        MOV  R4,#0FH

MAIN1:

        MOV  R5,#25      ;延时5S

        CALL  DELAY2

        DJNZ  R4,MAIN1

        ACALL  SET_LCD0

        CLR  20H.0      ;转速设置加减标记

        SETB  20H.1      ;正转、逆转标记

        SETB  20H.2      ;圈数设置加减标记

        SETB  20H.3      ;运行与停止标记

        SETB  20H.4

        MOV  R0,#00H

        MOV  R1,#00H

MAIN2:

        MOV  TURN_NUM,#5  ;默认转5圈

        MOV  A,TURN_NUM

        MOV  LCD_X,#04H

        ACALL  DATA_CONV  ;显示圈数

        ACALL  SET_LCD1    ;显示STOP

        MOV  R2,TURN_NUM

        MOV  CYCLE,#12    ;12个周期,电机转一圈。

        MOV  RATE,#08H    ;预设为中速

        MOV  A,RATE

        MOV  LCD_X,#0DH

        ACALLDATA_CONV    ;显示转速比例

        MOV  P1,#0F0H

        MOV  TMOD,#01H

        MOV  TL0,#33H

        MOV  TH0,#0F5H

        SETB  EA

        SETB  ET0

M_LOOP:

        MOV  A,CYCLE      ;12个周期,电机转一圈。

        CJNEA,#00H,LOOP0

        MOV  CYCLE,#12

        DEC  R2

        MOV  A,R2

        MOV  LCD_X,#04H    ;显示剩余圈数

        ACALL  DATA_CONV

        CJNE  R2,#00H,LOOP0

        CLR  TR0

        MOV  P1,#0F0H

        MOV  R2,TURN_NUM    ;重新送圈数

        SETB20H.3        ;STOP

        MOV  A,R2

        MOV  LCD_X,#04H    ;显示圈数

        ACALL  DATA_CONV

        ACALL  SET_LCD1

LOOP0:

        JB  20H.1,LOOP0A

        ACALL  SET_LCDR    ;<<

        JMP  LOOP0B

LOOP0A:

        ACALL  SET_LCDF    ;>>

LOOP0B:

        JB  K1,LOOP1

        JNB  20H.3,LOOP0C

        ACALL  SET_LCD2    ;RUNNING

        SETB  TR0        ;启动步进电机运行

        CLR  20H.3        ;停止运行标记

        CALL  BEEP_BL

        JMP  LOOP1

LOOP0C:

        CLR  TR0        ;停止步进电机运行

        SETB  20H.3      ;启动运行标记

        MOV  P1,#0F0H

        MOV  CYCLE,#12

        MOV  R2,TURN_NUM

        ACALL  SET_LCD1    ;STOP

        CALL  BEEP_BL

        JMP  M_LOOP

LOOP1:

        JB  K2,LOOP2

        CALL  BEEP_BL

        JNB  20H.2,LOOP1B

        MOV  A,TURN_NUM    ;增加圈数

        INCA

        MOV  TURN_NUM,A

        MOV  LCD_X,#04H    ;显示设定圈数

        ACALL  DATA_CONV

        MOV  R2,TURN_NUM

        MOV  A,TURN_NUM

        CJNE  A,#20,LOOP1A

        CLR  20H.2

LOOP1A:

        JMP  LOOP2

LOOP1B:

        MOV  A,TURN_NUM    ;减少圈数

        DECA

        MOV  TURN_NUM,A

        MOV  LCD_X,#04H    ;显示设定圈数

        ACALL  DATA_CONV

        MOV  R2,TURN_NUM

        MOV  A,TURN_NUM

        CJNE  A,#01H,LOOP2

        SETB20H.2

LOOP2:

        JB  K3,LOOP3      ;换向

        CLR  TR0

        MOV  P1,#0F0H

        SETB20H.3        ;STOP标志

        ACALL  SET_LCD1

        CPL  20H.1        ;换向标志

        JB  20H.1,LOOP2A    ;根据换向标志来显示转动方向

        ACALL  SET_LCDR

        JMP  LOOP2B

LOOP2A:

        ACALL  SET_LCDF

LOOP2B:

        CALLBEEP_BL

        MOV  R2,TURN_NUM    ;换向后,从设定值开始运行

        MOV  A,R2

        MOV  LCD_X,#04H    ;显示设定圈数

        ACALL  DATA_CONV

LOOP3:

        JB  K4,LOOP4

        CLR  20H.4        ;在运行过程调整速率时,要使步进电机先停止转动

        CALL  BEEP_BL

        JNB  20H.0,LOOP5

        mov  temp,CYCLE

        MOV  A,RATE        ;减速过程

        INCA

        MOV  RATE,A

        MOV  LCD_X,#0DH

        ACALLDATA_CONV

        MOV  A,RATE

        CJNE  A,#10H,LOOP4

        CLR  20H.0

LOOP4:

        SETB  20H.4

        JMP  M_LOOP

LOOP5:

        MOV  A,RATE        ;加速过程

        DECA

        MOV  RATE,A

        MOV  LCD_X,#0DH

        ACALLDATA_CONV

        MOV  A,RATE

        CJNE  A,#01H,LOOP6

        SETB20H.0

LOOP6:

        SETB  20H.4

        JMP  M_LOOP

;---------------------------------------------

;步进电机正转走一步子程序

;---------------------------------------------

FFW:

        MOV  A,R0

        MOV  DPTR,#TABLE_F

        MOVC  A,@A+DPTR

        CJNE  A,#00H,FFW1

        MOV  R0,#00H

        DEC  CYCLE      ;每8步为一个周期

        JMP  FFW2

  FFW1:

        MOV  P1,A

        INC  R0

FFW2:

        RET

;---------------------------------------------

;步进电机逆转走一步子程序

;---------------------------------------------

REV:

        MOV  A,R0

        MOV  DPTR,#TABLE_R

        MOVC  A,@A+DPTR

        CJNE  A,#00H,REV1

        MOV  R0,#00H

        DEC  CYCLE      ;每8步为一个周期

        JMP  REV2

REV1:

        MOV  P1,A

        INC  R0

REV2:

        RET

;---------------------------------------------

;中断服务子程序

;中断定时2ms

;20H.1=1正转,20H.1=0反转

;---------------------------------------------

INTT0:

        PUSH  ACC

        CLR  TR0

        MOV  TL0,#33H

        MOV  TH0,#0F5H

        SETB  TR0

        JNB  20H.4,INTT0B    ;K4键按下时,停止步进电机运行

        INC  R3

        MOV  B,R3

        MOV  A,RATE        ;中断次数来调整延时时间的长短

        CJNE  A,B,INTT0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1