基于单片机的步进电动机控制器的设计.docx

上传人:b****6 文档编号:15595862 上传时间:2023-07-05 格式:DOCX 页数:38 大小:2.77MB
下载 相关 举报
基于单片机的步进电动机控制器的设计.docx_第1页
第1页 / 共38页
基于单片机的步进电动机控制器的设计.docx_第2页
第2页 / 共38页
基于单片机的步进电动机控制器的设计.docx_第3页
第3页 / 共38页
基于单片机的步进电动机控制器的设计.docx_第4页
第4页 / 共38页
基于单片机的步进电动机控制器的设计.docx_第5页
第5页 / 共38页
基于单片机的步进电动机控制器的设计.docx_第6页
第6页 / 共38页
基于单片机的步进电动机控制器的设计.docx_第7页
第7页 / 共38页
基于单片机的步进电动机控制器的设计.docx_第8页
第8页 / 共38页
基于单片机的步进电动机控制器的设计.docx_第9页
第9页 / 共38页
基于单片机的步进电动机控制器的设计.docx_第10页
第10页 / 共38页
基于单片机的步进电动机控制器的设计.docx_第11页
第11页 / 共38页
基于单片机的步进电动机控制器的设计.docx_第12页
第12页 / 共38页
基于单片机的步进电动机控制器的设计.docx_第13页
第13页 / 共38页
基于单片机的步进电动机控制器的设计.docx_第14页
第14页 / 共38页
基于单片机的步进电动机控制器的设计.docx_第15页
第15页 / 共38页
基于单片机的步进电动机控制器的设计.docx_第16页
第16页 / 共38页
基于单片机的步进电动机控制器的设计.docx_第17页
第17页 / 共38页
基于单片机的步进电动机控制器的设计.docx_第18页
第18页 / 共38页
基于单片机的步进电动机控制器的设计.docx_第19页
第19页 / 共38页
基于单片机的步进电动机控制器的设计.docx_第20页
第20页 / 共38页
亲,该文档总共38页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于单片机的步进电动机控制器的设计.docx

《基于单片机的步进电动机控制器的设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的步进电动机控制器的设计.docx(38页珍藏版)》请在冰点文库上搜索。

基于单片机的步进电动机控制器的设计.docx

基于单片机的步进电动机控制器的设计

第一部分培训软件简介

Proteus软件是英国LabCenterElectronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。

它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。

它是目前比较好的仿真单片机及外围器件的工具。

虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。

Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。

是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。

在编译方面,它也支持IAR、Keil和MATLAB等多种编译器。

KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。

Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。

运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。

如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。

第二部分培训项目实例

培训项目一:

基于单片机的步进电动机控制器的设计

项目要求:

采用单片机对步进电机进行控制,包括正转、反转、加速、减速和停止,同时采用液晶显示屏显示步进电动机的运行情况。

培训目的:

1.掌握步进电机的工作原理;

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。

在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度。

可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

当电流流过定子绕组时,定子绕组产生一矢量磁场。

该磁场会带动转子旋转一角度,使得转子的一对磁场方向与定子的磁场方向一致。

当定子的矢量磁场旋转一个角度。

转子也随着该磁场转一个角度。

每输入一个电脉冲,电动机转动一个角度前进一步。

它输出的角位移与输入的脉冲数成正比、转速与脉冲频率成正比。

改变绕组通电的顺序,电机就会反转。

所以可用控制脉冲数量、频率及电动机各相绕组的通电顺序来控制步进电机的转动。

通常见到的各类电机,内部都是有铁芯和绕组线圈的。

绕组有电阻,通电会产生损耗,损耗大小与电阻和电流的平方成正比,这就是我们常说的铜损,如果电流不是标准的直流或正弦波,还会产生谐波损耗;铁心有磁滞涡流效应,在交变磁场中也会产生损耗,其大小与材料,电流,频率,电压有关,这叫铁损。

铜损和铁损都会以发热的形式表现出来,从而影响电机的效率。

步进电机一般追求定位精度和力矩输出,效率比较低,电流一般比较大,且谐波成分高,电流交变的频率也随转速而变化,因而步进电机普遍存在发热情况,且情况比一般交流电机严重。

