




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
..直流电机调速资料汇总一.使用单片机来控制直流电机的变速,一般采用调节电枢电压的方式,通过单片机控制PWM1,PWM2,产生可变的脉冲,这样电机上的电压也为宽度可变的脉冲电压。C语言代码:#include<AT89X52.h>#defineucharunsignedchar#defineuintunsignedintsbitK5=P1^4;sbitK6=P1^5;sbitPWM1=P1^0;sbitPWM2=P1^1;sbitFMQ=P3^6;ucharZKB1,ZKB2;voiddelaynms(uintaa){ucharbb;while(aa--){for(bb=0;bb<115;bb++)//1ms基准延时程序{;}}}voiddelay500us(void){intj;for(j=0;j<57;j++){;}}voidbeep(void){uchart;for(t=0;t<100;t++){delay500us();FMQ=!FMQ;//产生脉冲}FMQ=1;//关闭蜂鸣器delaynms(300);}voidmain(void){TR0=0;//关闭定时器0TMOD=0x01;//定时器0,工作方式1TH0=(65526-100)/256;TL0=(65526-100)%256;//100us即0.01ms中断一次EA=1;//开总中断ET0=1;//开定时器0中断TR0=1;//启动定时器T0ZKB1=50;//占空比初值设定ZKB2=50;//占空比初值设定while(1){if(!K5){delaynms(15);//消抖if(!K5)//确定按键按下{beep();ZKB1++;//增加ZKB1ZKB2=100-ZKB1;//相应的ZKB2就减少}}if(!K6){delaynms(15);//消抖if(!K6)//确定按键按下{beep();ZKB1--;//减少ZKB1ZKB2=100-ZKB1;//相应的ZKB2增加}}if(ZKB1>99)ZKB1=1;if(ZKB1<1)ZKB1=99;}}voidtime0(void)interrupt1{staticucharN=0;TH0=(65526-100)/256;TL0=(65526-100)%256;N++;if(N>100)N=0;if(N<=ZKB1)PWM1=0;elsePWM1=1;if(N<=ZKB2)PWM2=0;elsePWM2=1;}//显现:电机转速到最高后,也就是N为1或99时,再按一下,就变到99或1,//电机反方向旋转以最高速度二、容及要求:
1、设计一个直流电机调速系统,并用单片机实现连接开关和数码显示并将其值输入直流电机调速系统。
2、通过公式及键控实现其直流电机启动、加速、减速和停顿等四种形态。
目标:
〔1〕CPU为8051芯片;
〔2〕实验需要4个LED,分别显示启动、加速、减速和停顿。
〔3〕通过按键开关输入不同的值改变脉冲占空比的控制值从而得到不同的频率脉冲,实现脉冲转变为点评,实现调速功能。
PWMEQU7FH;PWM赋初始值
OUTEQUP0;8个LED灯的接口
INCKEYEQUP1.4;K1,PWM值增加键。
DECKEYEQUP1.5;K2,PWM值减小键。
BEEPEQUP3.7
;----
ORG0000H
SJMPSTART
ORG000BH
SJMPINTT0
ORG001BH
SJMPINTT1
ORG0030H
;----
;主程序
;定时器0工作在模式1,定时器1工作在模式2。
;----
START:
MOVSP,#30H
MOVTMOD,#21H
MOVTH1,PWM;脉宽调节
MOVTL1,#00H
MOVTH0,#0FCH;MOVTL0,#066H;频率调节
SETBEA
SETBET0
SETBET1
SETBTR0
LOOP:MOVA,PWM;
INCKEY,LOOP1;增加键是否按下?
CALLDELAY;延时去抖动
INCKEY,LOOP1
CJNEA,#0FFH,PWMINC;是否到最大值?
CALLBEEP_BL;是,蜂鸣器报警。
SJMPLOOP
PWMINC:
INCPWM;调节脉宽〔脉宽减小〕
SJMPLOOP
LOOP1:DECKEY,LOOP2;减小键是否按下?
CALLDELAY;延时去抖动
DECKEY,LOOP2
CJNEA,#02H,PWMDEC;是否到最小值?
CALLBEEP_BL;是,蜂鸣器报警。
SJMPLOOP
PWMDEC:
DECPWM;调节脉宽〔脉宽增加〕
LOOP2:SJMPLOOP
;----
;T0中断效劳子程序〔频率〕
;控制定时器1中断
;----
INTT0:
CLRTR1
MOVTH0,#0FCH;1ms延时常数
MOVTL0,#066H;频率调节
MOVTH1,PWM
SETBTR1
MOVOUT,#00H;启动输出
RETI
;----
;T1中断效劳子程序〔脉宽〕
;----
INTT1:
CLRTR1;脉宽调节完毕
MOVOUT,#0FFH;完毕输出
RETI
;----
;10ms延时子程序
;----DELAY:
MOVR6,#50
DELAY1:
MOVR7,#100
DJNZR7,$
DJNZR6,DELAY1
RET
;----
;蜂鸣器响一声子程序
;---
BEEP_BL:
MOVR6,#100
BL1:CALLBL2
CPLBEEP
DJNZR6,BL1
MOVR5,#25
CALLDELAY2
RET
BL2:MOVR7,#180
BL3:NOP
DJNZR7,BL3
RET
DELAY2:;延时R5×10MS
MOVR6,#50
BL4:MOVR7,#100
BL5:DJNZR7,BL5
DJNZR6,BL4
DJNZR5,DELAY2
RET
END******************************************************************************/#include<REGX51.H>#defineucharunsignedchar/******************************************************************************TH0和TL0是计数器0的高8位和低8位计数器,计算方法:TL0=(65536-C)%256;**TH0=(65536-C)/256,其中C为所要计数的次数即多长时间产生一次中断;TMOD是计数器**工作模式选择,0X01表示选用模式1,它有16位计数器,最大计数脉冲为65536,最长时**间为1ms*65536=65.536ms*******************************************************************************/#defineV_TH00XFF#defineV_TL00XF6#defineV_TMOD0X01voidinit_sys(void);/*系统初始化函数*/voidDelay5Ms(void);unsignedcharZKB1,ZKB2;voidmain(void){init_sys();ZKB1=40;/*占空比初始值设定*/ZKB2=70;/*占空比初始值设定*/while(1){if(!P1_4)//如果按了+键,增加占空比{Delay5Ms();if(!P1_4){ZKB1++;ZKB2=100-ZKB1;}}if(!P1_5)//如果按了-键,减少占空比{Delay5Ms();if(!P1_5){ZKB1--;ZKB2=100-ZKB1;}}/*对占空比值限定围*/if(ZKB1>99)ZKB1=1;if(ZKB1<1)ZKB1=99;}}/*******************************************************函数功能:对系统进展初始化,包括定时器初始化和变量初始化*/voidinit_sys(void)/*系统初始化函数*/{/*定时器初始化*/TMOD=V_TMOD;TH0=V_TH0;TL0=V_TL0;TR0=1;ET0=1;EA=1;}//延时voidDelay5Ms(void){unsignedintTempCyc=1000;while(TempCyc--);}/*中断函数*/voidtimer0(void)interrupt1using2{staticucharclick=0;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论