1、STC12系列PWM方式控制两相步进电机STC12系列PWM方式控制两相步进电机单片机课程设计 步进电机控制专业班级: 姓 名: 学 号: 指导教师: 输入电压直流1850V输入输入电流小于4安培输出电流1.0A4.2A功 耗功耗:80W; 内部保险:6A温 度工作温度-1045;存放温度-4070湿 度不能结露,不能有水珠气 体禁止有可燃气体和导电灰尘重 量200克 主要特点(1)平均电流控制,两相正弦电流驱动输出(2)直流2450V供电(3)光电隔离信号输入/输出(4)有过压、欠压、过流、相间短路保护功能(5)十五档细分和自动半流功能 (6)八档输出相电流设置(7)具有脱机命令输人端子 (
2、8)高启动转速 (9)高速力矩大(10)电机的扭矩与它的转速有关,而与电机每转的步数无关控制信号接口控制信号定义PLS/CW+: 步进脉冲信号输入正端或正向步进脉冲信号输入正端PLS/CW-: 步进脉冲信号输入负端或正向步进脉冲信号输入负端DIR/CCW+: 步进方向信号输入正端或反向步进脉冲信号输入正端DIR/CCW-: 步进方向信号输入负端或反向步进脉冲信号输入负端ENA+: 脱机使能复位信号输入正端ENA-: 脱机使能复位信号输入负端脱机使能信号有效时复位驱动器故障,禁止任何有效的脉冲,驱动器的输出功率元件被关闭,电机无保持扭矩。控制信号连接上位机的控制信号可以高电平有效,也可以低电平有
3、效。当高有效时,把所有控制信号的负端连在一起作为信号地,低有效时,把所有控制信号的正端连在一起作为信号公共端。现在以集电极开路和PNP输出为例,接口电路示意图如下:控制器集电极开路输出图2.输入接口电路(共阴极接法)控制器PNP输出注意:VCC值为5V时,R短接;VCC值为12V时,R为1K,大于1/8W电阻;VCC值为24V时,R为2K,大于1/8W电阻;R必须接在控制器信号端。 功能选择(用驱动器面板上的DIP开关实现)设置电机每转步数驱动器可将电机每转的步数分别设置为400、500、800、1000、1250、1600、2000、2500、3200、4000、5000、6400、8000
4、、10000、12800步。用户可以通过驱动器正面板上的拨码开关的SW5、SW6、SW7、SW8位来设置驱动器的步数(如表1): SW5状态OFFONOFFONOFFONOFFONOFFONOFFONOFFONOFFSW6状态ONOFFOFFONONOFFOFFONONOFFOFFONONOFFOFFSW7状态ONONONOFFOFFOFFOFFONONONONOFFOFFOFFOFFSW8状态ONONONONONONONOFFOFFOFFOFFOFFOFFOFFOFF步数4008001600320064001280025600100020004000500080001000020000250
5、00控制方式选择拨码开关SW4位可设置成两种控制方式:当设置成“OFF”时,为有半流功能。当设置成“ON”时,为无半流功能。设置输出相电流为了驱动不同扭矩的步进电机,用户可以通过驱动器面板上的拨码开关SW1、SW2、SW3位来设置驱动器的输出相电流(有效值)单位安培,各开关位置对应的输出电流,不同型号驱动器所对应的输出电流值不同。具体见表2。 输出电流(A)SW1SW2SW3PEAKRMSONONON1.000.71OFFONON1.461.04ONOFFON1.911.36OFFOFFON2.371.69ONONOFF2.842.03OFFONOFF3.312.36ONOFFOFF3.762
6、.69OFFOFFOFF4.203.00半流功能半流功能是指无步进脉冲500ms后,驱动器输出电流自动降为额定输出电流的70%,用来防止电机发热。功率接口+V、GND:连接驱动器电源 +V:直流电源正级,电源电压直流1650V。最大电流是5A。 GND:直流电源负级。A+ A- B+ B-:连接两相混合式步进电机驱动器和两相混合式步进电机的连接采用四线制,电机绕组有并联和串联接法,并联接法,高速性能好,但驱动器电流大(为电机绕组电流的1.73倍),串联接法时驱动器电流等于电机绕组电流。安装周围要有20mm的空间,不能放在其它发热的设备旁,要避免粉尘、油雾、腐蚀性气体,湿度太大及强振动场所。故障
7、诊断状态灯指示RUN: 绿灯,正常工作时亮。ERR: 红灯,故障时亮,电机相间短路、过压保护和欠压保护。故障及排除故 障原 因解决措施LED不亮电源接错检查电源连线电源电压低提高电源电压电机不转,且无保持扭矩电机连线不对改正电机连线脱机使能RESET信号有效使RESET无效电机不转,但有保持扭矩无脉冲信号输入调整脉冲宽度及信号的电平电机转动方向错误动力线相序接错互换任意两相连线方向信号输入不对改变方向设定电机扭矩太小相电流设置过小正确设置相电流加速度太快减小加速度值电机堵转排除机械故障驱动器与电机不匹配换合适的驱动器 驱动器接线 一个完整的步进电机控制系统应含有步进驱动器、直流电源以及控制器(
8、脉冲源)。以下为典型系统接线图:1.单片机STC12C5A60S2系列PWM CCAPMn.1 用来使能脉宽调制模式当PCA计数值与模块的捕获/比较寄存器的值相匹配时,如果TOG位(CCAPMn.2)置位,模块CEXn输出将发生翻转。当PCA计数值与模块的捕获/比较寄存器的值相匹配时,如果匹配位MATn(CCAPMn.3)置位, CCON寄存器的CCFn位将被置位。CAPNn(CCAPMn.4)和CAPPn(CCAPMn.5)用来设置捕获输入的有效沿。CAPNn位使能下降沿有效。CAPPn位使能上升沿有效。如果两位都置位,则两种跳变沿都被使能,捕获可在两种跳变沿产生。通过置位CCAPMn寄存器
9、的ECOMn位(CCAPMn.6)来使能比较器功能。每个PCA模块还对应另外两个寄存器 CCAPnH和CCAPnL。当出现捕获或比较时,它们用来保存16位的计数值。当PCA模块用在PWM模式中时 它们用来控制输出的占空比。脉宽调节模式(PWM)脉宽调制(PWM Pulse Width Modulation)是一种使用程序来控制波形占空比、周期、相位波形的技术。 PCA工作模式寄存器CMODCPS2、CPS1、CPS0:PCA计数脉冲源选择控制位。当三者分别为0、1、0时,选择PCA/PWM时钟源输入为定时器0的溢出频率。由于定时器0可以工作在1T模式,所以可以达到计一个时钟就溢出,从而达到最高
10、工作频率CPU时钟SYSclk。通过改变定时器0的溢出率,可以实现可调频率的PWM输出。四调试程序【程序一】#include #include #define U8 unsigned char#define U16 unsigned intsbit key1=P10;sbit key2=P11;sbit key3=P15;sbit key4=P16;U8 table4=0xea,0xf2,0xfa,0xfc;U8 table14=0xfc,0xfa,0xf2,0xea; U16 timer0=0;U16 j=0;void DelayMs(U8 ms);void PWM_clock(U8 clo
11、ck);void PWM_start(U8 module,U8 mode);/ 延时子程序/void DelayMs(U8 ms) /在11.0592M晶振下,stc10f系列(单周期指令)的ms级延时 U16 i; while(ms-) for(i = 0; i 850; i+); /主函数入口/sfr AUXR = 0X8E;sfr CCON = 0xD8; /PCA控制寄存器sfr CMOD = 0xD9; /PCA模式寄存器sfr CCAPM0 = 0xDA; /PCA模块0模式寄存器 /模块0对应P1.3/CEX0/PCA0/PWM0(STC12C5A60S2系列) sfr CCAP
12、M1 = 0xDB; /PCA模块1模式寄存器 /模块1对应P1.4/CEX1/PCA1/PWM1(STC12C5A60S2系列)sfr CL = 0xE9; /PCA 定时寄存器 低位sfr CH = 0xF9; /PCA 定时寄存器 高位sfr CCAP0L = 0xEA; /PCA模块0的 捕获寄存器 低位sfr CCAP0H = 0xFA; /PCA模块0的 捕获寄存器 高位sfr CCAP1L = 0xEB; /PCA模块1的 捕获寄存器 低位sfr CCAP1H = 0xFB; /PCA模块1的 捕获寄存器 高位sfr PCA_PWM0 = 0xF2; /PCA PWM 模式辅助寄
13、存器0sfr PCA_PWM1 = 0xF3; /PCA PWM 模式辅助寄存器1sbit CF = 0xDF; /PCA计数溢出标志位sbit CR = 0xDE; /PCA计数器 运行控制位sbit CCF1 = 0xD9; /PCA模块1中断标志sbit CCF0 = 0xD8; /PCA模块0中断标志/* CCAPOH = CCAPOL = 0XC0; /模块0输出 占空因数为25%/* CCAPOH = CCAPOL = 0X80; /模块0输出 占空因数为50%/* CCAPOH = CCAPOL = 0X40; /模块0输出 占空因数为75%void PWM_clock(U8 c
14、lock);void PWM_start(U8 module,U8 mode);/*设置PWM时钟信号来源函数参数:Clock 0: 系统时钟/12(即12分频); 1:系统时钟/2(即2分频); 2:定时器0的溢出脉冲 ; 3: ECI/P1.2(或P4.1)脚输入的外部时钟; 4:系统时钟(即不分频) ; 5:系统时钟/4(即4分频); 6:系统时钟/6(即6分频); 7:系统时钟/8(即8分频); /*/void PWM_Clock(unsigned char clock) if(clock=2) AUXR |= 0x80;/定时器0时钟为Fosc,即1T TMOD|=0x02; /8位
15、自动重装载 TH0=0xe1; /TR0=1; CMOD |= (clock1); /CMOD=0x84; CL = 0; CH = 0; void PWM_Start(U8 module,U8 R0,U8 R1) CCAP0L = 0XFF-(R0*256/100); CCAP0H = 0XFF-(R0*256/100); CCAP1L = 0XFF-(R1*256/100); CCAP1H = 0XFF-(R1*256/100); if(module=0) CCAPM0 = 0X42; /模块0设置为8位PWM输出,无中断 else if(module=1) CCAPM1 = 0X42;
16、/模块1设置为8位PWM输出,无中断 else if(module=2) CCAPM0 = CCAPM1 = 0X42; /模块0和1设置为8位PWM输出,无中断 CR=1; /PCA计数器开始计数 void main() U8 keycode=0; U8 keycode1=0; PWM_Clock(2); / PCA/PWM时钟源为 定时器0的溢出 PWM_Start(0,20,0);/ 模块0,设置为PWM输出,无中断,初始占空因素为25% while(1) if(key1=0) while(key1=0); EA=0; TR0=1; TH0=tablekeycode; keycode+;
17、 if(keycode=4) keycode=0; DelayMs(100); if(key3=0) while(key3=0); TR0=1; EA=0; TH0=table1keycode1; keycode1+; if(keycode1=4) keycode1=0; DelayMs(100); if(key2=0) while(key2=0); EA=1; ET0=1; TR0=1; TH0=0xD1; void timer() interrupt 1 +timer0; if(timer0=256) +j; timer0=0; if(j=3032) j=0; TR0=0; 【程序二】#i
18、nclude #include #define U8 unsigned char#define U16 unsigned intsbit DIR=P15;sbit key1=P30;sbit key2=P31;sbit key3=P32;sbit key4=P33;U16 i=0;U8 keycode=0;U8 table4=0xea,0xf7,0xfa,0xfe; / 调频void DelayMs(U8 ms); void PWM_clock(U8 clock);void PWM_start(U8 module,U8 mode);/ 延时子程序/void DelayMs(U8 ms) /在1
19、1.0592M晶振下,stc10f系列(单周期指令)的ms级延时 U16 i; while(ms-) for(i = 0; i 850; i+); /主函数入口/sfr AUXR = 0X8E;sfr CCON = 0xD8; /PCA控制寄存器sfr CMOD = 0xD9; /PCA模式寄存器sfr CCAPM0 = 0xDA; /PCA模块0模式寄存器 /模块0对应P1.3/CEX0/PCA0/PWM0(STC12C5A60S2系列) sfr CCAPM1 = 0xDB; /PCA模块1模式寄存器 /模块1对应P1.4/CEX1/PCA1/PWM1(STC12C5A60S2系列)sfr
20、CL = 0xE9; /PCA 定时寄存器 低位sfr CH = 0xF9; /PCA 定时寄存器 高位sfr CCAP0L = 0xEA; /PCA模块0的 捕获寄存器 低位sfr CCAP0H = 0xFA; /PCA模块0的 捕获寄存器 高位sfr CCAP1L = 0xEB; /PCA模块1的 捕获寄存器 低位sfr CCAP1H = 0xFB; /PCA模块1的 捕获寄存器 高位sfr PCA_PWM0 = 0xF2; /PCA PWM 模式辅助寄存器0sfr PCA_PWM1 = 0xF3; /PCA PWM 模式辅助寄存器1sbit CF = 0xDF; /PCA计数溢出标志位s
21、bit CR = 0xDE; /PCA计数器 运行控制位sbit CCF1 = 0xD9; /PCA模块1中断标志sbit CCF0 = 0xD8; /PCA模块0中断标志sbit ECCF0 = 0xDA;sbit ECF = 0xD9;sbit PWM0 = 0xD8;/* CCAPOH = CCAPOL = 0XC0; /模块0输出 占空因数为25%/* CCAPOH = CCAPOL = 0X80; /模块0输出 占空因数为50%/* CCAPOH = CCAPOL = 0X40; /模块0输出 占空因数为75%void PWM_clock(U8 clock);void PWM_sta
22、rt(U8 module,U8 mode);void PWM_Clock(unsigned char clock) if(clock=2) AUXR |= 0x80;/定时器0时钟为Fosc,即1T TMOD|=0x02; /8位自动重装载 TH0=0xe1; /设定频率 CMOD |= 0x05;/(clock1); CL = 0; CH = 0; /EA=1; void PWM_Start(U8 module,U8 R0,U8 R1) CCAP0L = 0XFF-(R0*256/100); CCAP0H = 0XFF-(R0*256/100); CCAP1L = 0XFF-(R1*256/
23、100); CCAP1H = 0XFF-(R1*256/100); if(module=0) CCAPM0 = 0X42; /模块0设置为8位PWM输出,无中断 else if(module=1) CCAPM1 = 0X42; /模块1设置为8位PWM输出,无中断 else if(module=2) CCAPM0 = CCAPM1 = 0X42; /模块0和1设置为8位PWM输出,无中断 void main() PWM_Clock(2); / PCA/PWM时钟源为 定时器0的溢出 PWM_Start(0,20,0); / 模块0,设置为PWM输出,无中断,初始占空因素为25% TR0=0;
24、EA=1; while(1) if(key1=0) while(!key1) TR0=1; CR=1; i=0; CH =0x9c; / 0x9c 100 步数 / 0x38 200 if(key2=0) EA=0; TR0=1; CR=1; while(key2=0); TH0=tablekeycode; /调频 keycode+; if(keycode=4) keycode=0; if(key3=0) /方向 while(!key3) DIR=0; DelayMs(100);void PCA_isr() interrupt 7 i=i+1; CH=0x9c; / 0x9c 100 步数 /
25、 0x37 200 CF=0; if(i=100) /100*4 200*125 CR=0; i=0; 五程序功能 首先对各寄存器设定初值,选择工作模式,使PCA计数频率为定时器0的溢出率,实现可调频率的PWM输出。设定CCAP0H和CCAP0L及CL和CH的初值,当PCA计数器的低位CL从0xFF递减到0x00过程中,若值大于CCAP0L,则输出高电平,否则为低电平,从而调节占空比。 采用定时器0的八位自动装载,通过给TH0赋初值,改变PWM的输出频率,从而控制电机的转速。在同一细分的条件下,频率越大,转速越快。将各初值对应的频率制成数表,通过按键1、3调用数表,选择对应的频率,从而实现步进
26、电机的加减速。 步进电机的转向则是通过驱动器的DIR/CCW+(步进方向信号输入正端或反向步进脉冲信号输入正端)和DIR/CCW-(步进方向信号输入负端或反向步进脉冲信号输入负端)来控制。 【程序一】 通过按键2开启定时器0的中断,在中断中对中断次数进行控制,实现PCA的计数功能,通过PCA的计数值,控制步进电机的转角。在同一频率下,对不同细分进行操作。例如,在400细分下,设置379个脉冲使步进电机转一圈。在800细分下,则设置2*379=758个脉冲实现转一圈。以此类推,所有的实验结果均满足之前的假设。 【程序二】 通过按键1调用PCA中断,通过设置CH0的初值,来改变PCA的溢出率,在中断中记录PCA的中断次数,从而进行对转角的调节。改变初值,来实现单步、多步的控制。通过按键2使电机进行4个不同频率的调速,频率的设置通过软件设定,变频的次数也可通过软件调节。通过按键3使电机的方向改变。 程序可在40025000细分下进行电机的单步,多步控制。六误差说明 在实验过程中,我们发现了一些数据与理论值有出入,故在此进行说明。1.歩距角:理论值是1.8度/步,但是实际实验中单步进行时,与理论值有偏差。2.令步进电机转
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1