欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年步进电机程序 2.pdf

    • 资源ID:33383753       资源大小:103.09KB        全文页数:17页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年步进电机程序 2.pdf

    步进电机控制程序(2008-06-05 19:07:55) 转载标签:it 分类:程序设计步进电机 (键盘控制可调速) #include #define uchar unsigned char static unsigned int count; /计数static int step_index; /步进索引数,值为07 static bit turn; /步进电机转动方向static bit stop_flag; /步进电机停止标志static int speedlevel; / 步进电机转速参数,数值越大速度越大,最小值为1,速度最慢static int spcount; /步进电机转速参数计数void ddelay(void); /键盘扫描延时函数void delay(unsigned int endcount); /延时函数,延时为endcount*1 毫秒void gorun(); /步进电机控制步进函数 sbit P10=P20 ; /电机端口定义 sbit P11=P21 ; sbit P12=P22; sbit P13=P23 ; void ddelay(void) uchar i; for (i=300;i0;i-); uchar keyscan(void) uchar scancode; uchar tmpcode; P1 = 0 xf8; / 发全 0 行扫描码 if (P1&0 xf8)!=0 xf8) / 若有键按下 ddelay(); / 延时去抖动 if (P1&0 xf8)!=0 xf8) / 延时后再判断一次,去除抖动影响 scancode = 0 xfe; while(scancode&0 x08)!=0) / 逐行扫描 P1 = scancode; / 输出行扫描码 if (P1&0 xf8)!=0 xf8) / 本行有键按下名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 17 页 - - - - - - - - - tmpcode = (P1&0 xf8)|0 x07; return(scancode)+(tmpcode); / 返回特征字节码,为1 的位即对应于行和列 else scancode = (scancode1)|0 x01; / 行扫描码左移一位 return(0); / 无键按下,返回值为0 void main(void) uchar key; count = 0; step_index = 0; spcount = 0; P10 = 0; P11 = 0; P12 = 0; P13 = 0; EA = 1; /允许 CPU 中断TMOD = 0 x11; / 设定时器 0 和 1 为 16 位模式 1 ET0 = 1; /定时器 0 中断允许TH0 = 0 xFc; TL0 = 0 x18; /设定时每隔1ms 中断一次TR0 = 1; /开始计数stop_flag = 0; turn=0; speedlevel = 20; while(1) key = keyscan(); switch(key) case 0 x09: /按键 #,正转以 speedlevel = 1 的速度转1000*0.5MS=0.5S stop_flag=0; turn = 0; speedlevel =10; gorun(); delay(1000); break; case 0 x0c: /按键 *, 停止2000*0.5MS=0.5S stop_flag=1; break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 17 页 - - - - - - - - - case 0 x0a: /按键 0, 反转以 speedlevel = 1 的速度转1000*0.5MS=0.5S stop_flag=0; turn=1; speedlevel =10; gorun(); delay(1000); break; case 0 x11: / 按键 9, 以-speedlevel 的加速转 1000*0.5MS=0.5S stop_flag=0; if (speedlevel=1) speedlevel=1; else -speedlevel; gorun(); delay(1000); break; case 0 x12: / 按键 8,以 +speedlevel 的减速转1000*0.5MS=0.5S stop_flag=0; +speedlevel; gorun(); delay(1000); break; /定时器 0中断处理void timeint(void) interrupt 1 TH0=0 xFc; TL0=0 x18; / 设定时每隔1ms 中断一次count+; spcount-; if(spcount=0) / 速度调整,SPEEDLEVEL越大, 延时越长(延时约为1MS*SPEEDLEVEL ) , / 频率越小,速度越慢spcount = speedlevel; gorun(); void delay(unsigned int endcount)/ 延时函数,延时为endcount*0.5 毫秒 count=0; do while(count7) step_index=0; else /反转step_index-; if (step_index0) step_index=7; 步进电机 (键盘控制可调速加显示) #include #define uchar unsigned char static unsigned int count; /计数static int step_index; /步进索引数,值为07 static bit turn; /步进电机转动方向static bit stop_flag; /步进电机停止标志static int speedlevel; / 步进电机转速参数,数值越大速度越大,最小值为1,速度最慢static int spcount; /步进电机转速参数计数void ddelay(void); /键盘扫描延时函数void delay(unsigned int endcount); /延时函数,延时为endcount*1 毫秒名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 17 页 - - - - - - - - - void gorun(); /步进电机控制步进函数void Delay400Ms(void); void LCMInit(void); /LCM初始化void WriteCommandLCM(unsigned char WCLCM,BuysC); /BuysC为 0 时忽略忙检测void DisplayOneChar(uchar X, uchar Y , uchar DData); void DisplayListChar(uchar X, uchar Y ,uchar ListLength, uchar *DData,uchar n); sbit P10=P30 ; /电机端口定义 sbit P11=P31 ; sbit P12=P32; sbit P13=P33 ; uchar code speed= 0 x3a,0 x39,0 x38,0 x37,0 x36,0 x35,0 x34,0 x33,0 x32,0 x31,0 x30; uchar code stop = stop; uchar code go = go:; uchar code back = back:; uchar code max = max:8; void ddelay(void) uchar i; for (i=300;i0;i-); uchar keyscan(void) uchar scancode; uchar tmpcode; P1 = 0 xf8; / 发全 0 行扫描码 if (P1&0 xf8)!=0 xf8) / 若有键按下 ddelay(); / 延时去抖动 if (P1&0 xf8)!=0 xf8) / 延时后再判断一次,去除抖动影响 scancode = 0 xfe; while(scancode&0 x08)!=0) / 逐行扫描 P1 = scancode; / 输出行扫描码 if (P1&0 xf8)!=0 xf8) / 本行有键按下 tmpcode = (P1&0 xf8)|0 x07; return(scancode)+(tmpcode); / 返回特征字节码,为1 的位即对应于行和列 else scancode = (scancode1)|0 x01; / 行扫描码左移一位 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 17 页 - - - - - - - - - return(0); / 无键按下,返回值为0 void main(void) uchar key; count = 0; step_index = 0; spcount = 0; P10 = 0; P11 = 0; P12 = 0; P13 = 0; EA = 1; /允许 CPU 中断TMOD = 0 x11; / 设定时器 0 和 1 为 16 位模式 1 ET0 = 1; /定时器 0 中断允许TH0 = 0 xFc; TL0 = 0 x18; /设定时每隔1ms 中断一次TR0 = 1; /开始计数P0=0XFF; P3 &=0XEF; /573 片选LCMInit(); /LCM初始化Delay400Ms(); stop_flag = 0; turn=0; speedlevel = 5; DisplayListChar(0,0,3,go,1); / 每次扫描键盘显示更新一次uchar code go DisplayOneChar(0,1,0 x35); / 每次扫描键盘显示更新一次while(1) key = keyscan(); switch(key) case 0 x09: /按键 #,正转以 speedlevel = 1 的速度转1000*0.5MS=0.5S stop_flag=0; turn = 0; speedlevel =5; gorun(); WriteCommandLCM(0 x01,1);/显示清屏 , DisplayListChar(0,0,3,go,0); / 每次扫描键盘显示更新一次uchar code go DisplayOneChar(0,1,0 x35); / 每次扫描键盘显示更新一次 delay(1000); break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 17 页 - - - - - - - - - case 0 x0c: /按键 *, 停止2000*0.5MS=0.5S stop_flag=1; WriteCommandLCM(0 x01,1);/显示清屏 , DisplayListChar(0,0,4,stop,0); / 每次扫描键盘显示更新一次 break; case 0 x0a: /按键 0, 反转以 speedlevel = 1 的速度转1000*0.5MS=0.5S stop_flag=0; turn=1; speedlevel =5; gorun(); WriteCommandLCM(0 x01,1);/显示清屏 , DisplayListChar(0,0,5,back,0); / 每次扫描键盘显示更新一次 DisplayOneChar(0,1,0 x35); / 每次扫描键盘显示更新一次delay(1000); break; case 0 x11: / 按键 9, 以-speedlevel 的加速转 1000*0.5MS=0.5S stop_flag=0; if (speedlevel=2) speedlevel=2; else speedlevel-; gorun(); if(speedlevel=2) DisplayListChar(0,1,5,max,0); else DisplayOneChar(0,1, speedspeedlevel); /每次扫描键盘显示更新一次 delay(1000); break; case 0 x12: / 按键 8,以 +speedlevel 的减速转1000*0.5MS=0.5S stop_flag=0; speedlevel+; gorun(); WriteCommandLCM(0 x01,1);/显示清屏 , if(turn=0) DisplayListChar(0,0,3,go,0); /每次扫描键盘显示更新一次uchar code go DisplayOneChar(0,1, speedspeedlevel); / 每次扫描键盘显示更新一次 else DisplayListChar(0,0,5,back,0); /每次扫描键盘显示更新一次DisplayOneChar(0,1,speedspeedlevel); / 每次扫描键盘显示更新一次delay(1000); break; /定时器 0中断处理名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 17 页 - - - - - - - - - void timeint(void) interrupt 1 TH0=0 xFc; TL0=0 x18; / 设定时每隔1ms 中断一次count+; spcount-; if(spcount=0) / 速度调整,SPEEDLEVEL越大, 延时越长(延时约为1MS*SPEEDLEVEL ) , / 频率越小,速度越慢spcount = speedlevel; gorun(); void delay(unsigned int endcount)/ 延时函数,延时为endcount*0.5 毫秒 count=0; do while(count7) step_index=0; else /反转step_index-; if (step_index0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 17 页 - - - - - - - - - step_index=7; 步进电机 (自动循环调速 ) #include sbit P00=P20 ; sbit P01=P21 ; sbit P02=P22; sbit P03=P23 ; static unsigned int count; /计数static int step_index; /步进索引数,值为07 static bit turn; /步进电机转动方向static bit stop_flag; /步进电机停止标志static int speedlevel; / 步进电机转速参数,数值越大速度越快,最小值为1,速度最慢static int spcount; /步进电机转速参数计数void delay(unsigned int endcount); /延时函数,延时为endcount*0.5 毫秒void gorun(); /步进电机控制步进函数void main(void) count = 0; step_index = 0; spcount = 0; stop_flag = 0; P00 = 0; P01 = 0; P02 = 0; P03 = 0; EA = 1; /允许 CPU 中断TMOD = 0 x11; / 设定时器 0 和 1 为 16 位模式 1 ET0 = 1; /定时器 0 中断允许TH0 = 0 xFE; TL0 = 0 x0C; /设定时每隔0.5ms 中断一次TR0 = 1; /开始计数turn = 0; do speedlevel =4; delay(10000); /以 speedlevel = 4 的速度转2000*0.5MS=1S speedlevel =4; delay(10000); /以 speedlevel = 4 的速度转2000*0.5MS=1S stop_flag=1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 17 页 - - - - - - - - - delay(6000);/ 停止, 2000*0.5MS=3S stop_flag=0; while(1); /定时器 0中断处理void timeint(void) interrupt 1 TH0=0 xFE; TL0=0 x0C; / 设定时每隔0.5ms 中断一次count+; spcount-; if(spcount=0) spcount = speedlevel; gorun(); void delay(unsigned int endcount) count=0; dowhile(count7) step_index=0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 17 页 - - - - - - - - - else step_index-; if (step_index0) step_index=7; 步进电机控制Link - Thu, 17 Jan 2008 12:41:32 +0800 Description: 本设计采用的步进电机为35BYJ46 型四相八拍电机,电压为DC12V 。工作原理:利用INTER 8255A 对四相步进电机进行控制。当对步进电机施加一系列连续不断的控制脉冲时, 它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A 。 。 。 ) ,双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。 。 。 ) ,八拍( A-AB-B-BC-C-CD-D-DA-A。 。 。 )等。35BYJ46 步进电机为四相八拍,其相序表如下:步序 PA3 PA2 PA1 PA0 对应 A 口输出值1 0 0 0 1 01H 2 0 0 1 1 03H 3 0 0 1 0 02H 4 0 1 1 0 06H 5 0 1 0 0 04H 6 1 1 0 0 0CH 7 1 0 0 0 08H 8 1 0 0 1 09H 实验程序如下:;FILENAME: 步进电机控制 .ASM ;内容 : 步进电机控制STACK SEGMENT STACK DW 256 DUP(?) STACK ENDS P55A EQU 60H ;8255A 口输出P55C EQU 62H ;8255C 口输入P55CTL EQU 63H ;8255 控制口DATA SEGMENT BUF DB 0 MES DB K0-K6 ARE SPEED CONTROL, 0DH, 0AH 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 17 页 - - - - - - - - - DB K6 IS THE LOWEST SPEED, 0DH, 0AH DB K0 IS THE HIGHEST SPEED, 0DH, 0AH DB K7 IS THE DIRECTION CONTROL, 0DH, 0AH, $ TABLE DB 01H,03H,02H,06H,04H,0CH,08H,09H TABLE1 DB 01H,09H,08H,0CH,04H,06H,02H,03H DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, CS MOV DS, AX MOV AX, DATA MOV DS, AX MOV DX, OFFSET MES MOV AH, 09 ; dos 调用,在显示器上显示以$为结束符的字符串, INT 21H ; 若显示字符串要求回车换行则在其后加入 0dh,0ah。 MOV DX, P55CTL MOV AL, 8BH ;10001011B OUT DX, AL ;8255C 输入,A 输出 MOV BUF, 33H OUT1: MOV AL, BUF MOV DX, P55A OUT DX, AL ;从 A 口输出 00110011 PUSH DX MOV AH, 06H MOV DL, 0FFH ;DOS 调用,直接控制台读写,DL=0FF 输入, DL= 字符输出;INT 21H ;检查有无键按下 POP DX JE IN1 ;ZF=1,则跳转 MOV AH, 4CH ;带返回码结束,AL= 返回码INT 21H IN1: MOV DX, P55C IN AL,DX ;读开关状态 ,则跳转至相应开关处 TEST AL, 01H JNZ K0 TEST AL, 02H JNZ K1 TEST AL, 04H JNZ K2 TEST AL, 08H JNZ K3 TEST AL, 10H 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 17 页 - - - - - - - - - JNZ K4 TEST AL, 20H JNZ K5 TEST AL, 40H JNZ K6 STOP: MOV DX, P55A MOV AL, 0FFH JMP OUT1 K0: MOV BL, 10H SAM: TEST AL, 80H ;K7 是否为 1,是则步进电机正转,否则反转JZ ZX0 JMP NX0 K1: MOV BL, 18H JMP SAM K2: MOV BL, 20H JMP SAM K3: MOV BL, 40H JMP SAM K4: MOV BL, 80H JMP SAM K5: MOV BL, 0C0H JMP SAM K6: MOV BL, 0FFH JMP SAM ZX0: MOV BX,OFFSET TABLE MOV CX,0008H ZX1: MOV AL,BX OUT 61H,AL CALL DELAY INC BX LOOP ZX1 JMP OUT1 NX0: MOV BX,OFFSET TABLE1 MOV CX,0008H NX1: MOV AL,BX OUT 61H,AL CALL DELAY INC BX LOOP NX1 JMP OUT1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 17 页 - - - - - - - - - DELAY PROC NEAR ;延时子程序DELAY1: MOV CX, 05A4H DELAY2: LOOP DELAY2 DEC BL JNZ DELAY1 RET DELAY ENDP CODE ENDS END START 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 17 页 - - - - - - - - -

    注意事项

    本文(2022年步进电机程序 2.pdf)为本站会员(H****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开