原理图:
两相六线步进电机,步进角7.5度,额定工作电压12V,完全可以使用5V做实验。
产品详情:
http://www.willar.com/shop_view.asp?id=48。
以下是本站管理员gguoqing专门编写的演示程序。
C语言范例: /******************************************************************* /* /* ME300系列单片机开发系统演示程序-步进电机键控正反转实验 /* /* 邮箱: gguoqing@willar.com /* 网站: http://www.willar.com ; /* 作者: gguoqing /* 时间: 2006/05/30 /* /*【版权】COPYRIGHT(C)伟纳电子 www.willar.com ALL RIGHTS RESERVED /*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! /* /******************************************************************/ #include <reg51.h> //51芯片管脚定义头文件 #include <intrins.h> //内部包含延时函数 _nop_();
#define uchar unsigned char #define uint unsigned int
uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9}; uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};
sbit K1 = P1^4; //正转 sbit K2 = P1^5; //反转 sbit K3 = P1^6; //停止 sbit K4 = P1^7; sbit BEEP = P3^7; //蜂鸣器 /********************************************************/ /* /* 延时t毫秒 /* 11.0592MHz时钟,延时约1ms /* /********************************************************/ void delay(uint t) { uint k; while(t--) { for(k=0; k<125; k++) { } } }
/**********************************************************/ void delayB(uchar x) //x*0.14MS { uchar i; while(x--) { for (i=0; i<13; i++) { } } }
/**********************************************************/ void beep() { uchar i; for (i=0;i<100;i++) { delayB(4); BEEP=!BEEP; //BEEP取反 } BEEP="1"; //关闭蜂鸣器 }
/********************************************************/ /* /*步进电机正转 /* /********************************************************/ void motor_ffw() { uchar i; uint j; for (j=0; j<12; j++) //转1*n圈 { if(K4==0) {break;} //退出此循环程序 for (i=0; i<8; i++) //一个周期转30度 { P1 = FFW[ i ]; //取数据 delay(15); //调节转速 } } }
/********************************************************/ /* /*步进电机反转 /* /********************************************************/ void motor_rev() { uchar i; uint j; for (j=0; j<12; j++) //转1×n圈 { if(K4==0) {break;} //退出此循环程序 for (i=0; i<8; i++) //一个周期转30度 { P1 = REV[ i ]; //取数据 delay(15); //调节转速 } } }
/******************************************************** * * 主程序 * *********************************************************/
main() { uchar r,N=5; //N 步进电机运转圈数 while(1) { if(K1==0) { beep(); for(r=0;r<N;r++) { motor_ffw(); //电机正转 if(K4==0) {beep();break;} //退出此循环程序 } } else if(K2==0) { beep(); for(r=0;r<N;r++) { motor_rev(); //电机反转 if(K4==0) {beep();break;} //退出此循环程序 } } else P1 = 0xf0; } }
汇编语言范例
;/***************************************************************** ;/* ;/* ME300系列单片机开发系统演示程序 - 步进电机键控正反转实验 ;/* ;/* ;/* 邮箱: gguoqing@willar.com ;/* 网站: http://www.willar.com ; ;/* 作者: gguoqing ;/* 时间: 2006/05/30 ;/* ;/*【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved ;/*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! ;/* ;/******************************************************************
; 步进电机步进角为 7.5度,一圈 360 度。 ; 双四拍工作方式: ; AB-BC-CD-DA (即一个脉冲,转 7.5 度) ; 单双八拍工作方式: ; A-AB-B-BC-C-CD-D-DA (即一个脉冲,转 3.75 度) ; 一个取数工作周期,步进电机转30度 ; 步进电机转一圈需要12个取数工作周期 ;------------------------------------------------------- ; A组线圈对应 P1.0 (桔色) ; B组线圈对应 P1.1 (棕色) ; C组线圈对应 P1.2 (黄色) ; D组线圈对应 P1.3 (黑色) ;------------------------------------------------------- K1 BIT P1.4 ;步进电机正转 K2 BIT P1.5 ;步进电机反转 K3 BIT P1.6 K4 BIT P1.7 ;步进电机停止转动 BEEP BIT P3.7 ;------------------------------------------------------- ORG 0000H LJMP MAIN ORG 0030H ;------------------------------------------------------- MAIN: MOV SP,#60H MOV P1,#0F0H ;关闭步进电机,键输入线置高 MAIN1: JB K1,MAIN2 ACALL BEEP_BL ;步进电机正转 ACALL FFW MAIN2: JB K2,MAIN1 ACALL BEEP_BL ;步进电机反转 ACALL REV JMP MAIN1 ;------------------------正转------------------------- FFW: ;MOV R3,#12 ;7.5度电机正转1圈共12个周期 MOV R3,#60 ;转5圈 FFW1: MOV R0,#00H FFW2: JB K4,FFW3 ;终止步进电机运行 ACALL BEEP_BL JMP FFW4 FFW3: MOV P1,#0F0H MOV A,R0 ;MOV DPTR,#TABLE_F ;选择工作方式 MOV DPTR,#TABLE1 MOVC A,@A+DPTR MOV P1,A LCALL DELAY INC R0 CJNE A,#0FFH,FFW2 DJNZ R3,FFW1 FFW4: MOV P1,#0F0H RET ;---------------------------反转-------------------------- REV: ;MOV R3,#12 ;7.5度电机反转1圈共12个周期 MOV R3,#60 ;转5圈 REV1: MOV R0,#00H REV2: JB K4,REV3 ;终止步进电机运行 ACALL BEEP_BL JMP REV4 REV3: MOV P1,#0F0H MOV A,R0 ; MOV DPTR,#TABLE_R ;选择工作方式 MOV DPTR,#TABLE2 MOVC A,@A+DPTR MOV P1,A CALL DELAY INC R0 CJNE A,#0FFH,REV2 DJNZ R3,REV1 REV4: MOV P1,#0F0H RET ;------------------------------------------------------- DELAY: MOV R7,#40 ;步进电机的转速 DEL1: MOV R6,#248 DJNZ R6,$ DJNZ R7,DEL1 RET ;------------------------------------------------------- DELAY1: MOV R5,#20 ;2S 延时子程序 DEL2: MOV R7,#200 DEL3: MOV R6,#250 DJNZ R6,$ DJNZ R7,DEL3 DJNZ R5,DEL2 RET ;------------------------------------------------------- ; 单双八拍工作方式 TABLE_F: ;正转表 DB 0F1H,0F3H,0F2H,0F6H,0F4H,0FCH,0F8H,0F9H DB 0FFH TABLE_R: ;反转表 DB 0F9H,0F8H,0FCH,0F4H,0F6H,0F2H,0F3H,0F1H DB 0FFH ;------------------------------------------------------- ; 双四拍工作方式: TABLE1: DB 0F3H,0F6H,0FcH,0F9H ;正转表 DB 0FFH ;正转结束 TABLE2: DB 0F9H,0FCH,0F6H,0F3H ;反转表 DB 0FFH ;反转结束 ;-------------------------------------------------------- ;蜂鸣器响一声子程序 ;-------------------------------------------------------- BEEP_BL: MOV R6,#100 BL1: CALL DEX1 CPL BEEP DJNZ R6,BL1 RET DEX1: MOV R7,#180 DEX2: NOP DJNZ R7,DEX2 RET ;--------------------------------------------------------- END
演示程序打包下载
程序包中有简单的正反转演示程序和键控演示程序,分别用汇编和C语言编写,共4个范例:
此内容需要回复才能浏览
步进电机加速启动演示程序:
http://www.willar.com/forum_view.asp?forum_id=18&view_id=8485
四相步进电机:
齿距角: Qz = 2π/ Z Z --- 转子的齿数
步距角---转子走一步所转过的角度
步距角: Qn = Qz/N = 2π/NZ N --- 步进电机工作拍数
步进电机转速:
n = 60×f / N×Z (转/分) ; f =脉冲频率(Hz)
对于步距角为7.5度的步进电机而言:
Qn = 7.5度
Qz = Qn×N = 7.5×4=30度 (齿距角)
Z = 2π/Qz = 360/30 = 12 (转子的齿数)
四相步进电机有三种运行状态:
1、步进电机为四相单四拍运行状态: 当电机绕组通电时序为A-B-C-D时为正转,通电时序为D-C-B-A时为反转。 N = 4 步距角: Qn = Qz/N = 2π/NZ =360/4*12=7.5° 则步进电机转一圈所需步进数: 360°/ 7.5°=48 (步进数)
2、步进电机为四相双四拍运行状态: 当电机绕组通电时序为AB-BC-CD-DA时为正转,通电时序为DA-CD-BC-AB时为反转。 N = 4 步距角: Qn = Qz/N = 2π/NZ =360/4*12=7.5° 则步进电机转一圈所需步进数: 360°/ 7.5°=48 (步进数)
3、步进电机为四相八拍运行状态。 当电机绕组通电时序为A-AB-B-BC-C-CD-D-DA时为正转,通电时序为DA-D-CD-C-BC-B-BA-A时为反转。 N = 8 步距角: Qn = Qz/N = 2π/NZ =360/8*12=3.75° 则步进电机转一圈所需步进数: 360°/ 3.75°=96 (步进数)
http://www.willar.com/forum_view.asp?forum_id=18&view_id=6604
|
soni2c_356645017 2014-7-21 11:15
用户377235 2014-6-1 22:00
用户344181 2011-5-31 10:06
用户405056 2010-7-9 11:14
用户1367325 2009-11-19 20:51
用户717397 2009-9-8 15:51
用户112166 2007-10-4 10:11
我是新手啊~`看的迷糊怎么办啊?
用户104276 2007-8-31 00:10
用户40282 2007-8-26 10:02
用户103241 2007-8-25 11:37
强,就是看不完整啊。