PWM直流电机调速单片机程序Word文档下载推荐.docx

上传人:b****3 文档编号:15281112 上传时间:2022-10-29 格式:DOCX 页数:16 大小:18.48KB
下载 相关 举报
PWM直流电机调速单片机程序Word文档下载推荐.docx_第1页
第1页 / 共16页
PWM直流电机调速单片机程序Word文档下载推荐.docx_第2页
第2页 / 共16页
PWM直流电机调速单片机程序Word文档下载推荐.docx_第3页
第3页 / 共16页
PWM直流电机调速单片机程序Word文档下载推荐.docx_第4页
第4页 / 共16页
PWM直流电机调速单片机程序Word文档下载推荐.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

PWM直流电机调速单片机程序Word文档下载推荐.docx

《PWM直流电机调速单片机程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《PWM直流电机调速单片机程序Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。

PWM直流电机调速单片机程序Word文档下载推荐.docx

//电机加速

sbitKey_turn=P2^2;

//电机换向

sbitPWM1=P2^6;

//PWM通道1,反转脉冲

sbitPWM2=P2^7;

//PWM通道2,正转脉冲

unsignedcharTime_delay;

/************函数声明**************/

voidDelay(unsignedcharx);

voidMotor_speed_high(void);

voidMotor_speed_low(void);

voidMotor_turn(void);

voidTimer0_init(void);

/****************延时处理**********************/

voidDelay(unsignedcharx)

{

Time_delay=x;

while(Time_delay!

=0);

//等待中断,可减少PWM输出时间间隔

}

/*******按键处理加pwm占空比,电机加速**********/

voidMotor_speed_high(void)//

if(Key_add==0)

 

Delay(10);

if(Key_add==0)

{

count0+=5;

if(count0>

=100)

count0=100;

}

}

while(!

Key_add);

//等待键松开

/******按键处理减pwm占空比,电机减速*****/

voidMotor_speed_low(void)

if(Key_dec==0)

if(Key_dec==0)

count0-=5;

if(count0<

=0)

count0=0;

Key_dec);

}

/************电机正反向控制**************/

voidMotor_turn(void)

if(Key_turn==0)

if(Key_turn==0)

Flag=~Flag;

Key_turn);

/***********定时器0初始化***********/

voidTimer0_init(void)

TMOD=0x01;

//定时器0工作于方式1

TH0=TH0_TL0/256;

TL0=TH0_TL0%256;

TR0=1;

ET0=1;

EA=1;

/*********主函数********************/

voidmain(void)

Timer0_init();

while

(1)

Motor_turn();

Motor_speed_high();

Motor_speed_low();

/**************定时0中断处理******************/

voidTimer0_int(void)interrupt1using1

TR0=0;

//设置定时器初值期间,关闭定时器

TL0=TH0_TL0%256;

TH0=TH0_TL0/256;

//定时器装初值

TR0=1;

if(Time_delay!

=0)//延时函数用

Time_delay--;

if(Flag==1)//电机正转

PWM1=0;

if(++count1<

count0)

PWM2=1;

else

PWM2=0;

if(count1>

count1=0;

else//电机反转

PWM1=1;

//-----------------------------------------------------------------------------

#include<

c8051f330.h>

//SFRdeclarations

math.h>

//FunctionPrototypes

//-----------------------------------------------------------------------------

#defineCMD_RESET0xA4//HD7279复位

#defineDECODE10xc8//方式0译码

sbitcs=P1^3;

sbitclk=P1^2;

sbitdat=P1^1;

sbitkey=P1^0;

sbitled_D1003=P0^7;

sbitsw1=P1^7;

sbitsw2=P1^6;

sbitsw3=P1^5;

sbitsw4=P1^4;

voidlong_delay(void);

//延时函数

voidshort_delay(void);

voiddelay10ms(unsignedchar);

voidwrite7279(unsignedchar,unsignedchar);

//HD7279写指令

voidsend_byte(unsignedchar);

voiddelay(unsignedchar);

voiddisp1(unsignedint);

voidOSCILLATOR_Init(void);

voidPORT_Init(void);

voidPCA0_Init(void);

voidTimer0_Init(void);

voidExt_Interrupt_Init(void);

//GlobalVariables

//main()Routine

unsignedintCEX0_Compare_Value;

//HoldscurrentPCAcomparevalue

unsignedinttmr,Speed_evaluate;

unsignedcharnum,num1,num2,num3,a;

unsignedintSpeed,pi,Speed2;

unsignedintSpeed1[10];

typedefstruct{

doubleSetPoint;

/*设定目标DesiredValue*/

doubleProportion;

/*比例常数ProportionalConst*/

doubleIntegral;

/*积分常数IntegralConst*/

doubleDerivative;

/*微分常数DerivativeConst*/

doubleLastError;

/*前一项误差*/

doublePrevError;

/*前第二项误差*/

doubleSumError;

/*误差和*/

}PID;

doublePIDCalc(PID*pp,doubleNextPoint)

{

doubledError,Error,Pout;

Error=pp->

SetPoint-NextPoint;

/*?

?

*/

pp->

SumError+=Error;

/

dError=pp->

LastError-pp->

PrevError;

PrevError=pp->

LastError;

LastError=Error;

Pout=pp->

Proportion*Error+pp->

Integral*pp->

SumError+pp->

Derivative*dError;

if(Pout>

1100)

Pout=1000;

if(Pout<

100)

Pout=100;

return(Pout);

PIDsPID;

//定义PID结构体变量

doublerOut;

//PID响应输出

unsignedcharrIn;

//设置PID反馈值

doublex;

doublesumout;

unsignedchardd;

//设置PID输出

voidmain(void)

sPID.Proportion=0.44;

//设置P

sPID.Integral=0.70;

//设置I

sPID.Derivative=0.0;

//设置D

//sPID.SetPoint=CEX0_Compare_Value;

//

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

当前位置:首页 > 初中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1