ImageVerifierCode 换一换
格式:PPT , 页数:69 ,大小:835KB ,
文档编号:8216357      下载积分:15 文币
快捷下载
登录下载
邮箱/手机:
温馨提示:
系统将以此处填写的邮箱或者手机号生成账号和密码,方便再次下载。 如填写123,账号和密码都是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

优惠套餐
 

温馨提示:若手机下载失败,请复制以下地址【https://www.163wenku.com/d-8216357.html】到电脑浏览器->登陆(账号密码均为手机号或邮箱;不要扫码登陆)->重新下载(不再收费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  
下载须知

1: 试题类文档的标题没说有答案,则无答案;主观题也可能无答案。PPT的音视频可能无法播放。 请谨慎下单,一旦售出,概不退换。
2: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
3: 本文为用户(momomo)主动上传,所有收益归该用户。163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

1,本文(《电子工程师项目教学与训练》课件第3章.ppt)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!

《电子工程师项目教学与训练》课件第3章.ppt

1、第第3 3章章 步进电机驱动器设计步进电机驱动器设计 3.1 引言引言 3.2 步进电机驱动器设计任务书步进电机驱动器设计任务书 3.3 设计方案设计方案 3.4 硬件电路设计硬件电路设计 3.5 软件设计软件设计 3.6 程序清单程序清单 3.1 引引 言言步进电机是把电脉冲信号转换为机械位移信号的执行元件,其在控制领域内的应用十分广泛。由于步进电机可以通过控制脉冲来精确控制电机转过的角度,具有较高的运行精度,可以实现开环控制,因而在构成控制系统时实现较简单。步进电机要实现运行控制必须通过相应的驱动器来实现,步进电机种类繁多,驱动器的种类也多种多样。近年来两相混合式步进电机因其结构简单、控制

2、方便而得到了广泛的应用,本章将针对两相混合式步进电机驱动器的研究、设计和制作进行介绍。3.2 步进电机驱动器设计任务书步进电机驱动器设计任务书1.设计任务设计任务设计并制作两相混合式步进电机驱动器,要求该驱动器能够接收外部控制信号以实现电机的运行控制功能,主要包括步进驱动功能、方向控制功能、脱机运行功能及限流保护功能等。2.设计要求设计要求1)驱动器控制端子设置驱动器设置4个控制输入信号端子,分别为CLK、DIR、FREE和GND,各个信号的含义为:CLK信号为步进电机的驱动控制脉冲信号,驱动器每接收到一个脉冲就运行一步;DIR为电机运行方向控制信号,DIR=0代表一个运行方向,DIR=1代表

3、另一个运行方向;FREE信号为脱机运行信号,如果FREE信号为高电平,则步进电机上电后即锁定,当有CLK脉冲信号时电机运行,如果FREE信号为低电平,则步进电机上电后处于松开状态,此时方便手动调节电机所驱动的目标设备位置,并且驱动器不对CLK信号做出反应。2)控制输入信号的要求输入信号GND是驱动器与外接控制器之间的共地信号,其他输入信号应该符合TTL电平标准。CLK信号脉冲的有效沿为下跳沿,且要求负跳沿后的低电平脉冲宽度大于5 s。3)方向控制DIR信号控制方向变化时必须保证电机已经停止,并且在下一个CLK脉冲到来之前保持稳定。4)电流保护功能步进电机处于锁定状态时,绕组中的电流较大,电机发

4、热严重,因此要求驱动器能够在电机锁定时限制电流在要求的范围之内,用户可以根据所使用的电机设定锁定状态的最高电流上限为0.8 A、1.2 A、1.6 A、2.0 A四种情况。5)驱动器输入电源驱动器要求外加电源,包括逻辑部分电源和绕组供电电源,驱动器逻辑部分输入电压为(110%)5 V,电机绕组驱动输入电压范围为1248 V。6)适用电机驱动器主要用于驱动42系列、绕组电流小于2 A的各种两相混合式步进电机。3.3 设设 计计 方方 案案步进电机驱动器的设计方案考虑的核心问题是驱动器功率驱动电路的设计与实现。对于两相混合式步进电机而言,需要两个H桥电路来实现两相绕组的电流控制:一种方案是采用晶体

