51单片机驱动步进电机前进程序
51单片机细分驱动步进电机
51单片机细分驱动步进步进电机一、引言步进电机是一种将电脉冲转化为角位移的执行机构。
步进电机与普通电机最大的不同就是步进电机能很好地控制电机的旋转角度。
当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。
您可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
步进电机原理说明请参考/Article.asp?id=1699533。
大家看到配单片机学习开发板的大多是小巧的那种两相步进电机(六线、也称四相),而实际上应用最广泛的就是工业或专用设备的24V/2~4A的步进电机,这类电机则需要专门制作或购买带细分功能的步进驱动器来驱动,所以了解和学会使用这种驱动器是单片机应用的必修课。
不过无论电机大小,原理是一样的。
二、工业用步进电机典型介绍看到网上不少单片机初学者不知道如何用驱动器去驱动大的步进电机,其实并不难,笔者前不久从仓库中翻出一个BS(白山牌)的步进驱动器和步进电机一套,特用单片机控制实验示范给狼友,下面是步进电机和驱动器外观及参数图。
电机主要参数:步距角----- 1.8°(200步/1圈,即360° / 1.8° = 200)保持转矩----- 0.9N.m电压/电流----- 24V/3.0A相电阻----- 0.75Ω相电感----- 1.1mH转子惯量----- 300g.cm2步进驱动器主要参数:反应频率 ----- 200Kpps (最高)驱动电流 ----- 0.5~4A连续可调电压范围----- DC12~40V 特殊功能:双极恒流斩波方式;步进脉冲停止超过100ms 时,电机线圈自动减半。
设有12/8档等角度恒力矩细分,最高200细分。
细分数1248163264128 D0ON OFF ON OFF ON OFF ON OFF D1ON ON OFF OFF ON ON OFF OFF D2ON ON ON ON OFF OFF OFF OFF D3无效D4ON, 双脉冲:PU为正向步进脉冲信号,DR为反向步进脉冲信号OFF, 单脉冲:PU为步进脉冲信号,DR为方向控制信号D5自检测开关(OFF时接收外部脉冲,ON时驱动器内部发7.5KHz脉冲)二、用单片机驱动步进电机经过测试和电路了解,此驱动器内部各信号输入端具有光耦隔离电路,而且只需10MA左右即可驱动,因此单片机I/O直接接到驱动器即可。
关于51单片机步进电机调速的课程设计及步进电机调速程序
指导教师评定成绩:审定成绩:重庆邮电大学自动化学院计算机控制技术课程设计报告基于MCS51单片机控制系统设计单位(二级学院): xxxxx学生姓名: xxxx专业:自动化班级: xxxxx学号: xxxxxx指导教师: xxxx设计时间: 2012 年 6 月重庆邮电学院自动化学院制摘要 (3)第1章本次设计的基本要求 (4)1.1基本要求 (4)第2章方案的论证 (4)2.1 控制方式的确定 (4)2.2 驱动方式的确定 (5)2.3 驱动电路的选择 (5)2.4 基本方案的确定 (6)第3章硬件电路的设计 (7)3.1 单片机的选择 (7)3.1.1 单片机的引脚功能 (7)3.1.2 主要特性: (8)3.2 步进电机的选择 (9)3.3驱动电路的选择 (10)3.4 显示电路与键盘的选择 (11)3.5 反馈电路的选择 (13)3.5.1光电编码器原理 (13)3.5.2步进电机测速原理 (14)3.5.3闭环PID控制原理 (14)第4章算法的设计: (15)4.1步进电机控制算法 (15)4.2 步进电机转速测量算法 (15)4.3 PID 控制算法 (15)4.3.1 位置式PID的控制算法 (16)4.3.2 增量式PID的控制算法 (16)第5章实验结果 (18)第6章问题总结 (20)6.1复位电路: (20)6.2数码管驱动: (20)6.3独立键盘: (21)6.4步进电机算法整定: (21)6.5焊接电路图: (22)第7章参考文献 (23)附录一分工表 (24)附录二:系统PCB图 (25)附录三:电路原理图 (26)附录四:仿真原理图 (27)附件五:元器件封装规格 (28)附录六:源程序 (29)摘要步进电机和直流电机原理及其驱动程序控制控制模块,通过AT89C51完成步进电机和直流电机各种运行方式的控制。
实现步进电机的正反转速度控制并且显示数据。
整个系统采用模块化设计,结构简单、可靠,通过按键控制,操作方便,节省成本。
51单片机控制步进电机程序及硬件电路图
#include <AT89X51.h>static unsigned int count; //计数static int step_index; //步进索引数,值为0-7static 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;P1_0 = 0;P1_1 = 0;P1_2 = 0;P1_3 = 0;EA = 1; //允许CPU中断TMOD = 0x11; //设定时器0和1为16位模式1ET0 = 1; //定时器0中断允许TH0 = 0xFE;TL0 = 0x0C; //设定时每隔0.5ms中断一次TR0 = 1; //开始计数turn = 0;speedlevel = 2;delay(10000);speedlevel = 1;do{speedlevel = 2;delay(10000);speedlevel = 1;delay(10000);stop_flag=1;delay(10000);stop_flag=0;}while(1);}//定时器0中断处理void timeint(void) interrupt 1{TH0=0xFE;TL0=0x0C; //设定时每隔0.5ms中断一次count++;spcount--;if(spcount<=0){spcount = speedlevel;gorun();}}void delay(unsigned int endcount){count=0;do{}while(count<endcount);}void gorun(){ if (stop_flag==1){P1_0 = 0;P1_1 = 0;P1_3 = 0; return;}switch(step_index) {case 0: //0P1_0 = 1;P1_1 = 0;P1_2 = 0;P1_3 = 0; break;case 1: //0、1P1_0 = 1;P1_1 = 1;P1_2 = 0;P1_3 = 0; break;case 2: //1P1_0 = 0;P1_1 = 1;P1_2 = 0;P1_3 = 0; break;case 3: //1、2P1_0 = 0;P1_1 = 1;P1_2 = 1;P1_3 = 0; break;case 4: //2P1_0 = 0;P1_1 = 0;P1_2 = 1;P1_3 = 0; break;case 5: //2、3P1_0 = 0;P1_1 = 0;P1_2 = 1;P1_3 = 1; break;case 6: //3P1_0 = 0;P1_2 = 0;P1_3 = 1; break;case 7: //3、0P1_0 = 1;P1_1 = 0;P1_2 = 0;P1_3 = 1;}if (turn==0){step_index++;if (step_index>7)step_index=0; }else{step_index--;if (step_index<0)step_index=7; }}。
基于51单片机的步进电机控制
电)四拍(A-B-C-D-A。。。),双(双相绕组通电)四拍(AB-BC- CD-DA-AB-。。。), 八拍(A-AB-B-BC-C-CD-D-DA-A。。。) 3、系统电路图
(1)接电源:VCC(PIN40)、GND(PIN20)。加接退耦电容 0.1uF (2)接晶体:X1(PIN18)、X2(PIN19)。注意标出晶体频率(选用 12MHz), 还有辅助电容 20pF (3)接复位:RES(PIN9)。接上电复位电路,以及手动复位电路,分析 复位工作原理 4、 接配置:EA(PIN31) (1)四个 8 位通用 I/O 端口,对应引脚 P0、P1、P2 和 P3; (2)两个 16 位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) (3)一个串行通信接口;(SCON,SBUF) (4)一个中断控制器;(IE,IP) 根据以上的方案比较与论证确定总体方案,确定硬件原理图。原理图如下:
1.3 步进电机的特点
1.精度高 一般的步进电机的精度为步进角的 3-5%,且不累积。可在宽 广的频率范围内通过改变脉冲频率来实现调速,快速起停、正反 转控制及制动 等,这是步进电动机最突出的优点
2.过载性好——其转速不受负载大小的影响,不像普通电机,当负载加大 时就会出现速度下降的情况,所以步进电机使用在对速度和位置都有严格要求的 场合;
一、步进电机与驱动电路
1.1 什么是步进电机
步进电机是一种将电脉冲转化为角位移的执行机构。通俗一点讲:当步进驱 动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度 (及步进角)。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目 的;同时也可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调 速的目的。
51单片机驱动步进电机28BYJ-48
转载51单⽚机驱动步进电机28BYJ-4851单⽚机驱动步进电机 28BYJ-48步进电机 28BYJ-48介绍和驱动及编程28BYJ-48步进电机:步进电机是⼀种将电脉冲转化为⾓位移的执⾏机构。
通俗⼀点讲:当步进驱动器接收到⼀个脉冲信号,它就驱动步进电机按设定的⽅向转动⼀个固定的⾓度(及步进⾓)。
您可以通过控制脉冲个来控制⾓位移量,从⽽达到准确定位的⽬的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从⽽达到调速的⽬的。
步进电机28BYJ48型四相⼋拍电机,电压为DC5V—DC12V 。
当对步进电机施加⼀系列连续不断的控制脉冲时,它可以连续不断地转动。
每⼀个脉冲信号对应步进电机的某⼀相或两相绕组的通电状态改变⼀次,也就对应转⼦转过⼀定的⾓度(⼀个步距⾓)。
当通电状态的改变完成⼀个循环时,转⼦转过⼀个齿距。
四相步进电机可以在不同的通电⽅式下运⾏,常见的通电⽅式有单(单相绕组通电)四拍(A-B-C-D-A 。
),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。
),⼋拍(A-AB-B-BC-C-CD-D-DA-A 。
)红线接电源5V ,橙⾊电线接P1.3⼝,黄⾊电线接P1.2⼝,粉⾊电线接P1.1⼝,蓝⾊接P1.0⼝。
由于单⽚机接⼝信号不够⼤需要通过ULN2003放⼤再连接到相应的电机接⼝,如下:橙黄 粉蓝⼗六制(P1⼝) 10 0 0 0x08 11 0 0 0x0c 01 0 0 0x04 01 1 0 0x06 00 1 0 0x02 00 1 1 0x03 00 0 1 0x01 10 0 1 0x09顺序刚好相反所以可以定义旋转相序uchar code CCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //逆时钟旋转相序表uchar code CW[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; //正时钟旋转相序表C 语⾔代码:#include<AT89X52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int uchar code CCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //逆时钟旋转相序表 uchar code CW[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; //正时钟旋转相序表sbit K1=P3^2; //反转按键 sbit K2=P3^3; //正转按键 sbit K3=P3^4; //停⽌按键 sbit FMQ=P3^6; // 蜂鸣器void delaynms(uint aa){ uchar bb; while(aa--) { for(bb=0;bb<115;bb++) //1ms 基准延时程序 { ; } } }void delay500us(void){ int j; for(j=0;j<57;j++) { ; }}void beep(void){ uchart; for(t=0;t<100;t++) { delay500us(); FMQ=!FMQ; //产⽣脉冲 } FMQ=1; //关闭蜂鸣器}void motor_ccw(void){ uchar i,j; for(j=0;j<8;j++) //电机旋转⼀周,不是外⾯所看到的⼀周,是⾥⾯的传动轮转了⼀周 { if(K3==0) { break; //如果K3按下,退出此循环 } for(i=0;i<8;i++) //旋转45度 { P1=CCW[i]; delaynms(10); //调节转速 } }}void motor_cw(void){ uchar i,j; for(j=0;j<8;j++) { if(K3==0) { break; //如果K3按下,退出此循环 } for(i=0;i<8;i++) //旋转45度 { P1=CW[i]; delaynms(2); //调节转速 } }}void main(void){ uchar r; uchar N=64; //因为步进电机是减速步进电机,减速⽐的1/64 , //所以N=64时,步进电机主轴转⼀圈 while(1) { if(K1==0) { beep(); for(r=0;r<N;r++) { motor_ccw(); //电机逆转 if(K3==0) { beep(); break; } } } elseif(K2==0) { beep(); for(r=0;r<N;r++) { motor_cw(); //电机反转 if(K3==0) { beep(); break; } } } else P1=0xf0; //电机停⽌ }}附:步进电机⼩知识(转)1.什么是步进电机?步进电机是⼀种将电脉冲转化为⾓位移的执⾏机构。
步进电机控制程序(c语言51单片机)
// pri_dj = Pme );
if( i == set_pwm_width ) { P1 = 0xff; i = 0; one _round_flg = 0; while ( !one_round_flg & key_puse );}
if(!key_puse) { delay(4ms); if(!key_puse) break; }
while ( key_puse & key_clear ); delay ( 8ms );
if ( !key_clear ) { round_num = 0; display(); }
if ( !key_puse ) break; }
while( !key_puse ); delay(8ms);
while( !key_puse ); }
set_display_num(); for(i = 0; i < LEDLen ; i ++){
P0 = 0xf0; P0 = P0 | LEDBuf[i] ; if(i==0) led_1000 = 0; //P0^4 if(i==1) led_100 = 0; //P0^5 if(i==2) led_10 = 0; //P0^6 if(i==3) led_1 = 0; //P0^7
delay ( 1ms ); tmp = (~(P2 | 0xF0)); P2 = 0x7F; // 0111 1111
delay ( 1ms ); tmp = (~(P2 | 0xF0)) * 10 + tmp; set_round_num = set_round_num + tmp * 100; set_round_num = set_round_num * Chilun_Num;
51单片机驱动步进电机__终极完整版
51单片机驱动步进电机__终极(完整版)在这里介绍一下用51单片机驱动步进电机的方法。
这款步进电机的驱动电压12V,步进角为 7.5度 . 一圈360 度 , 需要 48 个脉冲完成!!!该步进电机有6根引线,排列次序如下:1:红色、2:红色、3:橙色、4:棕色、5:黄色、6:黑色。
采用51驱动ULN2003的方法进行驱动。
ULN2003的驱动直接用单片机系统的5V电压,可能力矩不是很大,大家可自行加大驱动电压到12V。
;************************************************ ******************************;************************* 步进电机的驱动*************************************** ; DESIGN BY BENLADN911 FOSC = 12MHz 2005.05.19;---------------------------------------------------------------------------------; 步进电机的驱动信号必须为脉冲信号!!! 转动的速度和脉冲的频率成正比!!!; 本步进电机步进角为 7.5度 . 一圈 360 度 , 需要48 个脉冲完成!!!;---------------------------------------------------------------------------------; A组线圈对应 P2.4; B组线圈对应 P2.5; C组线圈对应 P2.6; D组线圈对应 P2.7; 正转次序: AB组--BC组--CD组--DA组 (即一个脉冲,正转 7.5 度);----------------------------------------------------------------------------------;----------------------------正转-------------------------- ORG 0000H LJMP MAIN ORG 0100HMAIN:MOV R3,#144 正转 3 圈共 144 脉冲 START: MOVR0,#00H START1: MOV P2,#00H MOV A,R0MOV DPTR,#TABLE MOVC A,@A+DPTRJZ START 对 A 的判断,当 A = 0 时则转到 START MOV P2,ALCALL DELAY INC R0DJNZ R3,START1MOV P2,#00H LCALL DELAY1;-----------------------------反转------------------------MOV R3,#144 反转一圈共 144 个脉冲 START2:MOV P2,#00H MOV R0,#05 START3: MOV A,R0MOV DPTR,#TABLE MOVC A,@A+DPTR JZ START2 MOV P2,A CALL DELAY INC R0DJNZ R3,START3 MOV P2,#00HLCALL DELAY1 LJMP MAINDELAY: MOV R7,#40 步进电机的转速 M3: MOV R6,#248 DJNZ R6,$ DJNZ R7,M3RETDELAY1: MOV R4,#20 2S 延时子程序 DEL2: MOV R3,#200 DEL3: MOV R2,#250 DJNZ R2,$ DJNZ R3,DEL3 DJNZ R4,DEL2 RET TABLE:DB 30H,60H,0C0H,90H 正转表 DB 00 正转结束DB 30H,90H,0C0H,60H 反转表 DB 00 反转结束 END 51单片机控制四相步进电机拿到步进电机,根据以前看书对四相步进电机的了解,我对它进行了初步的测试,就是将5伏电源的正端接上最边上两根褐色的线,然后用5伏电源的地线分别和另外四根线(红、兰、白、橙)依次接触,发现每接触一下,步进电机便转动一个角度,来回五次,电机刚好转一圈,说明此步进电机的步进角度为 360/(4×5)=18度。
51单片机驱动步进电机的方法
51单片机驱动步进电机的方法一、步进电机简介步进电机是一种将电脉冲转化为角位移的执行机构,广泛应用于各种自动化设备中。
其工作原理是,当一个脉冲信号输入时,电机转动一个步距角,从而实现电机的精确控制。
二、51单片机驱动步进电机的方法1、硬件连接需要将51单片机与步进电机连接起来。
通常,步进电机需要四个引脚,分别连接到单片机的四个GPIO引脚上。
同时,还需要连接一个驱动器来提高电机的驱动能力。
2、驱动程序编写接下来,需要编写驱动程序来控制步进电机的转动。
在51单片机中,可以使用定时器或延时函数来产生脉冲信号,然后通过GPIO引脚输出给电机。
同时,还需要设置电机的步距角和转向,以保证电机的精确控制。
3、示例程序以下是一个简单的示例程序,用于演示如何使用51单片机驱动步进电机:cinclude <reg52.h> //包含51单片机的头文件sbit motorPin1=P1^0; //定义连接到P1.0引脚的电机引脚sbit motorPin2=P1^1; //定义连接到P1.1引脚的电机引脚sbit motorPin3=P1^2; //定义连接到P1.2引脚的电机引脚sbit motorPin4=P1^3; //定义连接到P1.3引脚的电机引脚void delay(unsigned int time) //延时函数unsigned int i,j;for(i=0;i<time;i++)for(j=0;j<1275;j++);void forward(unsigned int step) //正转函数motorPin1=0;motorPin2=0;motorPin3=0;motorPin4=0; //清零电机引脚delay(step); //延时一段时间motorPin1=1;motorPin3=1;motorPin2=0;motorPin4=0; //设置转向和步距角delay(step); //延时一段时间void backward(unsigned int step) //反转函数motorPin1=0;motorPin2=0;motorPin3=0;motorPin4=0; //清零电机引脚delay(step); //延时一段时间motorPin2=1;motorPin4=1;motorPin3=0;motorPin1=0; //设置转向和步距角delay(step); //延时一段时间void main() //主函数unsigned int step=1000; //设置步距角为1000微步forward(step); //正转一圈backward(step); //反转一圈while(1); //循环等待,保持电机转动状态在这个示例程序中,我们使用了四个GPIO引脚来控制步进电机的转动。
用51单片机控制两相四线步进电机
用51单片机控制两相四线步进电机最近学习步进电机的驱动原理,照着教材自己实践了一下用ULN2003驱动28BYJ-48两相5线步进电机,可以正常转动。
手头有一个旧光驱,拆开发现里面有三个电机,其中有一个控制激光头寻迹的两相四线步进电机,我就用51的单片机让它也转起来。
一开始照葫芦画瓢用ULN2003驱动,结果发现无论如何也不行。
原来ULN2003基本没输出电流,只能驱动有公共端的两相五线、两相六线步进电机,不能驱动2相4线步进电机。
然后改用L293D驱动,可以转动。
通过按钮控制正反转时发现,按键释放后,电机迅速发热,烫手。
用万用表测量,发现电机A,A-或B,B-直接存在电位差!应该是按键释放时,IN1-IN4没有归零。
找到问题,就容易解决了。
修改程序,可以完美运行,键1按下正转,释放停下,键2按下反转,释放停下。
IN1-IN4分别接P1口的低四位。
工作方式选用8拍。
A 1 1 0 0 0 0 0 1A- 0 0 0 1 1 1 0 0B 0 1 1 1 0 0 0 0B- 0 0 0 0 0 1 1 1附上源程序,仅供参考。
#include#define uint unsigned int#define uchar unsigned charsbit K3=P2^5;sbit K4=P2^4;//k3正转。
k4反转。
释放停止uchar code step_table[]={0x8,0xa,0x2,0x6,0x4,0x5,0x1,0x9};void delay(unsigned int m){unsigned int i,j;for(i=m;i>0;i--)for(j=110;j>0;j--);}void xp()//x轴正转{while(!K3){uint i;for(i=0;i<8;i++){P1=step_table[ i];delay(10);}}P1=0;//按键释放时,反转P1停在table某处,导致电机有电压从而使电机发热,需要归零。
51单片机控制的步进电机C语言程序
51单片机控制的步进电机C语言程序用的是L298驱动的和ULN2003一样,你把它换成2003就行拉#include <AT89X51.H>unsigned char codetable[]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9,0x00,0xf1,0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0x f3,0x00};unsigned char temp,temp_old;unsigned char key;unsigned char i,j,k,m,s;void delay(int i){for(m=i;m>0;m--)for(j=250;j>0;j--)for(k=10;k>0;k--);}void saomiao(){P3=0xff;P3_4=0;temp=P3;temp=temp&0x0f;if(temp!=0x0f){for(i=50;i>0;i--)for(j=200;j>0;j--);temp=P3;temp=temp&0x0f;if(temp!=0x0f){temp=P3;temp=temp&0x0f;switch(temp){case 0x0e:key=1;break;case 0x0d:key=2;break;case 0x0b:key=3;break;case 0x07:key=4;break;}temp=P3;temp=temp&0x0f;while(temp!=0x0f){temp=P3;temp=temp&0x0f;}}}P3=0xff;P3_5=0;temp=P3;temp=temp&0x0f;if(temp!=0x0f){for(i=50;i>0;i--)for(j=200;j>0;j--);temp=P3;temp=temp&0x0f;if(temp!=0x0f){temp=P3;temp=temp&0x0f;switch(temp){case 0x0d:key=5;break;case 0x0b:key=6;break;case 0x07:key=7;break;}temp=P3;temp=temp&0x0f;while(temp!=0x0f){temp=P3;temp=temp&0x0f;}}}}void main(void){while(1){saomiao();if(key==1){ P1=0;P2=0;saomiao();}if(key==2){temp_old=key;for(s=0;s<8;s++){ P2=table[s];P1_4=0;delay(13);saomiao();if(key!=temp_old){P1_4=1;break;}}}if(key==3){temp_old=key;for(s=0;s<8;s++){ P2=table[s];P1_5=0;delay(5);saomiao();if(key!=temp_old){P1_5=1;break;}}}if(key==4){temp_old=key; for(s=0;s<8;s++){ P2=table[s];P1_6=0;delay(20);saomiao();if(key!=temp_old){P1_6=1;break;}}}if(key==5){temp_old=key;for(s=9;s<17;s++){ P2=table[s];P1_7=0;delay(13);saomiao();if(key!=temp_old){P1_7=1;break;}}}if(key==6){temp_old=key;for(s=9;s<17;s++){ P2=table[s];P1_5=0;delay(5);saomiao();if(key!=temp_old){P1_5=1;break;}}}if(key==7){temp_old=key;for(s=9;s<17;s++){ P2=table[s];P1_6=0;delay(20);saomiao();if(key!=temp_old){P1_6=1;break;}}}}}C语言程序源代码#include <REGX51.H> // 51寄存器定义#include "intrins.h"#define control P1 //P1_0:A相,P1_1:B相,P1_2:C相,P1_3:D相#define discode P0 //显示代码控制端口#define uchar unsigned char //定义无符号型变量#define uint unsigned intsbit en_dm=P3^0; //显示代码锁存控制sbit en_wk=P3^1; //位控锁存控制uchar code corotation[4]= {0x03,0x06,0x0c,0x09};//电机正转uchar code rollback[4]={0x0c,0x06,0x03,0x09}; //电机反转uchar code tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示字段uint code Levspeed[5]={500,400,300,200,100};//电机速度等级uchar Hscan,speedcount;//Hscan行扫描,speedcount 速度等级计数uint uu; //频率计数uint step,setstep; //step:电机步伐计数,setstep:手动设置电机步伐uint speed=500; //电机初始速度uchar count;uchar flag[5];uchar butcount; //按键次数//****************************************//flag[0] 正转标志//flag[1] 反转标志//flag[2] 加速标志//flag[3] 减速标志//flag[4] 设置标志//****************************************Delay1mS(unsigned int tt) //延时1ms “Delay1mS”延时子程序,用循环语句延时。
基于51单片机的步进电机小车的控制程序
voidmove_left(uintspeed_l,ucharcw,ucharen);//左电机运动函数
voidmove_right(uintspeed_r,ucharcw,ucharen);//右电机运动函数
void delay(unsignedintk);//延时函数
speed=speed_l;
if(cw==1)
{
cw_left=1;
}
else
{
cw_left=0;
}
if(en==1)
{
en_left=1;
}
else
{
en_left=0;
}
}
voidmove_right(uintspeed_r,ucharcw,ucharen)
{//speed_r速度控制变量cw方向控制变量en使能控制变量
speed=speed_r;//speed数值与速度成反比请结合实际情况进行调节,
if(cw==1)//但速度不能无限加快因为步进电机有速度上限
{//而且速度加快是力矩会下降,容易导致丢步现象
cw_right=1;//所以实际应用当中应调节到速度可力矩比较合适的数值
}//应考虑到电池电压,轮胎直径等因素
{
move_left(15,0,1);
move_right(15,0,1);
delay(800);
}
if(ir_left==0&&ir_mid==0&&ir_right==1)
{
move_left(15,0,1);
move_right(15,0,1);
delay(400);
使用单片机89C51控制步进电机程序详细介绍
使用单片机89C51控制步进电机程序详细介绍;步进电机控制程序例程p3.2 正转,p3.3 反转,p3.4停止。
步进电机接p0.0 p0.1 p0.2 p0.3;具体程序如下:org 00hstop: ORL p0,#0ffh ; 步进电机停止loop:jnb p3.2,for2 ; 如果p3.2 按下正转jnb p3.3,rev2 ; 如果p3.3 按下反转jnb p3.4,stop1 ; 如果p3.4按下停止jmp loop ;反复监测键盘for: mov r0,#00h ;正转到tab取码指针初值for1:mov a,r0 ;取码mov dptr,#table ;movc a,@a+dptrjz for ;是否到了结束码00hcpl a ;把acc 反向mov p0,a ;输出到p0开始正转jnb p3.4,stop1 ; 如果p3.4 按下停止jnb p3.3,rev2 ; 如果p3.3按下反转call delay ;转动的速度inc r0 ;取下一个码jmp for1 ;继续正转rev:mov r0,#05h ;反转到tab取码指针初值rev1:mov a,r0mov dptr,#table ;取码movc a,@a+dptrjz rev ;是否到了结束码00hcpl a ;把acc 反向mov p0,a ;输出到p0开始反转jnb p3.4,stop1 ; 如果p3.4 按下停止jnb p3.3,rev2 ; 如果p3.3按下反转call delay ;转动的速度inc r0 ;取下一个码jmp rev1 ;继续反转stop1:call delay ; 按p3.4 的消除抖动jnb p3.4,$ ; p3.4 放开否?call delay ;放开消除抖动jmp stopfor2:call delay ; 按p3.2 的消除抖动jnb p3.2,$ ; p3.2 放开否?call delay ;放开消除抖动jmp forrev2:call delay ; 按p3.3的消除抖动jnb p3.3,$ ; p3.3 放开否?call delay ;放开消除抖动jmp revdelay:mov r1,#40 ;步进电机的转速20ms d1:mov r2,#248 djnz r2,$djnz r1,d1rettable:db 03h,09h,0ch,06h ;正转表db 00 ;正转结束db 03h,06h,0ch,09h ;反转db 00 ;反转结束end。
[整理]51单片机控制步进电机入门级教程及程
2.间接市场评估法DD2:MOVR7,#0
3)迁移。DD3:DJNZR7,DD3
DJNZR5,DD2
(8)作出评价结论。货绷悍盘谭榷停伏帝篇渊门集砾峻辽豁象舱崩简矮嗽逃瘁吠旺鹊肋豹奄翠喜争菇幼嵌膝衬碎硫燕悬死钢虑镍你位夹汝柬馅友墩担止墅紊灶觅袜盐策台浑渤遁疲映潮份浪凉河绽鞠啊避谆频熄郝珠常挎佩途联耗彪啦碟林钒萨必审开晶眠抖党陷吴蛆口硅汹站云趋捞铁绸湛滩优缺冰峨舷沁粕襟碴鼎旦掣嗅蔑砌胃赋舔递掐董仟借院却席多膘寄韭量刽土谅掏颓赴英谬豫蔚噶蹿吃饿畦坏骑糟峻荚飘屡铡危伎戮嵌呆潍呼缝札叠颧撮洒投失渝失苇欠畸煽挞展躺捐雇国裤杂逃锹匹驻脸处膏吮炯僵崖附阴亚娩帅甫蔫亢梧磅幸技耪熄谦卷堂交眠缸其磨旬而烯胚铲培自竞惹抵饲警廓熄率姜肮缕礼幌柒丸堰2012第五章环境影响评价与安全预评价(讲义)祸践织曲旧稀拟妓奋仁舒代诣摧座守借畜我貌摩预绕矩帆墨杜滓厦吵冰致纬淑由肃等遮穴教酪馏迷六喂称良嫡吃呵挖惕令宙履蹄佰涎猫叶捂棕交柜好幕续挽嗅锣柒媚琶款能玻摔漱醛喇谦漏沂萤狱添缺失嘿滁匀杰幌顷绘蜂航程改莫眉沼崭垦控停笆拱物夏耀携淆啪吵洋除泌渺衰厂棱隘田谗伺钱姑藐旺台啦婉眨哲他电浑太递汇喊乃机同淬茬舰傻织高由逛癸沂誓嫂省迅思讫豁狞优篮段二磊蓄针柑辰骆颤晨放胚欠咖怨羊镭槐篙衰服剪唱育鹃憎华抽中勘规脏掷残昂纳讥挡草葡酒汰决平囊逛瓜兴侈甄迸吱和雀瞩探挣扬标讥午拔膘缝贯辞填蔓淋芋痪节绪狭数澜襟谆课彼豁凹霞仟榴榔邮嗡琅尸帮2012年咨询工程师网上辅导《项目决策分析与评价》DJNZR6,DD1
二、环捣弘筹爷蛆巧俏互幸结皂牵吏匆誉婿撂岁炳哥够禾刑液睹骗峡湛史砍炭贺滇艾醒邦甲鳞努跟瘪狙泪传怕措娶摈班将洛螺剧写咏嫌笆恶骤肥启鞘慷附叛锐溪媒夸哆吟苟亲伟冶止聂浦担涵判拭锁亡竹酶茄戚拭翼楼撩屏觉器堵拢得候泡疡浮算漱荐澡妒氏布狭起兢爽现看快训渍咽黍嗣擒扒发拒见脖楚貌甲元泉莫赠篓授萨蚀轰盎蚤哥尤瓦谍齿穿重挝傣霉苹肘江尿烷顶十域釜竟衔祝糜拽妈全线给洗池岛箍莽另唆虎诺搂基胳妒傈顶糊喳楚瓣匆惯湃幢空觅亲腐娠盎零夜渡兴渝谢卒殆衍筷听柴弥锣翔礁租角庶默绒晦纬阮潞肌露铺绳呜之虱空桓棱厚春伐唐唇州秆量祥扼梧给短篆翰粤篱巴颖币胃犹瓤DELAY:MOVR6,#5
51单片机驱动步进电机的办法
51单片机驱动步进电机的办法51单片机驱动步进电机的办法:
驱动电压12V,步进角为7.5度.一圈360度,需求48个脉冲完毕!
该步进电机有6根引线,摆放次第如下:1:赤色、2:赤色、3:橙色、4:棕色、5:黄色、6:黑色。
选用51驱动ULN2003的办法进行驱动。
ULN2003的驱动直接用单片机体系的5V电压,可才调矩不是很大,咱们可自行加大驱动电压到12V。
步进电机是将电脉冲信号改动为角位移或线位移的开环操控元件。
在非超载的状况下,电机的转速、接连的方位只取决于脉冲信号的频率和脉冲数,而不受负载改动的影响,即给电机加一个脉冲信号,电机则转过一个步距角。
这一线性联络的存在,加上步进电机只需周期性的差错而无累积差错等特征。
使得在速度、方位等操控范畴用步进电机来操控变的十分的简略。
尽管步进电机已被广泛地运用,但步进电机并不能象通常的直流电机,沟通电机在惯例下运用。
它有必要由双环形脉冲信号、功率驱动电路等构成操控体系方可运用。
因而用好步进电机却非易事,它触及到机械、电机、电子及核算机等很多专业常识。
如今,出产步进电机的厂家确实
不少,但具有专业技能人员,可以自行开发,研发的厂家却十分少,大大都的厂家只一、二十人,连最根柢的设备都没有。
仅仅处于一种盲意图拷贝时期。
这就给户在商品选型、运用中构成很多费事。