版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章步进电机驱动器设计
3.1引言3.2步进电机驱动器设计任务书3.3设计方案3.4硬件电路设计3.5软件设计3.6程序清单3.1引言步进电机是把电脉冲信号转换为机械位移信号的执行元件,其在控制领域内的应用十分广泛。由于步进电机可以通过控制脉冲来精确控制电机转过的角度,具有较高的运行精度,可以实现开环控制,因而在构成控制系统时实现较简单。步进电机要实现运行控制必须通过相应的驱动器来实现,步进电机种类繁多,驱动器的种类也多种多样。近年来两相混合式步进电机因其结构简单、控制方便而得到了广泛的应用,本章将针对两相混合式步进电机驱动器的研究、设计和制作进行介绍。3.2步进电机驱动器设计任务书
1.设计任务设计并制作两相混合式步进电机驱动器,要求该驱动器能够接收外部控制信号以实现电机的运行控制功能,主要包括步进驱动功能、方向控制功能、脱机运行功能及限流保护功能等。
2.设计要求
1)驱动器控制端子设置驱动器设置4个控制输入信号端子,分别为CLK、DIR、FREE和GND,各个信号的含义为:CLK信号为步进电机的驱动控制脉冲信号,驱动器每接收到一个脉冲就运行一步;DIR为电机运行方向控制信号,DIR=0代表一个运行方向,DIR=1代表另一个运行方向;FREE信号为脱机运行信号,如果FREE信号为高电平,则步进电机上电后即锁定,当有CLK脉冲信号时电机运行,如果FREE信号为低电平,则步进电机上电后处于松开状态,此时方便手动调节电机所驱动的目标设备位置,并且驱动器不对CLK信号做出反应。
2)控制输入信号的要求输入信号GND是驱动器与外接控制器之间的共地信号,其他输入信号应该符合TTL电平标准。CLK信号脉冲的有效沿为下跳沿,且要求负跳沿后的低电平脉冲宽度大于5μs。
3)方向控制
DIR信号控制方向变化时必须保证电机已经停止,并且在下一个CLK脉冲到来之前保持稳定。
4)电流保护功能步进电机处于锁定状态时,绕组中的电流较大,电机发热严重,因此要求驱动器能够在电机锁定时限制电流在要求的范围之内,用户可以根据所使用的电机设定锁定状态的最高电流上限为0.8A、1.2A、1.6A、2.0A四种情况。
5)驱动器输入电源驱动器要求外加电源,包括逻辑部分电源和绕组供电电源,驱动器逻辑部分输入电压为(1±10%)5V,电机绕组驱动输入电压范围为12~48V。
6)适用电机驱动器主要用于驱动42系列、绕组电流小于2A的各种两相混合式步进电机。3.3设计方案步进电机驱动器的设计方案考虑的核心问题是驱动器功率驱动电路的设计与实现。对于两相混合式步进电机而言,需要两个H桥电路来实现两相绕组的电流控制:一种方案是采用晶体管或者功率MOS管来实现,一个H桥电路需要4个功率管,两个H桥需要8个功率管,因此采用此种方案驱动电路的组成较复杂,实现起来电路规模较大,通常适合于设计较大功率的步进电机驱动器;另一种设计方案为采用集成驱动桥电路来实现,现在常用的功率桥可大致分为两大类,一类为内部采用功率晶体管结构(达林顿晶体管),另一类为内部采用功率MOS管。功率晶体管驱动桥由于管子工作时管压降较大,损耗功率较大,发热严重,效率较低,给电路的散热设计带来不便,因此近些年来MOS集成驱动桥越来越普遍,特别是采用了DMOS工艺的驱动桥以其优良的特性受到设计者的青睐,本次设计就采用了意法公司的DMOS驱动芯片L6205。步进电机驱动器主处理器的选择是设计方案中要考虑的另一个主要问题,应该说步进电机驱动器的控制任务并不复杂,对处理器的要求也不高,普通的8位单片机都可以完成相应的控制任务,但是考虑到控制器附加资源的多少、开发手段的方便程度、硬件成本等因素,这里采用了宏晶科技公司的STC12C5410AD单片机。该单片机是高速的51单片机,其指令的执行速度比同频率的普通51单片机快得多,普通51单片机需要12个晶振周期才能完成的一条指令,该STC单片机最快仅需要1个晶振周期就可以完成。根据设计要求,该驱动器应该具有电流保护功能,用户可以根据自己所使用的电机来设定电机锁定时绕组中的最高电流,为此必须在设计方案中考虑电机绕组电流的检测问题。这里采用的方案为:采用检流电阻采样绕组电流,该电流经过整理放大由STC12C5410AD进行转换,再利用PWM调制的方法保证电机锁定时绕组中的电流不会超过最高限定值。图3-1是该设计方案的原理框图。图3-1步进电机驱动器原理框图3.4硬件电路设计两相混合式步进电机驱动器的硬件电路组成并不复杂,这里分两部分进行介绍。3.4.1主处理器及其外围电路设计此次设计中主处理器选择了STC12C5410AD,该单片机指令与MCS-51系列单片机相兼容,但其指令执行速度却远远高于MCS-51单片机。STC12C5410系列单片机是单时钟/机器周期(1T)的兼容8051内核单片机,是高速/低功耗的新一代8051单片机,具有全新的流水线/精简指令集结构,且内部集成MAX810专用复位电路。该系列单片机不但在指令的执行速度上取得优势,其内部的附加资源也比传统的MCS-51丰富了许多,其主要特点如下:
增强型1T流水线/精简指令集结构8051CPU。
工作电压:5.5~3.4V(5V单片机)/3.8~2.0V(3V单片机)。
工作频率范围:0~35MHz,相当于普通8051的0~420MHz。实际工作频率可达48MHz。
用户应用程序空间:12KB/10KB/8KB/6KB/4KB/2KB。
片上集成512BRAM。
通用I/O口(27/23个)可设置成四种模式:准双向口/弱上拉模式(兼容8051模式)、推挽/强上拉模式、仅为输入/高阻模式、开漏模式,每个I/O口的驱动能力均可达到20mA,但整个芯片最大不得超过55mA。
ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,即可通过串口(P3.0/P3.1)直接下载用户程序,编程速度较快。
具有E2PROM功能。
具有看门狗及内部集成MAX810专用复位电路(当外部晶振频率低于20MHz时,可省去外部复位电路)。
时钟源可选外部高精度晶体或外部时钟信号,还可以使用内部RC振荡器提供系统工作时钟,用户在下载用户程序时,可选择使用内部RC振荡器或外部晶体振荡器(常温下内部RC振荡器的频率为5.2~6.8MHz)。
具有2个16位定时器/计数器,PWM(4路)/PCA(可编程计数器阵列)。
具有2路外部中断,可设置为下降沿中断或低电平触发中断,PowerDown模式可由外部中断低电平触发中断方式唤醒。
具有共8路10位精度ADC。
通用异步串行口(UART)、SPI同步通信口、主模式/从模式。
工作温度范围:0~75℃/-40~+85℃。
封装:PDIP-28,SOP-28,PDIP-20,SOP-20,PLCC-32,TSSOP-20。图3-2是驱动器CPU及其外围电路,该系统采用了外部晶振,晶振与单片机的连接与MCS-51单片机完全相同。系统的复位电路采用了普通的按键复位电路。PRO接口是用来下载程序的,当程序要下载到单片机内部时用下载线连接计算机与该接口,即可很快地完成程序下载固化,无需专用的编程器,开发方便,节省成本。在程序下载时,占用单片机的串口为P3.0与P3.1,但是这并不影响串行口的正常使用,程序下载完成后P3.0与P3.1还可以当普通串行口使用,并不对串行口的使用造成影响。图3-2CPU及其外围电路
CTL接口是步进电机驱动器接收外部控制信号的接口,该接口共有四根信号线,分别如下:
CLK:步进脉冲输入信号。该信号每接收到一个脉冲信号(FREE信号无效),步进电机正转或反转一步。
DIR:电机运行方向控制信号。如DIR=0代表电机正转,则DIR=1代表电机反转。当改变电机运行方向时,必须确保电机已经停止才能进行,否则如果电机正在运行,突然改变电机运行方向则很可能造成运行的失步。驱动器在CLK信号的负跳沿采样DIR信号,因此改变方向时必须保证DIR信号在CLK脉冲的负跳沿之前保持稳定。
FREE:电机脱机运行控制信号。驱动器运行后一直采样FREE信号,当FREE=1时,驱动器接收到有效的CLK信号电机即运行,无有效CLK信号则电机停止运行,且保持锁定状态;当FREE=0时,驱动器不接收CLK信号,且电机绕组始终处于开路状态,电机无锁定力矩而处于自由状态。该控制信号所对应的功能主要是考虑在有些情况下需要人为手动去调节设备位置而设置的。
GND:共地信号。很显然,这里驱动器与外部的控制器之间是通过直接耦合的方式来传输信号的,因此外接的控制信号必须符合5VTTL信号标准,否则可能不能正常工作,须注意外界强信号的隔离,以免造成驱动器信号接口损坏。图3-2中的两只发光二极管用来指示驱动器的运行状态。
4位的拨码开关有两个目的,其一是用来设定步进电机每个绕组在锁定状态下的最大电流,其二是用于驱动器的自检。3.4.2功率驱动电路设计两相混合式步进电机的驱动本质上就是通过功率驱动桥来控制流过步进电机绕组的电流,使其按照一定的规律变化,从而产生驱动转子转动的力矩使电机转动。由于两相混合式步进电机绕组中的电流是双向的,因此一个绕组就需要一个H桥来控制其电压与电流,两个绕组就需要两个H桥来控制,这样才能实现两相混合式步进电机的正常驱动。现在构成H桥的方法较多,可以采用功率晶体管、功率MOS管等分立器件来实现,也可以采用集成的功率驱动桥来实现。目前集成驱动桥的方法由于具有电路结构简单、控制方便等优点而得到了广泛应用,特别是DMOS型的功率驱动桥,因具有导通电阻小、损耗功率低等优点而被广泛应用于电机控制领域。L6205即为DMOS类型的典型器件,它是专门为电机控制而设计的双H桥功率驱动芯片。图3-3为L6205的内部结构。该芯片的内部有两个H桥,ENA、IN1A和IN2A是A桥的输入控制信号,OUT1A和OUT2A是A桥的输出。同样,ENB、IN1B、IN2B、OUT1B、OUT2B组成B桥的输入和输出。VSA和VSB为电机绕组提供工作电源,SENSEA和SENSEB用于连接电源的负极,也可以在该引脚连接功率检流电阻,用于对绕组的电流进行检测。为了驱动桥A和桥B的上桥臂功率,MOS管需要较高的控制电压,L6205的内部集成了一个电源泵,在VBOOT和VCP引脚的外部连接必要器件之后就可以构成一个完整的泵电源,从而提供两个桥的上桥臂控制电压。图3-3L6205的内部结构
L6205内部的控制逻辑接收外部的控制信号,产生直接控制H桥导通状态的驱动信号。每一个桥都有一个过流检测模块,当绕组中的电流超过过流触发电流5.6A时,过流检测电路输出控制信号以关闭对应的H桥,H桥关闭时间的长短取决于EN引脚外接定时元件的取值。过热保护模块检测芯片工作时的温度,当温度过高时该模块触发控制H桥断开,保护芯片不至于损坏。表3-1是L6205控制功能真值表。表3-1L6205控制功能真值表图3-4是由L6205构成的功率驱动电路。ENA和ENB引脚连接的100kΩ电阻和5.6nF电容用于当过流或者过热情况发生时设定H桥关断的时间为400μs。VCP和VBOOT引脚连接的元件和L6205内部的泵电源电路组成完整的泵电源电路。所有的逻辑信号由单片机控制,STEP_M接口用于连接步进电机,连接于SENSEA和SENSEB的检流电阻用于检测绕组中的电流。图3-5为电机绕组电流检测电路。该电路对由功率检流电阻检测出的电流信号进行滤波和放大,产生的输出信号SA送给单片机进行D/A转换,从而检测流过绕组中的电流大小。这里要特别说明的一点是,该检测电路主要适用于当步进电机停止,进入锁定状态时绕组中的电流检测,并不用于电机运行过程中的电流检测与控制。两相绕组分别设置有一个电流检测电路。图3-4功率驱动电路图3-5绕组电流检测电路3.5软件设计3.5.1系统程序结构系统的程序结构如图3-6所示。系统上电之后先进行必要的初始化操作,然后读取拨码开关的状态,拨码开关的低两位用来设置控制器的运行模式,用户可以在不接外部控制信号的情况下对驱动器进行测试,可以控制电机正转连续运行、反转连续运行及正反转测试运行。如果拨码开关设置为11B状态,则电机进入脉冲触发运行模式,在进行完必要的初始化准备之后,驱动器即可以正常接收外部信号,并在驱动信号的控制下运行。如果电机松脱控制信号FREE=0,则电机的绕阻处于开路状态,此时CLK端的控制信号不起作用,可以手工转动电机;如果FREE=1,则电机在没有驱动信号的情况下处于锁定状态,当每次接收到一个CLK信号时,电机根据DIR信号正转或反转一步。图3-6程序结构框图3.5.2子程序及中断服务程序设计
1.步进电机驱动函数两相混合式步进电机驱动采用4拍驱动模式,驱动的相序关系为:,这里A、B表示电机绕组加正向的驱动电压,、则表示绕组中加反向的电压。如果要控制电机正转,按照该相序关系控制绕组的驱动电压变化即可;如果要控制电机反转,则绕组上的电压相序应该正好相反。为了实现步进电机的驱动,这里设计了相应的驱动子函数用于相序的控制。该函数如下:
//步进电机驱动子函数
voidonestep(void)
{
switch(step)
{
case0:{PA1=0;PA2=1;PB1=0;PB2=1;}break;
case1:{PA1=0;PA2=1;PB1=1;PB2=0;}break;
case2:{PA1=1;PA2=0;PB1=1;PB2=0;}break;
case3:{PA1=1;PA2=0;PB1=0;PB2=1;}break;
default:;
}
}该函数每次被调用时,根据step变量的值控制电机两相绕组所加的驱动电压的正负,如果电机正转,step的值会从0增加到3,增加到3后又会回到0,这样循环,从而使电机正转;如果电机反转,则step值的变化规律与正转正好相反。step变量值的变化是由外部函数控制的。
2.测试运行程序当设置电机处于测试运行模式时,程序即进入相应的死循环。电机正/反转运行测试,则程序控制电机绕组的电压也按照正/反转相序变化,并且一直循环。正/反转运行测试时程序控制电机正转一圈,然后再反转一圈,一直循环下去。
3.外中断INT0服务函数
INT0中断接收的是外部驱动脉冲CLK信号,当CLK信号触发INT0中断时,INT0的中断服务函数就置位外部驱动脉冲标志FLAG,然后中断返回。在主程序中会不断检测FLAG标志,一旦FLAG标志置位并且FREE信号为高电平,则step变量加1(正转)或减1(反转),然后调用电机驱动子函数onestep(),电机正转或反转一步。
4.其他函数
A/D转换操作函数包括A/D转换的初始化操作函数及中断服务函数,这些函数的作用是检测绕组中的电流。
PWM操作的目的是调节绕组中的电流,在电机锁定时间超过设定时间时PWM操作将被触发,通过A/D转换检测绕组中的电流,把检测到的电流与设定电流进行比较,调整PWM寄存器,从而使电机绕组中的电流在设定值范围之内。3.6程序清单
//*************************************
//头文件:stepm.h
//*************************************
#defineucharunsignedchar
#defineuintunsignedint
sbitPA1=P2^4; /*电机控制端口定义*/
sbitPA2=P2^5;
sbitPB1=P2^6;
sbitPB2=P2^7;
sbitENA=P3^7;
sbitENB=P3^5;
sbitST1=P2^0; /*状态端口定义*/sbitST2=P2^1;sbitST3=P1^2;sbitST4=P1^3;/*外部控制端口定义*/sbitCLK=P3^2;sbitDIR=P3^3;sbitFREE=P3^4;/*AD端口定义*/sbitSA=P1^0;sbitSB=P1^1;/*指示灯定义*/sbitLED_R=P1^7;sbitLED_G=P1^6;sbitEADC=0xAD;sfrCLK_DIV =0xC7;sfrP2M0 =0x95;sfrP2M1 =0x96;sfrP1M0 =0x91;sfrP1M1 =0x92;sfrADC_CON =0xC5;sfrADC_DATA =0xC6;sfrAUXR =0x8E;//mydefinition/*sfrCCON =0xD8;sfrCMOD =0xD9;sfrCCAPM0 =0xDA;sfrCCAPM1 =0xDB;sfrCCAPM2 =0xDC;sfrCCAPM3 =0xDD;sfrCCAPM4 =0xDE;sfrCL =0xE9;sfrCCAP0L =0xEA;sfrCCAP1L =0xEB;sfrCCAP2L =0xEC;sfrCCAP3L =0xED;sfrCCAP4L =0xEE;sfrCH =0xF9;sfrCCAP0H =0xFA;sfrCCAP1H =0xFB;sfrCCAP2H =0xFC;sfrCCAP3H =0xFD;sfrCCAP4H =0xFE;*/sfrIPH=0xB7; //中断优先级高位寄存器sbitEPCA_LVD=IE^6; //PCA中断和LVD(低压检测)中断共享的总中断控制位sfrCH=0xF9; //PCA计数器高8位sfrCL=0xE9; //PCA计数器低8位//;------------------------sfrCCON=0xD8; //PCA控制寄存器sbitCCF0=CCON^0; //PCA模块0中断标志,由硬件置位,必须由软件清0sbitCCF1=CCON^1; //PCA模块1中断标志,由硬件置位,必须由软件清0sbitCCF2=CCON^2; //PCA模块2中断标志,由硬件置位,必须由软件清0sbitCCF3=CCON^3; //PCA模块3中断标志,由硬件置位,必须由软件清0sbitCR=CCON^6; //1:允许PCA计数器计数,必须由软件清0sbitCF=CCON^7; //PCA计数器溢出(CH、CL由FFFFH变为0000H)标志,//PCA计数器溢出后由硬件置位,必须由软件清0//------------------------sfrCMOD=0xD9; //PCA工作模式寄存器/*CMOD.7CIDL:idle状态时PCA计数器是否继续计数,0表示继续计数,1表示停止计数。CMOD.2CPS1:PCA计数器计数脉冲源选择位1。CMOD.1CPS0:PCA计数器计数脉冲源选择位0。
CPS1CPS000外部晶体频率/12。
01外部晶体频率/2。
10Timer0溢出脉冲,Timer0还可通过AUXR寄存器设置成工作在12T或1T模式。
11从ECI/P3.4脚输入的外部时钟。
CMOD.0ECF:PCA计数器溢出中断允许位,1表示允许CF(CCON.7)产生中断*///------------------------sfrCCAP0H=0xFA;//PCA模块0的捕捉/比较寄存器高8位sfrCCAP1H=0xFB;//PCA模块1的捕捉/比较寄存器高8位sfrCCAP2H=0xFC;//PCA模块2的捕捉/比较寄存器高8位sfrCCAP3H=0xFD;//PCA模块3的捕捉/比较寄存器高8位sfrCCAP0L=0xEA;//PCA模块0的捕捉/比较寄存器低8位sfrCCAP1L=0xEB;//PCA模块1的捕捉/比较寄存器低8位sfrCCAP2L=0xEC;//PCA模块2的捕捉/比较寄存器低8位sfrCCAP3L=0xED;//PCA模块3的捕捉/比较寄存器低8位//------------------------sfrPCA_PWM0=0xF2;//PCA模块0PWM寄存器sfrPCA_PWM1=0xF3;//PCA模块1PWM寄存器sfrPCA_PWM2=0xF4;//PCA模块2PWM寄存器sfrPCA_PWM3=0xF5;//PCA模块3PWM寄存器/*PCA_PWMn:76543210------EPCnHEPCnLB7~B2:保留。B1(EPCnH):在PWM模式下,与CCAPnH组成9位数。B0(EPCnL):在PWM模式下,与CCAPnL组成9位数*///------------------------sfrCCAPM0=0xDA;//PCA模块0的工作模式寄存器sfrCCAPM1=0xDB;//PCA模块1的工作模式寄存器sfrCCAPM2=0xDC;//PCA模块2的工作模式寄存器sfrCCAPM3=0xDD;//PCA模块3的工作模式寄存器sfrCCAPM4=0xDE;//PCA模块4的工作模式寄存器sfrCCAPM5=0xDF;//PCA模块5的工作模式寄存器/*CCAPMn:76543210-ECOMnCAPPnCAPNnMATnTOGnPWMnECCFnECOMn=1:允许比较功能。CAPPn=1:允许上升沿触发捕捉功能。CAPNn=1:允许下降沿触发捕捉功能。MATn=1:当匹配情况发生时,允许CCON中的CCFn置位。TOGn=1:当匹配情况发生时,CEXn将翻转。PWMn=1:将CEXn设置为PWM输出。ECCFn=1:允许CCON中的CCFn触发中断。ECOMnCAPPnCAPNnMATnTOGnPWMnECCFn000000000H未启用任何功能。
x10000x21H16位CEXn上升沿触发捕捉功能。
x01000x11H16位CEXn下降沿触发捕捉功能。
x11000x31H16位CEXn边沿(上、下沿)触发捕捉功能。
100100x49H16位软件定时器。
100110x4DH16位高速脉冲输出。
100001042H8位PWM*///------------------------------------------------------------------------------#defineON0#defineOFF1#defineADC_CH00xE0;#defineADC_CH10xE1;#defineADC_CH20xE2;#defineADC_CH30xE3;#defineADC_CH40xE4;#defineADC_CH50xE5;#defineADC_CH60xE6;#defineADC_CH70xE7;#definecurent_max10x10;#definecurent_max20x30;#definecurent_max30x50;#definecurent_max40x70;bitFlag,Direction;bitcurent_limit;ucharstep,adc_value,curent_set;uintadc_av;ucharstop_count,pwm;//*************************************//子程序定义文件:stepm_sub.h//*************************************//定时计数器T0初始化函数voidtimer0_init(void){unsignedchara;a=TMOD;a=a|0x02; //定时器0工作方式2TMOD=a;//TH0=0xDF;//TL0=0xDF; //定时时间19.8μs,ft0=50.5kHzTH0=0xF0;TL0=0xF0; //定时时间9.8μs,ft0=100kHzTR0=1;ET0=0;//EA=1;}//定时计数器T1初始化函数voidtimer1_init(void){unsignedchara;a=TMOD;a=a|0x10; //定时器1工作方式1TMOD=a;TH1=0xBE;TL1=0xE5; //定时时间10msTR1=1;ET1=1;EA=1;}//定时器1中断函数voidtimer1(void)interrupt3using1{TH1=0xBE;TL1=0xE5; //定时时间10msstop_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=0x42;//设置PCA模块0工作在PWM方式下
CCAPM3=0x42;//设置PCA模块3工作在PWM方式下
CR=1;stop_count=10;curent_limit=1;LED_R=0;LED_G=1;}if(stop_count<10){//停止电流限制
/*LED_R=1;LED_G=1;*/CR=0;CCAPM0=0x00;CCAPM3=0x00;ENA=1;ENB=1;curent_limit=0;LED_R=1;LED_G=0;}}//INT0初始化函数voidint0_init(void){IT0=1;PX0=1;EX0=1;EA=1;}//INT0中断服务函数voidint0(void)interrupt0using2{Flag=1;stop_count=0x00;//if(FREE==1){ENA=1;ENB=1;}}//ADC电源开启函数voidadc_pow_on(void){ADC_CON=ADC_CON|0x80;}//ADC输入引脚开路设置函数voidset_adc_pin(void){P1M0=P1M0|0x03; //设置P1.0、P1.1为输入模式
P1M1=P1M0|0x03;}//设置P1.0为ADC通道函数voidset_adc_ch0(void){ADC_CON=ADC_CH0;}//设置P1.1为ADC通道函数voidset_adc_ch1(void){ADC_CON=ADC_CH1;}//voidadc_start(void){ADC_DATA=0x00;ADC_CON=ADC_CON|0x08;}voidadc_int_init(void){IP=0x00;IPH=0x00;AUXR=0x10;
EADC=1;EA=1;}voidadc_int(void)interrupt5using3{ADC_CON=ADC_CON&0xe7;adc_value=ADC_DATA;
ADC_CON=ADC_CH0;
ADC_DATA=0x00;ADC_CON=ADC_CON|0x08;
if(curent_limit==1){if(adc_value>=curent_set){pwm=pwm+1;if(pwm>0xf7)pwm=0xf7;CCAP0L=pwm;CCAP0H=pwm;CCAP3L=pwm;CCAP3H=pwm;}}else{pwm=0x80;}}//*************PWM部分函数子程序****************//pwm初始化子程序voidpwm_init(void){//CMOD=0x00; //设置PCA定时器时钟信号为fosc/12CMOD=0x02; //设置PCA定时器时钟信号为fosc/2//CMOD=0x04; //设置PCA定时器时钟信号为1/T0//CMOD=0x00; //设置PCA定时器时钟信号为P3.4CL=0x00;CH=0x00;pwm=0x80;CCAP0L=0x80;
CCAP0H=0x80;CCAPM0=0x00; //禁止pwm0
//CCAPM0=0x42; //设置PCA模块0工作在PWM方式下
CCAP3L=0x80;CCAP3H=0x80;CCAPM3=0X00; //禁止pwm3//CCAPM3=0x42; //设置PCA模块3工作在PWM方式下
//CR=1;}/*//**************************************************//串行口调试程序//**************************************************//串行口初始化函数voidrs232_init(void){uchara;
TI=0;RI=0;a=TMOD;a=a|0x20;TMOD=a; //设置T1为波特率发生器
SCON=0x50; //设置串行口工作于8位模式下,波特率可变
TH1=0xEA; //20MHz晶振,波特率为2400b/s
TL1=0xEA;TR1=1;ES=1;EA=1;}//串行口中断服务函数voidrs232_int(void)interrupt4using3{if(RI==1){RI=0;}if(TI==1)
{TI=0;//ADC_CON=ADC_CH0;//ADC_DATA=0x00;//ADC_CON=ADC_CON|0x08;SBUF=(uchar)adc_av;//SBUF=0x55;}}*///*************************************//主程序文件:file.c//步进电机驱动器程序//hadaqu2009-03-07//*************************************#include"reg51.h"#include"intrins.h"#include"stepm.h"#include"stepm_sub.h"voidDelay(unsignedintn){unsignedinti;for(i=0;i<n;i++)
{_nop_();
_nop_();
_nop_();
_nop_();}}//步进电机驱动子函数voidonestep(void){switch(step){case0:{PA1=0;PA2=1;PB1=0;PB2=1;}break;case1:{PA1=0;PA2=1;PB1=1;PB2=0;}break;case2:{PA1=1;PA2=0;PB1=1;PB2=0;}break;case3:{PA1=1;PA2=0;PB1=0;PB2=1;}break;default:;}}//主函数voidmain(){unsignedchark,status;unsignedintcount;CLK_DIV=0x00;P2M0=0x0;P2M1=0x40; //P2口高4位推挽输出,低4位作为一般I/O口//上电指示,闪灯一次
LED_R=0;LED_G=0;for(k=0;k<10;k++){Delay(10000);}LED_R=1;LED_G=1;//电机端口初始化,电机锁定
ENA=1;ENB=1;onestep();Delay(10000);Delay(10000);status=P2;status=status&0x03;//正转测试运行模式if(status==0x00){
LED_R=0; //正转红灯亮
do{
step=step+1;if(step==0x04)step=0x00;onestep();
Delay(1000);
}while(1);}//反转测试运行模式
if(status==0x01){LED_G=0;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 西华师范大学《商务文案设计》2023-2024学年第一学期期末试卷
- 西安理工大学《跨文化商务交际导论》2023-2024学年第一学期期末试卷
- 2024年高铁站区建筑劳务清包合同
- 2024版条码设备维护保养协议版
- 2024房地产买卖合同(含装修及配套设施)
- 二零二五年度跨境电商代理运输服务协议
- 2024版禁牧管理员合同
- 2024版二人合作创业开店协议要览版B版
- 二零二五年度能源行业核心技术人员保密及竞业限制合同2篇
- 二零二五版国有企业法人借款合同合规审查要点3篇
- 火灾应急处理课件
- 创新者的逆袭3:新质生产力的十八堂案例课-记录
- 2024年河南省公务员考试《行测》真题及答案解析
- 2022-2024北京初三二模英语汇编:话题作文
- 人教版八年级英语上册Unit1-10完形填空阅读理解专项训练
- 2024年湖北省武汉市中考英语真题(含解析)
- GB/T 44561-2024石油天然气工业常规陆上接收站液化天然气装卸臂的设计与测试
- 《城市绿地设计规范》2016-20210810154931
- 网球场经营方案
- 2024年公司保密工作制度(四篇)
- 重庆市康德卷2025届高一数学第一学期期末联考试题含解析
评论
0/150
提交评论