资源简介

实现了通过增量式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++)

评论

共有 条评论