5、管或者功率MOS管来实现,一个H桥电路需要4个功率管,两个H桥需要8个功率管,因此采用此种方案驱动电路的组成较复杂,实现起来电路规模较大,通常适合于设计较大功率的步进电机驱动器;另一种设计方案为采用集成驱动桥电路来实现,现在常用的功率桥可大致分为两大类,一类为内部采用功率晶体管结构(达林顿晶体管),另一类为内部采用功率MOS管。功率晶体管驱动桥由于管子工作时管压降较大,损耗功率较大,发热严重,效率较低,给电路的散热设计带来不便,因此近些年来MOS集成驱动桥越来越普遍,特别是采用了DMOS工艺的驱动桥以其优良的特性受到设计者的青睐,本次设计就采用了意法公司的DMOS驱动芯片L6205。步进电机驱

6、动器主处理器的选择是设计方案中要考虑的另一个主要问题,应该说步进电机驱动器的控制任务并不复杂,对处理器的要求也不高,普通的8位单片机都可以完成相应的控制任务,但是考虑到控制器附加资源的多少、开发手段的方便程度、硬件成本等因素,这里采用了宏晶科技公司的STC12C5410AD单片机。该单片机是高速的51单片机,其指令的执行速度比同频率的普通51单片机快得多,普通51单片机需要12个晶振周期才能完成的一条指令,该STC单片机最快仅需要1个晶振周期就可以完成。根据设计要求,该驱动器应该具有电流保护功能,用户可以根据自己所使用的电机来设定电机锁定时绕组中的最高电流,为此必须在设计方案中考虑电机绕组电流

7、的检测问题。这里采用的方案为:采用检流电阻采样绕组电流,该电流经过整理放大由STC12C5410AD进行转换,再利用PWM调制的方法保证电机锁定时绕组中的电流不会超过最高限定值。图3-1是该设计方案的原理框图。图3-1 步进电机驱动器原理框图 3.4 硬件电路设计硬件电路设计两相混合式步进电机驱动器的硬件电路组成并不复杂,这里分两部分进行介绍。3.4.1 主处理器及其外围电路设计主处理器及其外围电路设计此次设计中主处理器选择了STC12C5410AD,该单片机指令与MCS-51系列单片机相兼容,但其指令执行速度却远远高于MCS-51单片机。STC12C5410 系列单片机是单时钟/机器周期(1

8、T)的兼容8051内核单片机,是高速/低功耗的新一代8051单片机,具有全新的流水线/精简指令集结构,且内部集成MAX810专用复位电路。该系列单片机不但在指令的执行速度上取得优势,其内部的附加资源也比传统的MCS-51丰富了许多,其主要特点如下:增强型1T流水线/精简指令集结构8051 CPU。工作电压:5.53.4 V(5 V单片机)/3.82.0 V(3 V单片机)。工作频率范围:035 MHz,相当于普通8051的0420 MHz。实际工作频率可达48 MHz。用户应用程序空间:12 KB/10 KB/8 KB/6 KB/4 KB/2 KB。片上集成512 B RAM。通用I/O口(2

9、7/23个)可设置成四种模式:准双向口/弱上拉模式(兼容8051模式)、推挽/强上拉模式、仅为输入/高阻模式、开漏模式,每个I/O口的驱动能力均可达到20 mA,但整个芯片最大不得超过55 mA。ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,即可通过串口(P3.0/P3.1)直接下载用户程序,编程速度较快。具有E2PROM功能。具有看门狗及内部集成MAX810专用复位电路(当外部晶振频率低于20 MHz时,可省去外部复位电路)。时钟源可选外部高精度晶体或外部时钟信号,还可以使用内部RC振荡器提供系统工作时钟,用户在下载用户程序时,可选择使用内部RC振荡器或外部晶体振荡器(常温

10、下内部RC振荡器的频率为5.26.8 MHz)。具有2个16位定时器/计数器,PWM(4路)/PCA(可编程计数器阵列)。具有2路外部中断,可设置为下降沿中断或低电平触发中断,Power Down模式可由外部中断低电平触发中断方式唤醒。具有共8路10位精度ADC。通用异步串行口(UART)、SPI同步通信口、主模式/从模式。工作温度范围:075/-40+85。封装:PDIP-28,SOP-28,PDIP-20,SOP-20,PLCC-32,TSSOP-20。图3-2是驱动器CPU及其外围电路,该系统采用了外部晶振,晶振与单片机的连接与MCS-51单片机完全相同。系统的复位电路采用了普通的按键复

