資源簡介
實現了通過增量式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++)
評論
共有 條評論