STC12系列PWM方式控制两相步进电机文档格式.docx

上传人:b****4 文档编号:7151852 上传时间:2023-05-08 格式:DOCX 页数:23 大小:290.19KB
下载 相关 举报
STC12系列PWM方式控制两相步进电机文档格式.docx_第1页
第1页 / 共23页
STC12系列PWM方式控制两相步进电机文档格式.docx_第2页
第2页 / 共23页
STC12系列PWM方式控制两相步进电机文档格式.docx_第3页
第3页 / 共23页
STC12系列PWM方式控制两相步进电机文档格式.docx_第4页
第4页 / 共23页
STC12系列PWM方式控制两相步进电机文档格式.docx_第5页
第5页 / 共23页
STC12系列PWM方式控制两相步进电机文档格式.docx_第6页
第6页 / 共23页
STC12系列PWM方式控制两相步进电机文档格式.docx_第7页
第7页 / 共23页
STC12系列PWM方式控制两相步进电机文档格式.docx_第8页
第8页 / 共23页
STC12系列PWM方式控制两相步进电机文档格式.docx_第9页
第9页 / 共23页
STC12系列PWM方式控制两相步进电机文档格式.docx_第10页
第10页 / 共23页
STC12系列PWM方式控制两相步进电机文档格式.docx_第11页
第11页 / 共23页
STC12系列PWM方式控制两相步进电机文档格式.docx_第12页
第12页 / 共23页
STC12系列PWM方式控制两相步进电机文档格式.docx_第13页
第13页 / 共23页
STC12系列PWM方式控制两相步进电机文档格式.docx_第14页
第14页 / 共23页
STC12系列PWM方式控制两相步进电机文档格式.docx_第15页
第15页 / 共23页
STC12系列PWM方式控制两相步进电机文档格式.docx_第16页
第16页 / 共23页
STC12系列PWM方式控制两相步进电机文档格式.docx_第17页
第17页 / 共23页
STC12系列PWM方式控制两相步进电机文档格式.docx_第18页
第18页 / 共23页
STC12系列PWM方式控制两相步进电机文档格式.docx_第19页
第19页 / 共23页
STC12系列PWM方式控制两相步进电机文档格式.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

STC12系列PWM方式控制两相步进电机文档格式.docx

《STC12系列PWM方式控制两相步进电机文档格式.docx》由会员分享,可在线阅读,更多相关《STC12系列PWM方式控制两相步进电机文档格式.docx(23页珍藏版)》请在冰点文库上搜索。

STC12系列PWM方式控制两相步进电机文档格式.docx

步数

400

800

1600

3200

6400

12800

25600

1000

2000

4000

5000

8000

10000

20000

25000

控制方式选择

拨码开关SW4位可设置成两种控制方式:

当设置成“OFF”时,为有半流功能。

当设置成“ON”时,为无半流功能。

设置输出相电流

为了驱动不同扭矩的步进电机,用户可以通过驱动器面板上的拨码开关SW1、SW2、SW3位来设置驱动器的输出相电流(有效值)单位安培,各开关位置对应的输出电流,不同型号驱动器所对应的输出电流值不同。

具体见表2。

输出电流(A)

SW1

SW2

SW3

PEAK

RMS

1.00

0.71

1.46

1.04

1.91

1.36

2.37

1.69

2.84

2.03

3.31

2.36

3.76

2.69

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无效

电机不转,但有保持扭矩

无脉冲信号输入

调整脉冲宽度及信号的电平

电机转动方向错误

动力线相序接错

互换任意两相连线

方向信号输入不对

改变方向设定

电机扭矩太小

相电流设置过小

正确设置相电流

加速度太快

减小加速度值

电机堵转

排除机械故障

驱动器与电机不匹配

换合适的驱动器

驱动器接线

一个完整的步进电机控制系统应含有步进驱动器、直流电源以及控制器(脉冲源)。

以下为典型系统接线图:

1.单片机STC12C5A60S2系列

PWMCCAPMn.1用来使能脉宽调制模式

当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)

脉宽调制(PWMPulseWidthModulation)是一种使用程序来控制波形占空比、周期、相位波形的技术。

PCA工作模式寄存器CMOD

CPS2、CPS1、CPS0:

PCA计数脉冲源选择控制位。

当三者分别为0、1、0时,选择PCA/PWM时钟源输入为定时器0的溢出频率。

由于定时器0可以工作在1T模式,所以可以达到计一个时钟就溢出,从而达到最高工作频率CPU时钟SYSclk。

通过改变定时器0的溢出率,可以实现可调频率的PWM输出。

四.调试程序

【程序一】

#include<

REG51.H>

intrins.h>

#defineU8unsignedchar

#defineU16unsignedint

sbitkey1=P1^0;

sbitkey2=P1^1;

sbitkey3=P1^5;

sbitkey4=P1^6;

U8table[4]={0xea,0xf2,0xfa,0xfc};

U8table1[4]={0xfc,0xfa,0xf2,0xea};