11、位电路。PRO接口是用来下载程序的,当程序要下载到单片机内部时用下载线连接计算机与该接口,即可很快地完成程序下载固化,无需专用的编程器,开发方便,节省成本。在程序下载时,占用单片机的串口为P3.0与P3.1,但是这并不影响串行口的正常使用,程序下载完成后P3.0与P3.1还可以当普通串行口使用,并不对串行口的使用造成影响。图3-2 CPU及其外围电路 CTL接口是步进电机驱动器接收外部控制信号的接口,该接口共有四根信号线,分别如下:CLK:步进脉冲输入信号。该信号每接收到一个脉冲信号(FREE信号无效),步进电机正转或反转一步。DIR:电机运行方向控制信号。如DIR=0代表电机正转,则DIR=

12、1代表电机反转。当改变电机运行方向时,必须确保电机已经停止才能进行,否则如果电机正在运行,突然改变电机运行方向则很可能造成运行的失步。驱动器在CLK信号的负跳沿采样DIR信号,因此改变方向时必须保证DIR信号在CLK脉冲的负跳沿之前保持稳定。FREE:电机脱机运行控制信号。驱动器运行后一直采样FREE信号,当FREE=1时,驱动器接收到有效的CLK信号电机即运行,无有效CLK信号则电机停止运行,且保持锁定状态;当FREE=0时,驱动器不接收CLK信号,且电机绕组始终处于开路状态,电机无锁定力矩而处于自由状态。该控制信号所对应的功能主要是考虑在有些情况下需要人为手动去调节设备位置而设置的。GND

13、:共地信号。很显然,这里驱动器与外部的控制器之间是通过直接耦合的方式来传输信号的,因此外接的控制信号必须符合5 V TTL信号标准,否则可能不能正常工作,须注意外界强信号的隔离,以免造成驱动器信号接口损坏。图3-2中的两只发光二极管用来指示驱动器的运行状态。4位的拨码开关有两个目的,其一是用来设定步进电机每个绕组在锁定状态下的最大电流,其二是用于驱动器的自检。3.4.2 功率驱动电路设计功率驱动电路设计两相混合式步进电机的驱动本质上就是通过功率驱动桥来控制流过步进电机绕组的电流,使其按照一定的规律变化,从而产生驱动转子转动的力矩使电机转动。由于两相混合式步进电机绕组中的电流是双向的,因此一个绕

14、组就需要一个H桥来控制其电压与电流,两个绕组就需要两个H桥来控制,这样才能实现两相混合式步进电机的正常驱动。现在构成H桥的方法较多,可以采用功率晶体管、功率MOS管等分立器件来实现,也可以采用集成的功率驱动桥来实现。目前集成驱动桥的方法由于具有电路结构简单、控制方便等优点而得到了广泛应用,特别是DMOS型的功率驱动桥,因具有导通电阻小、损耗功率低等优点而被广泛应用于电机控制领域。L6205即为DMOS类型的典型器件,它是专门为电机控制而设计的双H桥功率驱动芯片。图3-3为L6205的内部结构。该芯片的内部有两个H桥,ENA、IN1A和IN2A是A桥的输入控制信号,OUT1A和OUT2A是A桥的

15、输出。同样,ENB、IN1B、IN2B、OUT1B、OUT2B组成B桥的输入和输出。VSA和VSB为电机绕组提供工作电源,SENSEA和SENSEB用于连接电源的负极,也可以在该引脚连接功率检流电阻,用于对绕组的电流进行检测。为了驱动桥A和桥B的上桥臂功率,MOS管需要较高的控制电压,L6205的内部集成了一个电源泵,在VBOOT和VCP引脚的外部连接必要器件之后就可以构成一个完整的泵电源,从而提供两个桥的上桥臂控制电压。图3-3 L6205的内部结构 L6205内部的控制逻辑接收外部的控制信号,产生直接控制H桥导通状态的驱动信号。每一个桥都有一个过流检测模块,当绕组中的电流超过过流触发电流5

16、.6 A时,过流检测电路输出控制信号以关闭对应的H桥,H桥关闭时间的长短取决于EN引脚外接定时元件的取值。过热保护模块检测芯片工作时的温度,当温度过高时该模块触发控制H桥断开,保护芯片不至于损坏。表3-1是L6205控制功能真值表。表表3-1 L6205控制功能真值表控制功能真值表 图3-4是由L6205构成的功率驱动电路。ENA和ENB引脚连接的100 k电阻和5.6 nF电容用于当过流或者过热情况发生时设定H桥关断的时间为400 s。VCP和VBOOT引脚连接的元件和L6205内部的泵电源电路组成完整的泵电源电路。所有的逻辑信号由单片机控制,STEP_M接口用于连接步进电机,连接于SENS

