资源简介
实现了通过增量式PID调速来完成对直流电机的调速,硬件需要包括L298N、51单片机最小系统、带编码器的直流电机一个、以及显示速度的两个四位数码管。
代码片段和文件信息
#include
#define GPIO_DIG P0
sbit PWM=P1^0;
int e=0e1=1e2=0;
float uk=0uk1=0.0duk=0.0;
float kp=5ki=1.5kd=0.9;
int out=0;
sbit IN2=P1^1;
unsigned int valuetimer1;
unsigned int num=1000;
unsigned int Inlpuse=0num=0;
unsigned int tempcount1temp1;
unsigned int time=0;
sbit zhongduan=P3^2;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
unsigned char code DIG_CODE[17]={0x3f0x060x5b0x4f0x660x6d0x7d0x07
0x7f0x6f0x770x7c0x390x5e0x790x71};//显示0~F的值
unsigned char DisplayData[8];
void DigDisplay(void);
void PIDControl()
{
e=temp-num;
duk=kp*(e-e1)+ki*e+kd*(e-2*e1+e2);
uk=uk1+duk;
out=(int)uk;
if(out>250)
{
out=100;
}
else if(out<0)
{
out=0;
}
uk1=uk;
e2=e1;
e1=e;
value=out;
}
void DigDisplay(void)
{
unsigned char i;
unsigned int j;
DisplayData[7]=DIG_CODE[num%10000/1000];
DisplayData[6]=DIG_CODE[num%1000/100];
DisplayData[5]=DIG_CODE[num%100/10];
DisplayData[4]=DIG_CODE[num%10/1];
DisplayData[3]=DIG_CODE[temp%10000/1000];
DisplayData[2]=DIG_CODE[temp%1000/100];
DisplayData[1]=DIG_CODE[temp%100/10];
DisplayData[0]=DIG_CODE[temp%10/1];
for(i=0;i<8;i++)
相关资源
- 51单片机18B20
- 基于51单片机呼吸灯
- 基于51单片机3x4按键拨号
- 基于51单片机的音乐播放器,源码详细
- 51单片机课设.zip
- 51单片机驱动ov7670
- 基于51单片机的智能循迹小车制作
- 基于51单片机电子琴程序
- 51单片机测量方波频率proteus仿真
- 基于51单片机的自动加热散热系统,采
- 51单片机——门禁系统
- 51单片机程序.zip
- 基于51单片机的闹钟设计
- 51单片机数码管显示时钟
- 永磁无刷直流电机控制系统
- 51单片机T2定时器控制舵机程序源码(
- 两超声波模块测量角度
- 51单片机闹钟
- 51单片机 心形花样流水灯程序
- 四位数码管时钟程序
- BC28+51单片机的原理图
- 51单片机控制电机的转速转向以及启停
- 51单片机双机通信
- 51开发板密码锁
- 无刷直流电机无位置传感器控制代码
- 基于51单片机的心形流水灯仿真
- 51单片机控制CS5463程序
- 51单片机最小系统原理图.SchDoc
- 51单片机红外遥控器程序
- 遗传算法实现求PID参数控制电压的代
评论
共有 条评论