基于proteus仿真的pwm电机调速
时间:2025-04-07
时间:2025-04-07
采用51单片机的pwn电机调速课程设计
直流电机调速资料汇总
一.
使用单片机来控制直流电机的变速,一般采用调节电枢电压的方式,通过单片机控制PWM1,PWM2,产生可变的脉冲,这样电机上的电压也为宽度可变的脉冲电压。
C语言代码:
#include<AT89X52.h>
#define uchar unsigned char
#define uint unsigned int
sbit K5=P1^4;
sbit K6=P1^5;
sbit PWM1=P1^0;
sbit PWM2=P1^1;
sbit FMQ=P3^6;
uchar ZKB1,ZKB2;
void delaynms(uint aa)
{
uchar bb;
while(aa--)
{
for(bb=0;bb<115;bb++)
{
;
}
}
}
void delay500us(void)
{
int j;
for(j=0;j<57;j++)
{
;
} //1ms基准延时程序
采用51单片机的pwn电机调速课程设计
}
void beep(void)
{
uchar t;
for(t=0;t<100;t++)
{
delay500us();
FMQ=!FMQ; //产生脉冲
}
FMQ=1; //关闭蜂鸣器
delaynms(300);
}
void main(void)
{
TR0=0; //关闭定时器0
TMOD=0x01; //定时器0,工作方式1
TH0=(65526-100)/256;
TL0=(65526-100)%256; //100us即0.01ms中断一次
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时器T0
ZKB1=50; //占空比初值设定
ZKB2=50; //占空比初值设定
while(1)
{
if(!K5)
{
delaynms(15); //消抖
if(!K5) //确定按键按下
{
beep();
ZKB1++; //增加ZKB1
ZKB2=100-ZKB1; //相应的ZKB2就减少
}
}
if(!K6)
{
delaynms(15); //消抖
if(!K6) //确定按键按下
{
beep();
采用51单片机的pwn电机调速课程设计
ZKB1--; //减少ZKB1
ZKB2=100-ZKB1; //相应的ZKB2增加
}
}
if(ZKB1>99)
ZKB1=1;
if(ZKB1<1)
ZKB1=99;
}
}
void time0(void) interrupt 1
{
static uchar N=0;
TH0=(65526-100)/256;
TL0=(65526-100)%256;
N++;
if(N>100)
N=0;
if(N<=ZKB1)
PWM1=0;
else
PWM1=1;
if(N<=ZKB2)
PWM2=0;
else
PWM2=1;
}
//显现:电机转速到最高后,也就是N为1或99时,再按一下,就变到99或1, //电机反方向旋转以最高速度
二、内容及要求:
1、设计一个直流电机调速系统,并用单片机实现连接开关和数码显示并将其值输入直流电机调速系统。
2、通过公式及键控实现其直流电机启动、加速、减速和停止等四种形态。
目标:
(1) CPU为8051芯片;
(2) 实验需要4个LED,分别显示启动、加速、减速和停止。
(3) 通过按键开关输入不同的值改变脉冲占空比的控制值从而得到不同的频率
采用51单片机的pwn电机调速课程设计
脉冲,实现脉冲转变为点评,实现调速功能。
PWM EQU 7FH ;PWM赋初始值
OUT EQU P0 ;8个LED灯的接口
INCKEY EQU P1.4 ;K1,PWM值增加键。
DECKEY EQU P1.5 ;K2,PWM值减小键。
BEEP EQU P3.7
;----
ORG 0000H
SJMP START
ORG 000BH
SJMP INTT0
ORG 001BH
SJMP INTT1
ORG 0030H
;----
;主程序
;定时器0工作在模式1,定时器1工作在模式2。
;----
START:
MOV SP,#30H
MOV TMOD,#21H
MOV TH1,PWM ;脉宽调节
MOV TL1,#00H
MOV TH0,#0FCH ;
MOV TL0,#066H ;频率调节
SETB EA
SETB ET0
SETB ET1
SETB TR0
LOOP: MOV A,PWM ;
JB INCKEY,LOOP1 ;增加键是否按下?
CALL DELAY ;延时去抖动
JB INCKEY,LOOP1
CJNE A,#0FFH,PWMINC ;是否到最大值?
CALL BEEP_BL ;是,蜂鸣器报警。
SJMP LOOP
PWMINC:
INC PWM ;调节脉宽(脉宽减小)
SJMP LOOP
LOOP1: JB DECKEY,LOOP2 ;减小键是否按下?
CALL DELAY ;延时去抖动
采用51单片机的pwn电机调速课程设计
JB DECKEY,LOOP2
CJNE A,#02H,PWMDEC ;是否到最小值?
CALL BEEP_BL ;是,蜂鸣器报警。
SJMP LOOP
PWMDEC:
DEC PWM ;调节脉宽(脉宽增加)
LOOP2: SJMP LOOP
;----
;T0中断服务子程序 (频率)
;控制定时器1中断
;----
INTT0:
CLR TR1
MOV TH0,#0FCH ;1ms延时常数
MOV TL0,#066H ;频率调节
MOV TH1,PWM
SETB TR1
MOV OUT,#00H ;启动输出
RETI
;----
;T1中断服务子程序 (脉宽)
;----
INTT1:
CLR TR1 ;脉宽调节结束
MOV OUT,#0FFH ;结束输出
RETI
;----
;10ms延时子程序
;----DELAY:
MOV R6,#50
DELAY1:
MOV R7,#100
DJNZ R7,$
DJNZ R6,DELAY1
RET
;----
;蜂鸣器响一声子程序
;---
BEEP_BL:
MOV R6,#100
BL1: CALL BL2
CPL BEEP
DJNZ R6,BL1
采用51单片机的pwn电机调速课程设计
MOV R5,#25
CALL DELAY2
RET
BL2: MOV R7,#180
BL3: NOP
DJNZ R7,BL3
RET
DELAY2: ;延时R5×10 …… 此处隐藏:2341字,全部文档内容请下载后查看。喜欢就下载吧 ……
上一篇:环境与职业健康安全管理手册
下一篇:COSO企业内控风险管理模式