17、EA和SENSEB的检流电阻用于检测绕组中的电流。图3-5为电机绕组电流检测电路。该电路对由功率检流电阻检测出的电流信号进行滤波和放大,产生的输出信号SA送给单片机进行D/A转换,从而检测流过绕组中的电流大小。这里要特别说明的一点是,该检测电路主要适用于当步进电机停止,进入锁定状态时绕组中的电流检测,并不用于电机运行过程中的电流检测与控制。两相绕组分别设置有一个电流检测电路。图3-4 功率驱动电路图3-5 绕组电流检测电路 3.5 软软 件件 设设 计计3.5.1 系统程序结构系统程序结构系统的程序结构如图3-6所示。系统上电之后先进行必要的初始化操作,然后读取拨码开关的状态,拨码开关的低两位

18、用来设置控制器的运行模式,用户可以在不接外部控制信号的情况下对驱动器进行测试,可以控制电机正转连续运行、反转连续运行及正反转测试运行。如果拨码开关设置为11B状态,则电机进入脉冲触发运行模式,在进行完必要的初始化准备之后,驱动器即可以正常接收外部信号,并在驱动信号的控制下运行。如果电机松脱控制信号FREE=0,则电机的绕阻处于开路状态,此时CLK端的控制信号不起作用,可以手工转动电机;如果FREE=1,则电机在没有驱动信号的情况下处于锁定状态,当每次接收到一个CLK信号时,电机根据DIR信号正转或反转一步。图3-6 程序结构框图 3.5.2 子程序及中断服务程序设计子程序及中断服务程序设计1.

19、步进电机驱动函数步进电机驱动函数两相混合式步进电机驱动采用4拍驱动模式,驱动的相序关系为:,这里A、B表示电机绕组加正向的驱动电压,、则表示绕组中加反向的电压。如果要控制电机正转,按照该相序关系控制绕组的驱动电压变化即可;如果要控制电机反转,则绕组上的电压相序应该正好相反。为了实现步进电机的驱动,这里设计了相应的驱动子函数用于相序的控制。该函数如下:/步进电机驱动子函数void onestep(void)switch(step)case 0:PA1=0;PA2=1;PB1=0;PB2=1;break;case 1:PA1=0;PA2=1;PB1=1;PB2=0;break;case 2:PA1

20、=1;PA2=0;PB1=1;PB2=0;break;case 3:PA1=1;PA2=0;PB1=0;PB2=1;break;default:;该函数每次被调用时,根据step变量的值控制电机两相绕组所加的驱动电压的正负,如果电机正转,step的值会从0增加到3,增加到3后又会回到0,这样循环,从而使电机正转;如果电机反转,则step值的变化规律与正转正好相反。step变量值的变化是由外部函数控制的。2.测试运行程序测试运行程序当设置电机处于测试运行模式时,程序即进入相应的死循环。电机正/反转运行测试,则程序控制电机绕组的电压也按照正/反转相序变化,并且一直循环。正/反转运行测试时程序控制电

21、机正转一圈,然后再反转一圈,一直循环下去。3.外中断外中断INT0服务函数服务函数INT0中断接收的是外部驱动脉冲CLK信号,当CLK信号触发INT0中断时,INT0的中断服务函数就置位外部驱动脉冲标志FLAG,然后中断返回。在主程序中会不断检测FLAG标志,一旦FLAG标志置位并且FREE信号为高电平,则step变量加1(正转)或减1(反转),然后调用电机驱动子函数onestep(),电机正转或反转一步。4.其他函数其他函数A/D转换操作函数包括A/D转换的初始化操作函数及中断服务函数,这些函数的作用是检测绕组中的电流。PWM操作的目的是调节绕组中的电流,在电机锁定时间超过设定时间时PWM操

22、作将被触发,通过A/D转换检测绕组中的电流,把检测到的电流与设定电流进行比较,调整PWM寄存器,从而使电机绕组中的电流在设定值范围之内。3.6 程程 序序 清清 单单/*/头文件:stepm.h/*#define uchar unsigned char#define uint unsigned intsbit PA1=P24;/*电机控制端口定义*/sbit PA2=P25;sbit PB1=P26;sbit PB2=P27;sbit ENA=P37;sbit ENB=P35;sbit ST1=P20;/*状态端口定义*/sbit ST2=P21;sbit ST3=P12;sbit ST4=P

