资源简介
直流电机的闭环控制,可以稳定在设定速度,另外PID参数已经进行修改。
代码片段和文件信息
#include
#include
#include
#include
#define GPIO_DIG P0
sbit output=P1^2;
sbit IN1=P1^1;
unsigned char num=1;
unsigned char time=1;
unsigned char stime=1;
extern int displayspeed=0;
int bb=0;
extern int actual=0;
unsigned char code DIG_CODE[16]={
0x3f0x060x5b0x4f0x660x6d0x7d0x07
0x7f0x6f0x770x7c0x390x5e0x790x71};
unsigned char Init_display_data[6];
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit K1=P3^1;
sbit K2=P3^0;
sbit K3=P3^2;
//PID三个参数分别为xyz.
extern float x=0.01;
extern float y=0.001;
extern float z=0.1;
extern float err=0.0;//初始化偏差
extern float value=0.0;//初始化PID运算后的值
float uk=0.0;
extern int set=165;//初始sp
//void delay(unsigned int qq)
//{ unsigned int tv;
// for(t=qq;t>0;t--)
// {
// for(v=80;v>0;v--);
// }
//}
float PIDcontrol(int set int actual) //pid算式
{
float errchmmss;
errch=err;
err=set-actual;
mm=mm+err;
ss=err-errch;
value=x*err+y*(mm)-z*ss;
return value;
}
//显示模块
void DigDisplay()
{
unsigned int ii=0jj=0;
int a=0b=0c=0d=0e=0g=0m=0;
a=set/100;
b=(set%100)/10;
e=set%10/1;
d=displayspeed;
c=d/100;
m=(d%100)/10;
g=d%10/1;
//段选
Init_display_data[0]=DIG_CODE[a];
Init_display_data[1]=DIG_CODE[b];
Init_display_data[2]=DIG_CODE[e];
Init_display_data[3]=DIG_CODE[c];
Init_display_data[4]=DIG_CODE[m];
Init_display_data[5]=DIG_CODE[g];
for(ii=0;ii<6;ii++)
{
//位选
switch(ii)
{
case(0):
LSA=0;LSB=0;LSC=0; break;
case(1):
LSA=1;LSB=0;LSC=0; break;
case(2):
LSA=0;LSB=1;LSC=0; break;
case(3):
LSA=1;LSB=0;LSC=1; break;
case(4):
LSA=0;LSB=1;LSC=1; break;
case(5):
LSA=1;LSB=1;LSC=1; break;
}
GPIO_DIG=Init_display_data[ii]; //
jj=20; //
while(jj--);
GPIO_DIG=0x00; //全部熄灭
}
}
//////设定值模块
void keyscan()
{
//用于增加设定值
int i=0;
if(K1==0)
{
set++;
if(set>1000)
{
set=0;
}
while((i<50000)&&(K1==0))
{
DigDisplay();
i++;
}
}
//用于减少设定值
else if(K2==0)
{
set--;
if(set<0)
{
set=0;
}
while((i<50000)&&(K2==0)) //
{
DigDisplay();
i++;
}
}
//清除设定值
else if(K3==0)
{
set=0;
while((i<50000)&&(K3==0))
{
DigDisplay();
i++;
}
}
}
//定时器初始化
void Init()
{
TMOD=0x15;
TH1=0xfc;
TL1=0x18;
EA=1;
ET1=1;
ET0=0;
TH0=0;
TL0=0;
TR0=1;
TR1=1;
}
void Timer_0() interrupt 3
{
TH1=0xfc;
TL1=0x18;
TF1=0;
num++;
time++;
stime++;
if(time==50)
{
actual=(TH0*
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6509 2018-01-08 10:56 88\100000.hex
文件 43 2018-01-08 10:56 88\100000.lnp
文件 15149 2018-01-08 10:56 88\100000.M51
文件 1226 2018-01-08 10:56 88\100000.plg
....... 55647 2018-01-08 10:56 88\100000.uvopt
文件 13398 2018-01-07 12:46 88\100000.uvproj
....... 55651 2018-01-07 17:21 88\100000_uvopt.bak
文件 0 2018-01-07 11:29 88\100000_uvproj.bak
文件 3450 2018-01-08 10:56 88\main.c
文件 7944 2018-01-08 10:56 88\main.LST
文件 13984 2018-01-08 10:56 88\main.OBJ
文件 6376 2009-05-07 14:37 88\STARTUP.A51
文件 14064 2018-01-08 10:56 88\STARTUP.LST
文件 749 2018-01-08 10:56 88\STARTUP.OBJ
目录 0 2018-01-08 10:56 88
----------- --------- ---------- ----- ----
194190 15
- 上一篇:webupload.js
- 下一篇:webrtc+VS2017完整工程及编译结果
相关资源
- 深海推进器用永磁无刷直流电机损耗
- 基于运动控制器MCK2407的无刷直流电机
- 基于51单片机的直流电机转速控制及显
- 8086微机应用DAC0832控制小直流电机转速
- 温度控制直流电机转速
- pwm控制驱动直流电机 可调速 可调转的
- proteus\\直流电机的速度环PI控制-速度
- 矿用隔离开关无刷直流电机机构设计
- 基于51单片机的直流电机PID控制
- 无刷直流电机控制程序
- 基于ACS712的直流电机电流监测系统的
- 无刷直流电机伺服控制
- 28335控制的直流电机程序
- 基于DSP28335的直流电机闭环调速
- 无刷直流电机运行原理与基本控制方
- 无刷直流电机全桥驱动电路原理图+
- 基于STM32和ET1100的无刷直流电机控制器
- 基于stm32f1系列的直流电机调速
- 基于遗传优化的无刷直流电机模糊控
- 无刷直流电机的直接转矩控制系统研
- ATTINY24A 接收IIC程序控制直流电机
- mc33035无刷直流电机
- 基于DSP的无刷直流电机控制程序包括
- 基于STM32F103的无感和有感无刷直流电
- 用51单片机控制直流电机仿真图和程序
- 利用STM32的占空比PWM来控制直流电机
- 基于FPGA的直流电机控制
- 直流电机驱动器程序+电路工程图原创
- 直流无刷电动机原理及应用(第2版)
- verilog 串口 无刷直流电机驱动 PWM
评论
共有 条评论