U16timer0=0;

U16j=0;

voidDelayMs(U8ms);

voidPWM_clock(U8clock);

voidPWM_start(U8module,U8mode);

//////////////////////延时子程序/////////////////////////////

voidDelayMs(U8ms)//在11.0592M晶振下,stc10f系列(单周期指令)的ms级延时

{

U16i;

while(ms--)

{

for(i=0;

i<

850;

i++);

}

}

////////////////////主函数入口////////////////////////////

sfrAUXR=0X8E;

sfrCCON=0xD8;

//PCA控制寄存器

sfrCMOD=0xD9;

//PCA模式寄存器

sfrCCAPM0=0xDA;

//PCA模块0模式寄存器//模块0对应P1.3/CEX0/PCA0/PWM0(STC12C5A60S2系列)

sfrCCAPM1=0xDB;

//PCA模块1模式寄存器//模块1对应P1.4/CEX1/PCA1/PWM1(STC12C5A60S2系列)

sfrCL=0xE9;

//PCA定时寄存器低位

sfrCH=0xF9;

//PCA定时寄存器高位

sfrCCAP0L=0xEA;

//PCA模块0的捕获寄存器低位

sfrCCAP0H=0xFA;

//PCA模块0的捕获寄存器高位

sfrCCAP1L=0xEB;

//PCA模块1的捕获寄存器低位

sfrCCAP1H=0xFB;

//PCA模块1的捕获寄存器高位

sfrPCA_PWM0=0xF2;

//PCAPWM模式辅助寄存器0

sfrPCA_PWM1=0xF3;

//PCAPWM模式辅助寄存器1

sbitCF=0xDF;

//PCA计数溢出标志位

sbitCR=0xDE;

//PCA计数器运行控制位

sbitCCF1=0xD9;

//PCA模块1中断标志

sbitCCF0=0xD8;

//PCA模块0中断标志

//*CCAPOH=CCAPOL=0XC0;

//模块0输出占空因数为25%

//*CCAPOH=CCAPOL=0X80;

//模块0输出占空因数为50%

//*CCAPOH=CCAPOL=0X40;

//模块0输出占空因数为75%

/*****************************************************************************

设置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分频);

/*****************************************************************************/

voidPWM_Clock(unsignedcharclock)

if(clock==2)

AUXR|=0x80;

//定时器0时钟为Fosc,即1T

TMOD|=0x02;

//8位自动重装载

TH0=0xe1;

//TR0=1;

CMOD|=(clock<

<

1);

//CMOD=0x84;

CL=0;

CH=0;

}

voidPWM_Start(U8module,U8R0,U8R1)

{

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输出,无中断

elseif(module==1)

CCAPM1=0X42;

//模块1设置为8位PWM输出,无中断

elseif(module==2)

CCAPM0=CCAPM1=0X42;

//模块0和1设置为8位PWM输出,无中断

CR=1;

//PCA计数器开始计数

voidmain()

U8keycode=0;

U8keycode1=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;

if(key2==0)

while(key2==0);

EA=1;

ET0=1;

TH0=0xD1;

}

voidtimer()interrupt1

++timer0;

if(timer0==256)

{

++j;

timer0=0;

}

if(j==3032)

j=0;

TR0=0;

【程序二】

sbitDIR=P1^5;

sbitkey1=P3^0;

sbitkey2=P3^1;

sbitkey3=P3^2;

sbitkey4=P3^3;

U16i=0;

U8keycode=0;

U8table[4]={0xea,0xf7,0xfa,0xfe};

//调频

sbitECCF0=0xDA;

sbitECF=0xD9;

sbitPWM0=0xD8;

//设定频率

CMOD|=0x05;

//(clock<

//EA=1;

PWM_Clock

(2);

//模块0,设置为PWM输出,无中断,初始占空因素为25%

TR0=0;

EA=1;

if(key1==0)

{

while(!

key1)

TR0=1;

CR=1;

i=0;

CH=0x9c;

//0x9c100步数

//0x38200

}

{

EA=0;

TR0=1;

CR=1;

while(key2==0);

//调频

keycode=0;

if(key3==0)//方向

key3)

DIR=0;

DelayMs(100);

voidPCA_isr()interrupt7

i=i+1;

CH=0x9c;

//0x9c100步数

//0x37200

CF=0;

if(i==100)//100*4200*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输出频率与步进电机转速,驱动器细分与电机转角等的关系。

实现了对步进电机的单步、多步、加速、减速、正转、反转的控制。

通过自己编程,试验了很多种可能的方式,保留了有用的方案,最终实现了对步进电机的控制。

在找到最终可用方案之前,我们不仅要找出步进电机、编写的程序自身的规律,更要找出它们的内在联系。

在这个过程中,我们不仅锻炼了自身读资料、整合知识和想法、编写程序的能力,更锻炼了团队协作的能力。

八.课设说明

根据电子设计大赛的训练题目学习步进电机的控制。

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

当前位置:首页 > 法律文书 > 判决书

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

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