23、13;/*外部控制端口定义*/sbit CLK=P32;sbit DIR=P33;sbit FREE=P34;/*AD端口定义*/sbit SA=P10;sbit SB=P11;/*指示灯定义*/sbit LED_R=P17;sbit LED_G=P16;sbit EADC=0 xAD;sfr CLK_DIV =0 xC7;sfr P2M0 =0 x95;sfr P2M1 =0 x96;sfr P1M0 =0 x91;sfr P1M1 =0 x92;sfr ADC_CON =0 xC5;sfr ADC_DATA=0 xC6;sfr AUXR =0 x8E;/my definition/*sfr

24、 CCON =0 xD8;sfr CMOD =0 xD9;sfr CCAPM0=0 xDA;sfr CCAPM1=0 xDB;sfr CCAPM2=0 xDC;sfr CCAPM3=0 xDD;sfr CCAPM4=0 xDE;sfr CL =0 xE9;sfr CCAP0L=0 xEA;sfr CCAP1L=0 xEB;sfr CCAP2L=0 xEC;sfr CCAP3L=0 xED;sfr CCAP4L=0 xEE;sfr CH =0 xF9;sfr CCAP0H=0 xFA;sfr CCAP1H=0 xFB;sfr CCAP2H=0 xFC;sfr CCAP3H=0 xFD;sfr C

25、CAP4H=0 xFE;*/sfr IPH=0 xB7;/中断优先级高位寄存器sbit EPCA_LVD=IE6;/PCA中断和LVD(低压检测)中断共享的总中断控制位sfr CH=0 xF9;/PCA计数器高8位sfr CL=0 xE9;/PCA计数器低8位/;-sfr CCON=0 xD8;/PCA控制寄存器sbit CCF0=CCON0;/PCA模块0中断标志,由硬件置位,必须由软件清0sbit CCF1=CCON1;/PCA模块1中断标志,由硬件置位,必须由软件清0sbit CCF2=CCON2;/PCA模块2中断标志,由硬件置位,必须由软件清0sbit CCF3=CCON3;/PCA

26、模块3中断标志,由硬件置位,必须由软件清0sbit CR =CCON6;/1:允许PCA计数器计数,必须由软件清0sbit CF =CCON7;/PCA计数器溢出(CH、CL由FFFFH 变为0000H)标志,/PCA 计数器溢出后由硬件置位,必须由软件清0/-sfr CMOD=0 xD9;/PCA工作模式寄存器/*CMOD.7 CIDL:idle状态时PCA计数器是否继续计数,0表示继续计数,1表示停止计数。CMOD.2 CPS1:PCA计数器计数脉冲源选择位1。CMOD.1 CPS0:PCA计数器计数脉冲源选择位0。CPS1 CPS0 0 0 外部晶体频率/12。0 1 外部晶体频率/2。

27、1 0 Timer 0 溢出脉冲,Timer 0还可通过AUXR寄存器设置成工作在12T或1T模式。1 1 从ECI/P3.4 脚输入的外部时钟。CMOD.0 ECF:PCA计数器溢出中断允许位,1表示允许CF(CCON.7)产生中断*/-sfr CCAP0H=0 xFA;/PCA 模块0的捕捉/比较寄存器高8位sfr CCAP1H=0 xFB;/PCA 模块1的捕捉/比较寄存器高8位sfr CCAP2H=0 xFC;/PCA 模块2的捕捉/比较寄存器高8位sfr CCAP3H=0 xFD;/PCA 模块3的捕捉/比较寄存器高8位sfr CCAP0L=0 xEA;/PCA 模块0的捕捉/比较寄

