当前位置:文档之家› STC系列PWM方式控制两相步进电机

STC系列PWM方式控制两相步进电机

1.57步进机电23HS66202.DM524 型细分型两相混合式步进机电驱动器3.STC12C5A60S2 系列单片机][程序一、二[程序一、二]通过计算机对单片机芯片的编程 ,将单片机与驱动器相连 ,从而实现对步进机电 的各种方式控制.1.根据所期望的结果编写程序,并在实验仪器上调试和验证.2.使用步近机电的工作原理与步进机电驱动器.3.学习控制步进机电转角、速度、方向的实时软件设计1.57步进机电23HS66202.DM524型细分型两相混合式步进机电驱动器,采用直流18~50V 供电,适合驱 动电压24V~50V, 电流小于4.0V,外径42~86毫米的两相混合式步进机电.此驱 动器采用交流伺服驱动器的电流环进行细分控制, 机电的转矩波动很小,低速 运行很平稳,几乎没有振动和噪音.高速时力矩也大大高于其它二相驱动器, 定位精度高.广泛合用于雕刻机、数控机床、包装机械等分辩率要求较高的设 备上.输入电流 输出电流湿 气 重小于4安培1.0A ~4.2A功耗: 80W ; 内部保险: 6A 工作温度-10~45℃; 存放温度-40℃~70℃不能结露,不能有水珠 禁止有可燃气体和导电灰尘200克〔1〕平均电流控制,两相正弦电流驱动输出〔2〕直流24~50V 供电 〔3〕光电隔离信号输入/输出〔4〕有过压、欠压、过流、相间短路保护功能 〔5〕十五档细分和自动半流功能 〔6〕八档输出相电流设置 〔7〕具有脱机命令输人端子 〔8〕高启动转速 〔9〕高速力矩大 〔10〕机电的扭矩与它的转速有关,而与机电每转的步数无关控制信号定义PLS/CW+ : PLS/CW-: DIR/CCW+: DIR/CCW-: 步进脉冲信号输入正端或者正向步进脉冲信号输入正端 步进脉冲信号输入负端或者正向步进脉冲信号输入负端步进方向信号输入正端或者反向步进脉冲信号输入正端 步进方向信号输入负端或者反向步进脉冲信号输入负端ENA+: 脱机使能复位信号输入正端 ENA- : 脱机使能复位信号输入负端输入电压 直流18~50V 输入耗度度 体 量功 温脱机使能信号有效时复位驱动器故障,禁止任何有效的脉冲,驱动器的输出功率元件被关闭, 机电无保持扭矩.控制信号连接上位机的控制信号可以高电平有效,也可以低电平有效.当高有效时,把所有控制信号的负 端连在一起作为信号地,低有效时,把所有控制信号的正端连在一起作为信号公共端. 现在以集电极开路和 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 、10000 、12800步.用户可以通过驱动器 正面板上的拨码开关的 SW5、SW6、SW7、SW8位来设置驱动器的步数〔如表1〕:SW6状 态 SW7状 态 SW8状 态步数ONONON400 OF FONON800OF FONON160 0ONOF FON320 0ONOF FON640 0OF F OF FON128 00OF F OF FON256 00ONONOF F 100 0ONONOF F 200 0OF FONOF F 400 0OF FONOF F 500 0ONOF F OF F 800 0ONOF F OF F 100 00OF F OF F OF F 200 00OF F OF F OF F 250 00控制方式选择拨码开关 SW4位可设置成两种控制方式:当设置成"OFF"时,为有半流功能.当设置成"ON"时,为无半流功能. 设置输出相电流为了驱动不同扭矩的步进机电 ,用户可以通过驱动器面板上的拨码开关 SW1、 SW2 、SW3位来设置驱动器的输出相电流〔有效值〕单位安培 ,各开关位置对应 的输出电流,不同型号驱动器所对应的输出电流值不同.具体见表2.SW1 SW2 SW3PEAK RMS 输出电流<A>OF ONF SW5状态 OF FOF FOF FOF FOF FOF F OF FONONONONONONON ON ON 1.00 0.71OFF ON ON 1.46 1.04ON OFF ON 1.91 1.36OFF OFF ON 2.37 1.69ON ON OFF 2.84 2.03OFF ON OFF 3.31 2.36ON OFF OFF 3.76 2.69OFF OFF OFF 4.20 3.00半流功能半流功能是指无步进脉冲500ms 后,驱动器输出电流自动降为额定输出电流的70%,用来防止机电发热.+V、GND:连接驱动器电源+V:直流电源正级, 电源电压直流16~50V.最大电流是5A.GND:直流电源负级.A+ A- B+ B-:连接两相混合式步进机电驱动器和两相混合式步进机电的连接采用四线制, 机电绕组有并联和串联接法, 并联接法,高速性能好,但驱动器电流大<为机电绕组电流的1.73倍>,串联接法时驱动器电流等于机电绕组电流.周围要有20mm 的空间,不能放在其它发热的设备旁,要避免粉尘、油雾、腐蚀性气体,湿度太大与强振动场所.状态灯指示RUN:ERR:故障与排除绿灯,正常工作时亮.红灯,故障时亮, 机电相间短路、过压保护和欠压保护.LED 不亮机电不转,且无保持扭矩机电不转,但有保持扭矩机电转动方向错误机电扭矩太小电源接错电源电压低机电连线不对脱机使能RESET 信号有效无脉冲信号输入动力线相序接错方向信号输入不对相电流设置过小加速度太快机电堵转驱动器与机电不匹配检查电源连线提高电源电压改正机电连线使RESET 无效调整脉冲宽度与信号的电平互换任意两相连线改变方向设定正确设置相电流减小加速度值排除机械故障换合适的驱动器解决措施故障原因一个完整的步进机电控制系统应含有步进驱动器、直流电源以与控制器〔脉冲源〕 .以下为典型系统接线图:单片机 STC12C5A60S2 系列当PCA 计数值与模块的捕获/ 比较寄存器的值相匹配时, 如果TOG 位〔CCAPMn.2〕置位,模块CEXn 输出将发生翻转.当PCA 计数值与模块的捕获/ 比较寄存器的值相匹配时,如果匹配位MATn〔CCAPMn.3〕置位, CCON 寄存器的CCFn 位将被置位.CAPNn〔CCAPMn.4〕和CAPPn〔CCAPMn.5〕用来设置捕获输入的有效沿.CAPNn 位使能下降沿有效.CAPPn 位使能上升沿有效.如果两位都置位,则两种跳变沿都被使能,捕获可在两种跳变沿产生.通过置位CCAPMn 寄存器的ECOMn 位〔CCAPMn.6〕来使能比较器功能.每一个PCA 模块还对应此外两个寄存器CCAPnH 和CCAPnL.当浮现捕获或者比较时,它们用来保存16 位的计数值.当PCA 模块用在PWM 模式中时它们用来控制输出的占空比.脉宽调制<PWM Pulse Width Modulation>是一种使用程序来控制波形占空比、周期、相位波形的技术.CPS2、CPS1、CPS0:PCA 计数脉冲源选择控制位.当三者分别为0、1、0 时,选择PCA/PWM 时钟源输入为定时器0 的溢出频率. 由于定时器0 可以工作在1T 模式,所以可以达到计一个时钟就溢出,从而达到最高工作频率CPU 时钟SYSclk.通过改变定时器0 的溢出率,可以实现可调频率的PWM 输出.#include <REG51.H>#include <intrins.h>#define U8 unsigned char#define U16 unsigned intsbit key1=P1^0;sbit key2=P1^1;sbit key3=P1^5;sbit key4=P1^6;U8 table[4]={0xea,0xf2,0xfa,0xfc};U8 table1[4]={0xfc,0xfa,0xf2,0xea};U16 timer0=0;U16 j=0;void DelayMs<U8 ms>;void PWM_clock<U8 clock>;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 sfr CCON sfr CMOD sfr CCAPM0 = 0X8E;= 0xD8; //PCA 控制寄存器= 0xD9; //PCA 模式寄存器= 0xDA; //PCA 模块0 模式寄存器// 模块0 对应P1.3/CEX0/PCA0/PWM0<STC12C5A60S2 系列>sfr CCAPM1 = 0xDB; //PCA 模块 1 模式寄存器// 模块 1 对应P1.4/CEX1/PCA1/PWM1<STC12C5A60S2 系列>sfr CL sfr CH sfr CCAP0L sfr CCAP0H sfr CCAP1L sfr CCAP1H = 0xE9; //PCA 定时寄存器低位= 0xF9; //PCA 定时寄存器高位= 0xEA; //PCA 模块0 的= 0xFA; //PCA 模块0 的= 0xEB; //PCA 模块1 的= 0xFB; //PCA 模块1 的捕获寄存器捕获寄存器捕获寄存器捕获寄存器低位高位低位高位sfr PCA_PWM0 = 0xF2; //PCA PWM 模式辅助寄存器0 sfr PCA_PWM1 = 0xF3; //PCA PWM 模式辅助寄存器1sbit CF sbit CR sbit CCF1 sbit CCF0 = 0xDF;= 0xDE;= 0xD9;= 0xD8;//PCA 计数溢出标志位//PCA 计数器运行控制位//PCA 模块1 中断标志//PCA 模块0 中断标志//* CCAPOH = CCAPOL = 0XC0; //模块0 输出//* CCAPOH = CCAPOL = 0X80; //模块0 输出//* CCAPOH = CCAPOL = 0X40; //模块0 输出void PWM_clock<U8 clock>;void PWM_start<U8 module,U8 mode>; 占空因数为25%占空因数为50% 占空因数为75%/*****************************************************************************设置PWM 时钟信号来源函数参数:Clock0: 系统时钟/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,即1TTMOD|=0x02; //8 位自动重装载TH0=0xe1;//TR0=1;}CMOD |= <clock<<1>;//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; //模块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=table[keycode];keycode++;if<keycode==4>keycode=0;}DelayMs<100>;if<key3==0>{while<key3==0>;TR0=1;EA=0;TH0=table1[keycode1];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;}}#include <REG51.H>#include <intrins.h>#define U8 unsigned char#define U16 unsigned intsbit DIR=P1^5;sbit key1=P3^0;sbit key2=P3^1;sbit key3=P3^2;sbit key4=P3^3;U16 i=0;U8 keycode=0;U8 table[4]={0xea,0xf7,0xfa,0xfe}; // 调频void DelayMs<U8 ms>;void PWM_clock<U8 clock>;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 sfr CCON sfr CMOD sfr CCAPM0 = 0X8E;= 0xD8; //PCA 控制寄存器= 0xD9; //PCA 模式寄存器= 0xDA; //PCA 模块0 模式寄存器// 模块0 对应P1.3/CEX0/PCA0/PWM0<STC12C5A60S2 系列>sfr CCAPM1 = 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 模式辅助寄存器0sfr PCA_PWM1 = 0xF3; //PCA PWM 模式辅助寄存器1sbit CF= 0xDF; //PCA 计数溢出标志位sbit CR= 0xDE; //PCA 计数器运行控制位sbit CCF1= 0xD9; //PCA 模块1 中断标志sbit CCF0 sbit ECCF0 = 0xD8;= 0xDA;//PCA 模块0 中断标志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_start<U8 module,U8 mode>;void PWM_Clock<unsigned char clock>{if<clock==2>{AUXR |= 0x80;//定时器0 时钟为Fosc,即1TTMOD|=0x02; //8 位自动重装载TH0=0xe1; //设定频率}CMOD |= 0x05;//<clock<<1>;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/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>;PWM_Start<0,20,0>; TR0=0;EA=1;while<1>// PCA/PWM 时钟源为定时器0 的溢出// 模块0,设置为PWM 输出,无中断,初始占空因素为25%{if<key1==0>{while<!key1>TR0=1;CR=1;i=0;CH =0x9c;}if<key2==0> // 0x9c// 0x38 200步数100{EA=0;TR0=1;CR=1;while<key2==0>;TH0=table[keycode]; //调频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 步数// 0x37 200CF=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 调用数表,选择对应的频率,从而实现步进机电的加减速.步进机电的转向则是通过驱动器的DIR/CCW+<步进方向信号输入正端或者反向步进脉冲信号输入正端>和DIR/CCW- 〔步进方向信号输入负端或者反向步进脉冲信号输入负端〕来控制.[程序一]通过按键2 开启定时器0 的中断,在中断中对中断次数进行控制,实现PCA 的计数功能,通过PCA 的计数值,控制步进机电的转角.在同一频率下,对不同细分进行操作.例如,在400 细分下,设置379 个脉冲使步进机电转一圈.在800 细分下,则设置2*379=758 个脉冲实现转一圈. 以此类推,所有的实验结果均满足之前的假设. [程序二]通过按键1调用PCA 中断,通过设置CH0的初值,来改变PCA 的溢出率,在中断中记录PCA 的中断次数,从而进行对转角的调节.改变初值,来实现单步、多步的控制.通过按键2使机电进行4个不同频率的调速,频率的设置通过软件设定,变频的次数也可通过软件调节.通过按键3使机电的方向改变.程序可在400~25000细分下进行机电的单步,多步控制.在实验过程中,我们发现了一些数据与理论值有出入,故在此进行说明.1.歩距角:理论值是1.8度/步,但是实际实验中单步进行时,与理论值有偏差.2.令步进机电转一圈的准确度:这一现象取决于步进机电的歩距角、程序中按键的响应时间、步进机电本身启动等因素.通过本次课程设计,对步进机电的使用有了更深刻的了解.理清了PWM 输出频率与步进机电转速,驱动器细分与机电转角等的关系.实现了对步进机电的单步、多步、加速、减速、正转、反转的控制.通过自己编程,试验了不少种可能的方式, 保留了实用的方案,最终实现了对步进机电的控制.在找到最终可用方案之前,我们不仅要找出步进机电、编写的程序自身的规律,更要找出它们的内在联系.在这个过程中,我们不仅锻炼了自身读资料、整合知识和想法、编写程序的能力,更锻炼了团队协作的能力.根据电子设计大赛的训练题目学习步进机电的控制.。

相关主题