步进电机在结构上也是由定子和转子组成,可以对旋转角度和转动速度进行高精度控制。

当电流流过定子绕组时,定子绕组产生一矢量磁场,该矢量场会带动转子旋转一角度,使得转子的一对磁极磁场方向与定子的磁场方向一着该磁场旋转一个角度。

因此,控制电机转子旋转实际上就是以一定的规律控制定子绕组的电流来产生旋转的磁场。

每来一个脉冲电压,转子就旋转一个步距角,称为一步。

根据电压脉冲的分配方式,步进电机各相绕组的电流轮流切换,在供给连续脉冲时,就能一步一步地连续转动,从而使电机旋转。

电机将电能转换成机械能,步进电机将电脉冲转换成特定的旋转运动。

每个脉冲所产生的运动是精确的,并可重复,这就是步进电机为什么在定位应用中如此有效的原因。

通过电磁感应定律我们很容易知道激励一个线圈绕组将产生一个电磁场,分为北极和南极,见图1所示。

定子产生的磁场使转子转动到与定子磁场对直。

通过改变定子线圈的通电顺序可使电机转子产生连续的旋转运动。

 

2.掌握控制器硬件组成及原理;

本设计的硬件电路只要包括控制电路、最小系统、驱动电路、显示电路四大部分。

最小系统只要是为了使单片机正常工作。

控制电路只要由开关和按键组成,由操作者根据相应的工作需要进行操作。

显示电路主要是为了显示电机的工作状态和转速。

驱动电路主要是对单片机输出的脉冲进行功率放大,从而驱动电机转动。

根据系统的控制要求,控制输入部分设置了顺时针控制,逆时针控制,加速控制,减速控制和停止按键。

控制电路如图2所示。

当按下按键,内部程序检测P0.1-P0.4的状态变化来调用相应的启动和换向程序,从而实现系统的电机的启动和正反转控制。

根据步进电机的工作原理可以知道,步进电机转速的控制主要是通过控制通入电机的脉冲频率,从而控制电机的转速。

对于单片机而言,主要的方法有:

软件延时和定时中断在此电路中电机的转速控制主要是通过定时器的中断来实现的,该电路控制电机加速度主要是通过按键的断开和闭合,从而控制外部中断。

根据按键次数,改变速度值存储区中的数据(该数据为定时器的中断次数),这样就改变了步进电机的输出脉冲频率,从而改变了电机的转速。

图2控制电路原理图

单片机最小系统或者称为最小应用系统,就是用最少的元件组成的单片机可以工作的系统,对51系列单片机来说,最小系统一般应该包括:

单片机、复位电路、晶振电路。

复位电路:

使用了独立式键盘,单片机的P1口键盘的接口。

该设计要求只需4个键对步进电机的状态进行控制,但考虑到对控制功能的扩展,使用了6路独立式键盘。

复位电路采用手动复位,所谓手动复位,是指通过接通一按钮开关,使单片机进入复位状态,晶振电路用22PF的电容和一12M晶体振荡器组成为整个电路提供时钟频率。

如图3示。

晶振电路:

8051单片机的时钟信号通常用两种电路形式电路得到:

内部震荡方式和外部中断方式。

在引脚XTAL1和XTAL2外部接晶振电路器(简称晶振)或陶瓷晶振器,就构成了内部晶振方式。

由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。

内部振荡方式的外部电路如图5示。

其电容值一般在5~30pf,晶振频率的典型值为12MHz,采用6MHz的情况也比较多。

内部振荡方式所得的时钟信号比较稳定,实用电路实用较多。

图3复位及时钟振荡电路

本次设计用ULN2003来驱动步进电机,电路图如图4所示。

通过单片机的P2.0~P2.3输出脉冲到ULN2003的1B~4B口,经信号放大后从1C~4C口分别输出到电机的ABCD四相。

图4步进电机驱动电路

在该步进电机的控制器中,电机可以正反转,可以加速、减速,其中电机转速的等级分为十级,为了方便知道电机转速的等级,这里设计了电机转速和电机的工作状态的显示电路。

在显示电路中,主要是利用了单片机的P0口接一个两位的共阳极数码管。