28、存器低8位sfr CCAP1L=0 xEB;/PCA 模块1的捕捉/比较寄存器低8位sfr CCAP2L=0 xEC;/PCA 模块2的捕捉/比较寄存器低8位sfr CCAP3L=0 xED;/PCA 模块3的捕捉/比较寄存器低8位/-sfr PCA_PWM0=0 xF2;/PCA 模块0 PWM寄存器sfr PCA_PWM1=0 xF3;/PCA 模块1 PWM寄存器sfr PCA_PWM2=0 xF4;/PCA 模块2 PWM寄存器sfr PCA_PWM3=0 xF5;/PCA 模块3 PWM寄存器/*PCA_PWMn:7 6 5 4 3 2 1 0-EPCnH EPCnLB7B2:保留。

29、B1(EPCnH):在PWM 模式下,与CCAPnH 组成9 位数。B0(EPCnL):在PWM 模式下,与CCAPnL 组成9 位数*/-sfr CCAPM0=0 xDA;/PCA 模块0的工作模式寄存器sfr CCAPM1=0 xDB;/PCA 模块1的工作模式寄存器sfr CCAPM2=0 xDC;/PCA 模块2的工作模式寄存器sfr CCAPM3=0 xDD;/PCA 模块3的工作模式寄存器sfr CCAPM4=0 xDE;/PCA 模块4的工作模式寄存器sfr CCAPM5=0 xDF;/PCA 模块5的工作模式寄存器/*CCAPMn:7 6 5 4 3 2 1 0-ECOMn C

30、APPn CAPNn MATn TOGn PWMn ECCFnECOMn=1:允许比较功能。CAPPn=1:允许上升沿触发捕捉功能。CAPNn=1:允许下降沿触发捕捉功能。MATn=1:当匹配情况发生时,允许CCON中的CCFn置位。TOGn=1:当匹配情况发生时,CEXn将翻转。PWMn=1:将CEXn设置为PWM输出。ECCFn=1:允许CCON中的CCFn触发中断。ECOMn CAPPn CAPNn MATn TOGn PWMn ECCFn 0 0 0 0 0 0 0 00H 未启用任何功能。x 1 0 0 0 0 x 21H 16 位CEXn上升沿触发捕捉功能。x 0 1 0 0 0

31、x 11H 16 位CEXn下降沿触发捕捉功能。x 1 1 0 0 0 x 31H 16 位CEXn边沿(上、下沿)触发捕捉功能。1 0 0 1 0 0 x 49H 16 位软件定时器。1 0 0 1 1 0 x 4DH 16 位高速脉冲输出。1 0 0 0 0 1 0 42H 8 位PWM*/-#define ON 0#define OFF 1#define ADC_CH0 0 xE0;#define ADC_CH1 0 xE1;#define ADC_CH2 0 xE2;#define ADC_CH3 0 xE3;#define ADC_CH4 0 xE4;#define ADC_CH5

32、0 xE5;#define ADC_CH6 0 xE6;#define ADC_CH7 0 xE7;#define curent_max1 0 x10;#define curent_max2 0 x30;#define curent_max3 0 x50;#define curent_max4 0 x70;bit Flag,Direction;bit curent_limit;uchar step,adc_value,curent_set;uint adc_av;uchar stop_count,pwm;/*/子程序定义文件:stepm_sub.h/*/定时计数器T0初始化函数void tim

33、er0_init(void)unsigned char a;a=TMOD;a=a|0 x02;/定时器0工作方式2 TMOD=a;/TH0=0 xDF;/TL0=0 xDF;/定时时间19.8 s,ft0=50.5 kHz TH0=0 xF0;TL0=0 xF0;/定时时间9.8 s,ft0=100 kHz TR0=1;ET0=0;/EA=1;/定时计数器T1初始化函数void timer1_init(void)unsigned char a;a=TMOD;a=a|0 x10;/定时器1工作方式1 TMOD=a;TH1=0 xBE;TL1=0 xE5;/定时时间10 ms TR1=1;ET1=

34、1;EA=1;/定时器1中断函数void timer1(void)interrupt 3 using 1 TH1=0 xBE;TL1=0 xE5;/定时时间10 ms stop_count=stop_count+1;if(stop_count=10)/启动电流限制 /*stop_count=100;PA1=0;PA2=0;PB1=0;PB2=0;LED_R=0;LED_G=1;*/CCAPM0=0 x42;/设置PCA模块0工作在PWM方式下 CCAPM3=0 x42;/设置PCA模块3工作在PWM方式下 CR=1;stop_count=10;curent_limit=1;LED_R=0;LE

35、D_G=1;if(stop_count=curent_set)pwm=pwm+1;if(pwm0 xf7)pwm=0 xf7;CCAP0L=pwm;CCAP0H=pwm;CCAP3L=pwm;CCAP3H=pwm;elsepwm=0 x80;/*PWM部分函数子程序*/pwm初始化子程序void pwm_init(void)/CMOD=0 x00;/设置PCA定时器时钟信号为fosc/12 CMOD=0 x02;/设置PCA定时器时钟信号为fosc/2 /CMOD=0 x04;/设置PCA定时器时钟信号为1/T0 /CMOD=0 x00;/设置PCA定时器时钟信号为P3.4 CL=0 x00;

