步进电机速度控制系统设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
步进电机速度控制系统设计
目录
1 总体方案的确定 (1)
1.1 对步进电机的分析 (1)
1.2 电机的控制方案 (2)
1.3 控制算法的方案 (3)
1.4 串口通讯的模拟 (3)
2 硬件的设计与实现 (4)
2.1 微处理器的选择 (4)
2.2 控制电路的实现 (4)
2.3 键盘和显示电路 (6)
3 软件的设计与实现 (6)
3.1 控制信号输入程序 (7)
3.2 步进电机控制程序设计 (8)
3.3 程序分析及说明 (9)
4 系统的仿真与调试 (10)
4.1 程序的调试 (11)
4.2 串口通信的调试 (11)
4.3 调试结果及分析 (11)
5 设计总结 (13)
参考文献 (14)
附录 (15)
步进电机速度控制系统设计
步进电机速度控制系统设计报告
1 总体方案的确定
系统以单片机为核心,接收并分析来自键盘或串口的控制指令,经过CPU的逻
辑计算输出控制信息,让步进电机按要求转动。
由于步进电机是开环元件,系统不需反馈环节,但也同时要求控制信号足够精确。
此外,为实现单片机与电机之间信号对接,需要加入步进电机驱动单元。
1.1 对步进电机的分析
步进电机又叫脉冲电机,它是一种将电脉冲信号转化为角位移的机电式数模转换器。
在开环数字程序控制系统中,输出控制部分常采用步进电机作为驱动元件。
步进电机控制线路接收计算机发来的指令脉冲,控制步进电机做相应的转动,步进电机驱动数控系统的工作台或刀具。
很明显,指令脉冲的总数就决定了数控系统的工作台或刀具的总位移量,指令脉冲的频率决定了移动的速度。
因此,指令脉冲能否被可靠地执行,基本上取决于步进电机的性能。
步进电机的工作就是步进转动。
在一般的步进电机工作中,其电源都是采用单极性的直流电源。
要是步进电机转动,就必须对步进电机定子的各相绕组以适当的时序进行通电。
当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步进角)。
通过控制脉冲个数即可以控制角位移量,从而达到准确定位的目的;同时通过控制脉冲频率来控制电机转动的速度和加速度,即可达到调速的目的。
本设计是用单片机输出可调脉冲作为单片机的控制信号,通过改写脉冲频率调节单片机转速。
常见的步进电机分三种:永磁式(PM),反应式(VR)和混合式(HB),永磁式步进一般为两相,转矩和体积较小;反应式步进一般为三相,可实现大转矩输出,但噪声和振动都很大。
混合式步进是指混合了永磁式和反应式的优点,它又分为两相和五相,应用最为广泛。
单片机管脚输出电压一般不足以驱动步进电机转动,所以需要在单片机和步进电机之间加入驱动电路。
.
步进电机速度控制系统设计
1.2 电机的控制方案
步进电机有三相、四相、五相、六相等多种,不同的电机又各有很多工作方式。
由于步进电机是一种将电脉冲信号转换成直线或角位移的执行元件,它不能直接接到交直流电源上,而必须使用专用设备-步进电机控制驱动器。
典型步进电机控制系统如图1所示:控制器可以发出脉冲频率从几赫兹到几十千赫兹可以连续变化的脉冲信号,它为环形分配器提供脉冲序列。
环形分配器的
主要功能是把来自控制环节的脉冲序列按一定的规律分配后,经过功率放大器的放大加到步进电机驱动电源的各项输人端,以驱动步进电机的转动。
环形分配器主要有两大类:一类是用计算机软件设计的方法实现环分器要求的功能,通常称软环形分配器。
另一类是用硬件构成的环形分配器,通常称为硬环形分配器。
功率放大器主要对环形分配器的较小输出信号进行放大,以达到驱动步进电机目的。
典型步进电机控制框图图1
直接将控制信号分管脚送到驱软环形分配即采用微机控制取代脉冲分配器,动电路,常用的办法是通过编程输出内存中定义好的控制方式输出字。
这样,当软环形步进电机的相数和控制方式确定之后,以一定规律输出控制字就可以了。
但如
果要预存的控制字一定程度上降低了成本。
分配用程序取代了脉冲分配器,很多,就会占用单片机较多内存。
此外,当所控制的步进电机相数较多,需要的降低接口的利用率输出管脚也会随之增加,这样就占用了单片机较多的数据口,显示以及串口控由于任务要求系统有键盘、的同时限制了单片机实现更多功能。
上述功能,设计制等多个部分,且要控制两部电机,为留出更多的数据接口实现.
步进电机速度控制系统设计
选择常规的电机控制电路。
由脉冲分配器完成对电机绕组电平的时序控制(即脉冲分配),从而每个电机只需单片机对应输出一个触发信号(控制方向)和一组脉冲波(控制速度)即可。
要注意的是,对脉冲波频率的计算和输出控制没有直接输出控制字的方法精确,响应效果也会因脉冲分配器的存在而稍差一些。
1.3 控制算法的方案
单片机对步进电机的控制算法也有多种,如上述的输出字法就是利用单片机内部的计时功能定时输出控制字,把对电机速度的控制转变为对两次输出时间间隔的控制。
控制算法很大程度决定于电机的控制方案。
上文选定的电机控制方案是要求单片机实时输出改变电机方向的触发信号和控制电机转速的脉冲信号。
对于电机方向的控制,由按键或串口控制指令改写对应的标志量的值并由接口输出即可。
对电机速度的控制就是对输出脉冲波频率的控制,而频率的大小是要有时间标尺衡量的。
单片机内部对输出频率的控制是通过两个中间变量的比较运算实现的:其中一个变量(以A代替)由单片机内部的计时器改写,表征时间量作为标尺;另一个变量(以B代替)由按键或串口控制指令改写,表征速度值(其大小可通过算数运算与实际速度相统一)。
程序在每次执行计时中断程序时改变一次电平:原来是高电平则变为低电平,原来是低电平则变为高电平。
显然,B值的大小直接决定了比较结果产生的快慢,即输出端高低电平变化的快慢。
改变B的大小就可以改变输出的脉冲频率,从而控制步进电机的速度。
变量的使用不仅方便地实现了对输出脉冲频率的控制,还有利于实现多部步进电机的异步运行。
针对每个电机定义一个速度变量,分别与时间标量进行比较运算,比较结果控制各自的管脚电平变化。
用取反运算或者位异或运算改写管脚电平,可以有效控制输出电平而不互相干扰。
1.4 串口通讯的模拟
单片机上有通用异步接收/发送器用于串行通信,发送时数据由TXD端,器冲缓送发作个一,SBUF器冲缓个两有。
入输端RXD由据数时收接,出送.
步进电机速度控制系统设计
另一个作接收缓冲器。
短距离的机间通讯可使用UART的TTL电平,使用驱动芯片可接成RS232C与通用微机进行通讯。
波特率时钟必须从内部定时器1或定时器2获得。
本设计运用软件模拟上位机控制端,经过串口输出控制信号到单片机串行口,形成区别于键盘的另一种控制方式。
2 硬件的设计与实现
2.1 微处理器的选择
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器和128bytes随机存取数据存储器的低电压、高性能CMOS8位微处理器。
片内置通用8位中央处理器,采用ATMEL公司的高密度、非易失性存储技术的生产,兼容标准MCS-51指令系统。
AT89C51提供以下标准功能:4K字节Flash闪存存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器;一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式,空闲方式停止CPU的工作,但允许RAM、定时/计数器、串行通信及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其他所有部件工作直到下一次硬件复位。
用AT89C51足以实现对步进电机的简单控制。
2.2 控制电路的实现
常规步进电机的驱动是用ULN达林顿驱动器实现的,其内部含有多个达林顿管,适于感性负载的驱动。
本文所设计的步进电机控制驱动器的框路图如图2:
图2 步进电机控制驱动器框图
芯片是一种硬件环分集成芯片,可产生四相驱动信号,用于计算机控L297能产生各种其内部主要部分是一组译码器,制的两相双极或四相单极步进电机。
,HALF/FULL和(CW/CCW)方向控制这一部分是由两种输入模式控制,所需的相序。
.
步进电机速度控制系统设计
以及步进式时钟CLOCK,能将译码器从一阶梯推进至另一阶梯。
译码器有四个输出点连接到输出逻辑部分,提供抑制和斩波功能所需的相序。
因此L297能产生三种相序信号,对应于三种不同的工作方式:即半步方式(HALF STEP),基本步距(FULL STEP,整步)一相激励方式,基本步距两相激励方式。
脉冲分配器内部是一个3bit可逆计数器,加上组合逻辑产生每周期8步格雷码时序信号,就是半步工作方式的时序信号,此时HALF/FULL信号为高电。
若HALF/FULL取低电平,得到基本步距工作方式,即双四拍全阶梯工作方式。
L297另一个重要组成是由两个PWM斩波器来控制相绕组电流,实现恒流斩波控制以获得良好的矩频特性。
每个斩波器由一个比较器、一个RS触发器和外接采样电阻组成,并设有一个公用振荡器,向两个斩波器提供触发脉冲信号。
L298是一种高压、大电流双全桥式驱动器,其设计是为接受标准TTL逻辑电平信号和驱动电感负载的,例如继电器、圆筒形线圈、直流电动机和步进电动机等。
L298具有两抑制输入,可使器件不受输入信号影响。
每桥的三级管的射极是连接在一起的,相应外接线端可用来连接外设传感电阻,还可安置另一输入电源,使逻辑能在低电压下工作。
L298芯片是具有15个引出脚的多瓦数直插式封装的集成芯片。
由L297和L298所组成的步进电机控制电路如图3所示。
这种控制电路的优点是需要的元件较少,装配线路简单,成本低,可靠性高,占空间少。
控制电路所需信号也比较简易,可以简化和减轻微型计算机的负担。
另外,L297和L298都是独立的芯片,所以组合和控制十分灵活。
但缺点是,所控制的电机类型以及运行
方式会受芯片限制。
步进电机速度控制系统设计
步进电机控制电路3 图 2.3 键盘和显示电路示。
显盘扫描位运算进行键立用键盘采低电平有效的独键盘,用计本设度。
方向和速机时显示两部电的运行可显用选LM016L液晶示器,同试统调下,(系路系配及相关件后的统总电图如以晶口信入加通串,振:
录)图整电路见附完后的
软件的设计与实现3
步进电机速度控制系统设计
单片机是系统的核心,主要承担控制信号的接受,逻辑分析和运算,控制量的输出和显示的运算和输出等功能。
本程序采用模块化设计,针对上述功能主要包括主函数、键盘扫描、串口中断、计时中断和显示程序几个模块。
其中,主函数主要负责对单片机、内部元件及中断等工作方式进行定义和设定,并协调好各模块之间的运行时序,其流程图如下:
图5 主函数流程图
开中断允计时器初始串口通讯初始化显示器初始化显示初始值进入输入扫描结束控制信号输入程序3.1
键盘的输入主要是用控制信号可以通过独立键盘和串口通讯两种方式输入。
与特定值进行位运算就可以识别键盘的即不停取键盘接口的逻辑值,扫描程序,控制信息。
.
步进电机速度控制系统设计主不过单片机内软件所要做的,串口通讯控制
信号的输入也是利用了扫描,要是定义计数器工作及串口协议,如波特率等。
成功实现串口通讯后,对获得的开始键盘输入串口输入选择判定低四位有否否有输入?键按下?是是速度控制关闭输入与显示存储接收的高位有键否数据并返回按下?是指令分析方向控制与显示电机控制运算与显示数据编辑运算就可以形成对应的控制输出。
整个控为避免两种方式的控制信号冲
突,程序通过外接开关选定控制方式。
制信号输入程序流程图如下: 6 输入扫
描程序流程图图设计机控制程序3.2 步进电冲脉输出是对单片机机提到,对步进电的控制主要已案确定方的时候经部内片机用的,显然要使单来要慢。
频率频的控制率的快必然是有时间衡量,结计每中程中时在令出平,计进时的计器行时电输指就计器断序。
当时束
开始步进电机速度控制系统设计
有控制计数器计输入控制要加减计时结cnt+RunSpeed+RunSpeed-cnt>RunSpeed输出电平取反就执行一次比较运算并改写电平与原来相反。
值得注意的是,由于单片机计时器的计时是对预存的起始量进行减运算。
这样,要想加快电机速度提高输出频率就要减小速度标量B,以减少两者比较次数,更频繁地执行中断以改写电平,从而达到提高频率的目的。
频率控制原理图如图7所示:
图7 频率变化原理
由图可以明显地看出,速度标志量越小,输出波形的频率越快。
由此可以确定键盘控制和串口控制下,步进电机控制算法程序的流程图如下:
图8 步进电机控制程序流程图
3.3 程序分析及说明
本设计的程序采用了多个变量,其中Runspeed变量在控制输入和控制输出之间起枢纽作用,可以说对Runspeed的控制就是对电机速度的控制。
计数器环节中,Cnt变量的使用让计时器解放出来成为独立的走时,把对计时中断次数的统计作为计算量,而计数器本身不参与逻辑运算。
这样大大提需,只时度量间时要需制控的新有,当率用利的器时计个限有内机片单了高.
步进电机速度控制系统设计
增加变量即可。
此外,通过取反改变输出电平的算法简单方便,节省了单片机内存空间的同时也节省了有限的数据口。
设计程序从多方面充分提高单片机的利用率,是值得推广的。
4 系统的仿真与调试
仿真时,先完成由键盘控制的一台步进电机的加速减速控制,确定键盘扫描、电机走步等的基本算法是否可行。
之后开辟新的接口,对另一台电机控制,新变量的加入使两台电机的异步运行十分容易。
最后仿真串行接口的。
制控与讯通
步进电机速度控制系统设计
4.1 程序的调试
对于脉冲波的输出算法,可以选择对管脚位定义,再对变量或管脚代号分别作取反运算。
这种方法可靠简单,但如果所要控制的电机数目较多,程序就会十分冗长。
用8位异或的位运算就可以解决这个问题,位异或可以只对目标管脚作用而不影响其他管脚的输出,可以同时对多个管脚改写电平。
键盘扫描是不断用接口数据与特定16进制数进行位运算,位运算的选择也会影响到信号采集的准确度和管脚的利用率。
调试显示器的关键则是准确地将初始化信息分批地送到显示器里。
针对本设计所使用的AT89C51单片机,如果选用P0口作为显示输出则必须对P0口每个管脚接上拉电阻。
而对电机速度的显示需要以Runspeed为应变量选取适当的换算函数,才能显示正确的速度值。
4.2 串口通信的调试
调试串口通讯的关键是对串口正确地初始化。
一旦通信成功,串口控制就解决了大半的问题,接着就是用缓存里的数据编程控制,其算法与键盘控制相差不远。
串口调试最需注意的是,除了在程序里对串口和通讯初始化之外,电路图中器件相关属性的设置都必须与通讯要求保持一致,比如串口的波特率应设置为软件里初始化波特率的大小。
同样地,模拟的上位机的传输位和停止位等指标也应认真选定。
本设计只完成了单片机与控制口之间以字节为单位的简单通讯,所以能通信的控制功能十分有限。
果结试调4.3
步进电机速度控制系统设计
经过调试,系统能以键盘和串口两种方式对两部步进电机进行异步控制,并在显示屏上显示各电机的转向和转速。
其中串口控制仿真效果如下图所
示:果图仿口控制真效串图9
窗控串图10 口制口
步进电机速度控制系统设计
5 设计总结
本计选择常规的脉冲分配器完成对电机绕组电平的时序控制,从而使单片机对每部电机对应输出一个触发信号和一组脉冲波即可。
这样节省了单片机的数据接口,一定程度提高了利用率。
另外,正如程序分析师所述,本设计的软件采用了多个变量使单片机计时器等部分得以共享,当有新的控制需要时间量度时,只需增加变量即可,大大提高了使用价值。
此外,程序通过取反改变输出电平的算法简单方便,节省了单片机内存空间的同时也节省了有限的数据口。
系统对信号频率控制,使得控制的精确度较输出控制字方式较差。
此外,变量的使用也是的多个程序模块同时依赖一个计数器,降低了系统可靠性。
步进电机速度控制系统设计
参考文献
[1]于海生.微型计算机控制技术.北京:清华大学出版社,1999.3
[2]常喜茂,孔英会等.C51基础与应用实例.北京:电子工业出版社,2009
[3]马德骏,张建宏等.C语言程序设计.北京:科学出版社,2006
[4]刘宝廷,程树康等.步进电机及其驱动控制系统.哈尔滨:哈尔滨工业大学出版
社,1997
[5]马忠梅,籍顺心等.单片机的C语言应用程序设计.北京:北京航空航天大学出版社,2007
步进电机速度控制系统设计
附录
#include<AT89X51.h>
#include <stdio.h>
#include <intrins.h>
int delay();
void inti_lcd();
void show_lcd(int i);
void cmd_wr();
void ShowSpeed();
void ShowDir();
void key_scan();
void cod_scan();
void delayms(int ms);
void send_char(unsigned char out);
sbit RS=P2^4; //定义LCD的端口物理地址
sbit RW=P2^5;
sbit E=P2^6;
char SpeedChar1[]=V1(n/min):; //显示变量
char SpeedChar2[]=V2(n/min):;
char SPEED1[3]=(;
char SPEED2[3]=(;
char forward='f',backforward='b';
unsigned int RunSpeed1=50; //运算变量
unsigned int RunSpeed2=50;
unsigned int cnt1=0;
unsigned int cnt2=0;
unsigned int cod;
步进电机速度控制系统设计
bit RunDir1=1,RunDir2=1; //运行状态(起始为正方向)
bit Contrl=0; //控制状态(起始为按键控制)
unsigned char temp; //串口变量
void Init_RS232(void)
{
TL1=0Xfd;
TH1=0Xfd; //波特率为9600(fd), 4800(fa),2400(f4) SCON = 0x50; //设定串行口工作方式
PCON&= 0xef;
//波特率不倍增
TR1=1;
}
main()
{
//定时器工作方式TMOD=0x21;
开中断EA=1; //
0 TR0=0; 关闭计数器//TH0=(65535-1000)>>8; 中断一次1ms0定时器// 初值,即
TL0=(65535-1000)&0x00ff;
0定时器// 高优先级中断PT0=1;
中断允许0定时器// ET0=1;
启动计数器// TR0=1;
Init_RS232();
inti_lcd();
ShowSpeed();
ShowDir();
while(1)
步进电机速度控制系统设计
{
if(Contrl^P1_6) //控制方式键是否按下
Contrl=P1_6;
//按下则扫描键盘if(Contrl==0)
{
key_scan();
}
//没按下则等待输入if(Contrl==1)
{
是否有数据到来if(RI) //
{
RI=0;
暂停接收数据// //存储接受的数据cod=SBUF;
delayms(10);
回传接收到的数据// send_char(cod);
cod=cod-0x30; //将ASC码转化
cod_scan();
ShowSpeed();
}
}
}
}
void send_char(unsigned char out)//传送一个字符{
SBUF=out; 预存// while(!TI); 等特数据传送// 清除数据传送标志// TI=0;
}
void delayms(int ms) // 延时子程序{
int i;
步进电机速度控制系统设计
while(ms--)
{
for(i=0;i<120;i++);
}
}
串口扫描程序// void cod_scan()
switch (cod) {
电机1加速{ case 0x01:{if(RunSpeed1>=12) // RunSpeed1=RunSpeed1-2; }
break;
case 0x02:{if(RunSpeed1<=100) //电机1减速
RunSpeed1=RunSpeed1+2;
}
break;
case 0x03:{if(RunSpeed2>=12) //电机2加速
RunSpeed2=RunSpeed2-2;
}
break;
case 0x04:{if(RunSpeed2<=100) //电机2减速
RunSpeed2=RunSpeed2+2;
}
break;
case 0x05:{RunDir1=1; //电机1正转
P2_2=RunDir1;
}
break;
case 0x06:{RunDir1=0; //电机1正转
P2_2=RunDir1;
}
break;
case 0x07:{RunDir2=1; //电机2正转
P2_3=RunDir2;
}
步进电机速度控制系统设计
break;
case 0x08:{RunDir2=0; //电机2反转
P2_3=RunDir2;
}
break;
default:break;
}
ShowSpeed(); //液晶显示
ShowDir();
}
//键盘扫描程序void key_scan()
口都为高电平没有键按下时{ unsigned char key; //P3
****************/ 脉冲式按键扫描/****************K0-K3 key=P1&0x0f;
有键按下if(key!=0x0f) // {
switch (key)
加速1// { case 0x0e:if(RunSpeed1>=12) 电机RunSpeed1=RunSpeed1-2;
break;
case 0x0d:if(RunSpeed1<=100) //电机1减速
RunSpeed1=RunSpeed1+2;
break;
case 0x0b:if(RunSpeed2>=12) 加速//电机2
RunSpeed2=RunSpeed2-2;
break;
case 0x07:if(RunSpeed2<=100) //电机2减速
RunSpeed2=RunSpeed2+2;
break;
default:break;
}
步进电机速度控制系统设计
ShowSpeed(); //液晶显示
while((P1&0x0f)!=0x0f) ; //等待按键松开
}
****************/
/****************K4-K5电平式按键扫描
K4 if((RunDir1^P1_4)|(RunDir2^P1_5)) //如果或K5按键的状态改变{RunDir1=P1_4;
RunDir2=P1_5;
ShowDir();
}
//输出方向控制P2_2=RunDir1;
P2_3=RunDir2;
}
中断服务程序//定时器0void t_0(void) interrupt 1
{
TR0=0;
定时器TH0=(65535-1000)>>8; //0初值,即1ms中断一次
TL0=(65535-1000)&0x00ff;
TR0=1;
cnt1++;cnt2++;
if(cnt1>=RunSpeed1) //计时中断次数达到或高于速度则改写输出电平{P2=P2^0x01;
cnt1=0;}
if(cnt2>=RunSpeed2)
{P2=P2^0x02;
cnt2=0;}
}
LCD判断// int delay() 是否忙{
int a;
步进电机速度控制系统设计
start:
RS=0; //读显示器状态
RW=1;
E=0;
for(a=0;a<2;a++);
E=1;
//拉高数据口P0=0xff;
if(P0_7==0)
return 0;
else
goto start;
}
方式void inti_lcd() //设置LCD{
行,P0=0x38; 5×7点阵//8 位2cmd_wr();
delay();
P0=0x01;
cmd_wr();
delay();
// P0=0x0f; 显示打开,显示光标,光标闪烁cmd_wr(); delay();
光标自动右移一位,全部平移无效P0=0x06; // cmd_wr();
delay();
显示打开,关闭光标//P0=0x0c;
cmd_wr();
delay();
步进电机速度控制系统设计
}
void cmd_wr() //写控制字
{
RS=0; //写命令寄存器
RW=0;
E=0; 提供上升沿//
E=1;
}
//LCD显示子程序void show_lcd(int i)
{
口P0=i; //P1
RS=1;
写数据设置// RW=0;
E=0;
触发// E=1;
}
void ShowDir()
{
delay();
位)15设置显示地址(第一行第P0=0x80 | 0x0f; //
cmd_wr();
delay();
if(RunDir1)
正转,show_lcd(forward); //forward
else
show_lcd(backforward);// backforward 反转,
delay();
位)设置显示地址(第二行第// P0=0x80 | 0x4f; 15 cmd_wr();
delay();
步进电机速度控制系统设计
if(RunDir2)
show_lcd(forward); //正转,forward
else
show_lcd(backforward);//反转,backforward
}
void ShowSpeed() //显示状态与速度
{ int i=0;
SPEED1[0]=(6000/RunSpeed1/100)+48;
SPEED1[1]=(6000/RunSpeed1_x0010_0/10)+48;
SPEED1[2]=(6000/RunSpeed1_x0010_)+48;
SPEED2[0]=(6000/RunSpeed2/100)+48;
SPEED2[1]=(6000/RunSpeed2_x0010_0/10)+48;
SPEED2[2]=(6000/RunSpeed2_x0010_)+48;
delay();
P0=0x80; 位起)0设置显示地址(第//
cmd_wr();
i=0;
“V1(n/min): ”//在第一行显示字符串while(SpeedChar1[i]!='\0') {
delay();
show_lcd(SpeedChar1[i]);
i++;
}
delay();
P0=0x80 | 0x0a; 11 //设置显示地址(第位起)
cmd_wr();
i=0;
1 while(i<3) // 在第一行显示速度{
步进电机速度控制系统设计
delay();
show_lcd(SPEED1[i]);
i++;
}
delay();
P0=0x80| 0x40; //第二行第1位
cmd_wr();
i=0;
while(SpeedChar2[i]!='\0') //在第二行显示字符串“V2(n/min): ”
{
delay();
show_lcd(SpeedChar2[i]);
i++;
}
delay();
P0=0x80 | 0x4a; //第二行第11位
cmd_wr();
i=0;
2 //在第二行显示速度while(i<3)
{
delay();
show_lcd(SPEED2[i]);
i++;
}
}
步进电机速度控制系统设计
步进电机速度控制系统设计。