数码管a、b、c、d、e、f、g、dp分别接P0.0~P0.7口.数码管的公共角1,2分别接p2.0,p2.1。

图5步进电机显示电路

把各个部分的电路图组合成总电路图,如图6所示。

图6总体电路图

3.掌握控制器的软件组成及原理;

C语言程序如下:

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharcodeccw[]={0x08,0x04,0x02,0x01};//逆时针旋转相序

//ucharcodecw[]={0x01,0x02,0x04,0x08};//顺时针旋转相序

//ucharcodespeed[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d};

//ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

//0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴极数码管显示表

ucharcodetable_anode[]={//共阳极0~f数码管编码

0xc0,0xf9,0xa4,0xb0,//0~3

0x99,0x92,0x82,0xf8,//4~7

0x80,0x90,0x88,0x83,//8~b

0xc6,0xa1,0x86,0x8e//c~f

};

ucharcodeccw8[]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};//8拍旋转相序表

uinttime,show1,show2,sym,temp,t,a,flag,i,j,rpm,n;

sbitinc=P3^2;//加速

sbitdec=P3^3;//减速

sbitkeyccw=P3^4;//逆时针转

sbitkeycw=P3^5;//顺时针转

sbitpause=P3^6;//暂停

sbitfir=P2^0;//第一数码管

sbitsec=P2^1;//第二数码管

voidinit();//初始化定时器0,1,串口

voiddirec();//按键控制转向

voidspeedctl();//按键控制转速

voiddisplay();//速度显示函数

voiddelaynms(uintaa);//1ms延时函数

voidmain()

{

init();

while

(1)

{

speedctl();

direc();

display();

}

}

voidwind_init()

{

TMOD=0X21;//定时器1为方式2,定时器0为方式1

TH1=0xFD;

TL1=0xFD;

TH0=(65536-1000)/256;//1毫秒定时中断

TL0=(65536-1000)%256;

TR1=1;//启动定时器1

EA=1;//打开总中断

ET0=1;//允许定时器0中断

TR0=1;//启动定时器0

}

voidspeedctl()

{

if(inc==0)//加速

{

n++;

if(n==11)

n=10;

while(!

inc)

display();

time=0;

}

elseif(dec==0)//减速

{

n--;

if(n==0)

n=1;

while(!

dec)

display();

time=0;

}

switch(n)

{

case1:

t=937;//60/64转速一分钟一圈里面转一圈937ms,基准速度一分钟一圈

rpm=1;

break;

case2:

t=312;

rpm=3;

break;

case3:

t=187;

rpm=5;

break;

case4:

t=133;

rpm=7;

break;

case5:

t=104;

rpm=9;

break;

case6:

t=85;

rpm=11;

break;

case7:

t=72;

rpm=13;

break;

case8:

t=62;

rpm=15;

break;

case9:

t=55;

rpm=17;

break;

case10:

t=49;

rpm=19;

break;

}

}

voiddirec()

{

if(keyccw==0)

{

flag=1;

time=0;

}

elseif(keycw==0)

{

flag=2;

time=0;

}

elseif(pause==0)

flag=0;

}

voiddisplay()

{

fir=1;

sec=0;

P0=table_anode[rpm/10];

delaynms(17);

fir=0;

sec=1;

P0=table_anode[rpm%10];

delaynms(20);

}

voiddelaynms(uintaa)

{

ucharbb;

while(aa--)

{

for(bb=0;bb<250;bb++);//1ms基准延时程序

}

}

voidtimer0()interrupt1

{

TH0=(65536-1000)/256;

TL0=(65536-1000)%256;

time++;

if(flag==1)//逆时针转

{

if(time==t)

{

time=0;

P1=ccw[i];

i++;

if(i==4)

i=0;

}

}

elseif(flag==2)//顺时针转

{

if(time==t)

{

time=0;

if(i>0)

i--;

elseif(i==0)

i=3;

P1=ccw[i];

}

}

}

4.分析仿真结果。

当点下proteus的play键时候,此时数码管显示速度为零,电机不转。

当按加速按键时候,速度会从01一直加到19。

共有十个速度等级

图7

培训内容:

按照培训目的逐条撰写

培训项目二:

基于单片机的数字电压表的设计

项目要求:

采用单片机设计数字电压表,能够用液晶屏实时的显示输入的模拟电压值。

培训目的:

1.掌握电压表的硬件组成及原理;

数字电压表是指表面从指针改为数字的电压表,即采用数码管显示或者液晶面板显示。

其原理为控制器ST是电压表的指挥部,它每隔一定时间(例如每隔2s)就发出一个启动脉冲,一方面利用启动脉冲打开控制门T,让等间隔的标准时间脉冲序列能通过控制门进入十进制计数器;另一方面启动脉冲触发斜坡电压发生器,使它开始产生一个直线上升的斜坡电压,在斜坡电压上升的过程中,斜坡电压不断与被测电压在电压比较器中进行比较,当斜坡电压等于被测电压Ux时,电压比较器即发出关门信号,将T门关闭。

这时十进制计数器所保留的数就是T门从开启到关闭的时间间隔中,通过T门的标准时间脉冲的个数。

被测电压Ux越大,斜坡电压从零上升到被测电压Ux,值所需要的时间、T门开启时间也越长,计数器所计数值也越大,利用数码显示器将计数器所计数值显示出来,所计的数就是通过T门的脉冲个数。

适当选择标准脉冲发生器的重复频率和斜坡斜率,就能使通过T门的脉冲个数与被测电压值相等,显示器上便可以直接显示出被测电压值。

(1)、单片A/D转换器:

采用CMOS工艺将DVM的基本电路(含模拟电路与数字电路)集成在同一芯片上,配以LCD或LED数显器件后能显示A/D 转换结果的集成电路。

 按显示位数划分,单片A/D转换器主要有4种:

3½位、3¾位、4½位、5½位。

(2)、LCD显示数字电压表:

用来显示测量的电压值的大小。

(3)、单片机的选择:

AT89C51是一种带4K字节FLASH存储器的低电压、高性能CMOS8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除1000次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪速存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

2.掌握电压表的软件组成及原理;

软件的组成包括:

AT89C51单片机、晶振电路、复位电路、单片机供电电路、显示电路、A/D采样电路等组成,在单片机中导入程序,使其成为数字电压表。

(1)、A/D采样电路:

用来采集电压的信号,并将其变换为数字信号输入到单片机的输入端,经过单片机的处理之后,输出到显示电路,显示电压值。

(2)、晶振电路、复位电路、单片机供电电路:

构成单片机的最小系统,是使单片机能够正常工作必不可少的部分。

3.分析仿真结果。

根据上面分析的来看,我们分别从小的电路开始画起,首先我们画出单片机的最小系统,单片机的最小系统如下图7所示。

图7单片机最小系统

将晶振连接到xtal1和xtal2的两端,复位电路连接到Rst上。

接下来就是放置LCD显示器,并将其连接在单片机上,显示电路的仿真结果如下图8所示。

图8显示电路

在数字电压表的仿真中,我觉得最重要的是A/D采样电路的设计,需对采集的数据进行处理,才能作为单片机的输入。

数字电压表仿真的A/D采样电路图如下图9所示。

图9A/D采样电路

将这些电路都连接起来,也就成了数字电压表的仿真电路图,其中,上图中的蓝色的线为总线。

接下来便对数字电路仿真图进行仿真,并读出电压的数值。

数字电压表总电路如下图10所示,仿真结果如下图11所示。

图10数字电压表总电路图

图11仿真结果

培训内容:

了解了单片机的最小系统的概念,能够对模拟量和数字量进行转换,方便了单片机的处理,更加熟练了软件的使用,了解了数字电压表的原理。

自行设计项目一:

1.项目要求:

在输出声音时如果连接了虚拟示波器,可观察到脉宽逐步减小,频率不断升高,如果CPU会因连接虚拟示波器而过载,导致声音播放失帧,这时可断开示波器再播放。

2.项目目的

以51单片机为核心,输出一段有14个音的音阶,音阶演奏由定时器控制完成。

3.分析仿真结果

(1)蜂鸣器:

发音是蜂鸣器振动引起的,而振动则是对蜂鸣器电压断通引发的,控制电压的频率就是蜂鸣器振动的频率,取非则是对电压控制的断通控制,先是1,非后是0,再非又继续循环。