36、CH=0 x00;pwm=0 x80;CCAP0L=0 x80;CCAP0H=0 x80;CCAPM0=0 x00;/禁止pwm0 /CCAPM0=0 x42;/设置PCA模块0工作在PWM方式下 CCAP3L=0 x80;CCAP3H=0 x80;CCAPM3=0X00;/禁止pwm3 /CCAPM3=0 x42;/设置PCA模块3工作在PWM方式下 /CR=1;/*/*/串行口调试程序/*/串行口初始化函数void rs232_init(void)uchar a;TI=0;RI=0;a=TMOD;a=a|0 x20;TMOD=a;/设置T1为波特率发生器 SCON=0 x50;/设置串行口

37、工作于8位模式下,波特率可变 TH1=0 xEA;/20 MHz晶振,波特率为2400 b/s TL1=0 xEA;TR1=1;ES=1;EA=1;/串行口中断服务函数void rs232_int(void)interrupt 4 using 3 if(RI=1)RI=0;if(TI=1)TI=0;/ADC_CON=ADC_CH0;/ADC_DATA=0 x00;/ADC_CON=ADC_CON|0 x08;SBUF=(uchar)adc_av;/SBUF=0 x55;*/*/主程序文件:file.c/步进电机驱动器程序/hadaqu 2009-03-07/*#include reg51.h#

38、include intrins.h#include stepm.h#include stepm_sub.hvoid Delay(unsigned int n)unsigned int i;for(i=0;in;i+)_nop_();_nop_();_nop_();_nop_();/步进电机驱动子函数void onestep(void)switch(step)case 0:PA1=0;PA2=1;PB1=0;PB2=1;break;case 1:PA1=0;PA2=1;PB1=1;PB2=0;break;case 2:PA1=1;PA2=0;PB1=1;PB2=0;break;case 3:PA

39、1=1;PA2=0;PB1=0;PB2=1;break;default:;/主函数void main()unsigned char k,status;unsigned int count;CLK_DIV=0 x00;P2M0=0 x0;P2M1=0 x40;/P2口高4位推挽输出,低4位作为一般I/O口 /上电指示,闪灯一次 LED_R=0;LED_G=0;for(k=0;k10;k+)Delay(10000);LED_R=1;LED_G=1;/电机端口初始化,电机锁定 ENA=1;ENB=1;onestep();Delay(10000);Delay(10000);status=P2;stat

40、us=status&0 x03;/正转测试运行模式 if(status=0 x00)LED_R=0;/正转红灯亮 do step=step+1;if(step=0 x04)step=0 x00;onestep();Delay(1000);while(1);/反转测试运行模式 if(status=0 x01)LED_G=0;/反转绿灯亮 do step=step-1;if(step=0 x0ff)step=0 x03;onestep();Delay(1000);while(1);/正反转测试运行模式 if(status=0 x02)for(;)count=400;LED_R=0;LED_G=1;

41、do step=step+1;if(step=0 x04)step=0 x00;onestep();Delay(1000);count-;while(count!=0);Delay(50000);count=400;LED_R=1;LED_G=0;do step=step-1;if(step=0 x0ff)step=0 x03;onestep();Delay(1000);count-;while(count!=0);Delay(50000);/脉冲触发运行模式 if(status=0 x03)step=0;Flag=0;int0_init();timer0_init();timer1_init

42、();stop_count=0;curent_limit=0;/rs232_init();/TI=1;pwm_init();adc_int_init();adc_pow_on();Delay(100);set_adc_pin();set_adc_ch1();Delay(100);adc_start();/设置锁定电流 status=P2;status=status&0 x0c;if(status=0 x00)curent_set=curent_max1;if(status=0 x04)curent_set=curent_max2;if(status=0 x08)curent_set=curent_max3;if(status=0 x0c)curent_set=curent_max4;/主循环程序 do do if(Flag=1)if(DIR=0)step=step+1;if(step=0 x04)step=0 x00;if(DIR=1)step=step-1;if(step=0 xff)step=0 x03;Flag=0;break;if(FREE=0)ENA=0;ENB=0;else ENA=1;ENB=1;while(1);onestep();while(1);

侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|