有两种蜂鸣器,一种无源蜂鸣器吗,一种是有源,有源是指给它通上直流电,它就按本身固有的频率响(本身有震荡电路比如3K),而无源则相反,相当于喇叭,给喇叭通上直流电,是不会响的,需要交变的电压,这就是以上问题的蜂鸣器,这种蜂鸣器的振动频率是外部电路控制的,音调也即是可控的。

改变高低电平的频率就是蜂鸣器的频率,可以通过定时器来改变。

(2)显示部分:

采用LCD显示。

LCD液晶显示具有丰富多样性、灵活性、电路简单、易于控制而且功耗小等优点,对于信息量多的系统,是比较适合的。

 

3、单片机AT89C51:

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

89C51仿真图

(4)单片机唱歌的基本原理:

声音是空气的振荡,不同的振荡频率我们就可以听到不同声调的声音。

音的频谱范围约在几十到几千赫兹。

利用程序来控制单处机某个口线出一定频率的方波到蜂鸣器,蜂鸣器就可以发出一定音调的声音,若再利用不同的延时程序改变输出频率,就可以改变音调,进而就可让单片机发出“1”、“2”,“3”,“4”,“5”,“6”,“7”的音乐。

(5)音调:

输出不同频率的方波,以实现1、2、3、4等的不同音调;

比如,发出200HZ的音频,其周期为1/200秒,即5ms。

这样,当P3.2的高电平或低电平的持续时间为2.5ms时,就能发出200HZ的音调。

我们可以写一个延时子程序,用R3来提供参数,R3=1时,延时为20us,那么R3取2500/20=125(7DH)时,就可以发出200Hz的音调,提供不同的R3常数,可以得到不同的音调变化。

附表给出了不同音阶对应的频率。

类型

1

2

3

4

5

6

7

音符

C5

D5

E5

F5

G5

A5

B5

频率/HZ

523

587

659

698

784

880

987

(6)节拍:

控制一个音符输出的时间,比如1拍、1/4拍。

仅上所叙还不够,要准确奏出一首曲子,必须准确地控制乐曲节奏,即一音符的持续时间。

例如,一首曲子的节奏为每分种94拍,那么一拍就为60/94=0.64秒。

音乐的节拍我们可用定时器来控制,简单的说,一个一拍的音符唱0.64秒,我们就设置一个定时器定时0.64秒,时间一到就换下一个音符。

但是,由于单片机的T0,在12MHz晶振下最大定时时间只能为65毫秒,因此不可能直接用改变T0的时间初值来实现不同节拍。

如何定时一个更大的时间,上节课我们已经讲了一个方法。

我们可以用T0来产生10毫秒的时间基准,然后设置一个中断计数器,通过判别中断计数器的值来控制节拍时间的长短。

表2中也给出了各种节拍所对应的时间常数。

例如对1/4拍音符,定时时间为0.16秒,相应的时间常数(中段计数器)为16(即10H);对3拍音符,定时时间为1.92秒,相应时间长数为192(即C0H)。

HI=(8192-count)/32

LO=(8192-count)%32

方波宽度:

t=1/f*1000000(us)

定时器计数值:

count=t/2

程序中的数组HI_LIST和LO_LIST所保存的就是为产生频率为523HZ.587HZ……分别需要的定时器的高字节和低字节。

 

(7)仿真实图:

等待时波形:

播放时波形:

 

(8)源程序:

//说明:

本实验使用定时器演奏一段音阶,播放由K1控制。

//

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

uchari=0;//i:

音符索引

sbitSPK=p3^4;

sbitK1=p1^0;

//14个音符在方式2下的定时器值(TH0,YL0)

ucharcodeHI_LIST[]={0,226,229,232,233,236,238,240,241,244,245,246,247,248};

ucharcodeLO_LIST[]={0,4,13,10,20,3,8,6,2,23,5,26,1,4,3};

//

//定时器0中断

//

viodT0_INT()interupt1

{

TL0=HI_LIST[i];

TH0=HI_LIST[i];

SPK=!

SPK;

}

//

//延时

//

voiddelay(uintm

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2