您的位置 首页 被动

C51单片机的PID程序编写

C51单片机的PID程序编写-//主程序======================================================

#include “Main.h”

#include “PID_f1.h”

/* 。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。.. */

/* 。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。.. */

void main(void)

{

float x,y,z;

while(1)

{

x = PID_Control(y,z);

}

}

//主程序======================================================

#include “Main.h”

#include “PID_f1.h”

/* 。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。.. */

/* 。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。..。.. */

void main(void)

{

float x,y,z;

while(1)

{

x = PID_Control(y,z);

}

}

//PID子程序=====================================================

/*——————————————————————*-

PID_f1.C (v1.00)

——————————————————————

Simple PID control implementaTIon.

See Chapter 35 for details.

COPYRIGHT

———

This code is from the book:

PATTERNS FOR TIME-TRIGGERED EMBEDDED SYSTEMS by Michael J. Pont

[Pearson EducaTIon, 2001; ISBN: 0-201-33138-1]。

This code is copyright (c) 2001 by Michael J. Pont.

See book for copyright details and other informaTIon.

-*——————————————————————*/

#include “PID_f1.h”

// —— Private constants —————————————-

#define PID_KP (0.2f) // Proportional gain

#define PID_KI (0.01f) // Integral gain

#define PID_KD (0.01f) // Differential gain

#define PID_MAX (1.0f) // Maximum PID controller output

#define PID_MIN (0.0f) // Minimum PID controller output

// —— Private variable definitions——————————

static float Sum_G; // Integrator component

static float Old_error_G; // Previous error value

/*——————————————————————*-

PID_Control()

Simple floating-point version.

See text for details.

-*——————————————————————*/

float PID_Control(float Error, float Control_old)

{

// Proportional term

float Control_new = Control_old + (PID_KP * Error);

// Integral term

Sum_G += Error;

Control_new += PID_KI * Sum_G;

// Differential term

Control_new += (PID_KD * SAMPLE_RATE * (Error – Old_error_G));

// Control_new cannot exceed PID_MAX or fall below PID_MIN

if (Control_new 》 PID_MAX)

{

Control_new = PID_MAX;

}

else

{

if (Control_new 《 PID_MIN)

{

Control_new = PID_MIN;

}

}

// Store error value

Old_error_G = Error;

return Control_new;

}

/*——————————————————————*-

—- END OF FILE ————————————————-

-*——————————————————————*/

//头文件Main.H=========================================================

/*——————————————————————*-

Main.H (v1.00)

——————————————————————

‘Project Header’ (see Chap 9) for project PID_f1 (see Chap 35)

COPYRIGHT

———

This code is from the book:

PATTERNS FOR TIME-TRIGGERED EMBEDDED SYSTEMS by Michael J. Pont

[Pearson Education, 2001; ISBN: 0-201-33138-1]。

This code is copyright (c) 2001 by Michael J. Pont.

See book for copyright details and other information.

-*——————————————————————*/

#ifndef _MAIN_H

#define _MAIN_H

//——————————————————————

// WILL NEED TO EDIT THIS SECTION FOR EVERY PROJECT

//——————————————————————

// Must include the appropriate microcontroller header file here

#include

// Include oscillator / chip details here

// (essential if generic delays / timeouts are used)

// –

// Oscillator / resonator frequency (in Hz) e.g. (11059200UL)

#define OSC_FREQ (12000000UL)

// Number of oscillations per instruction (4, 6 or 12)

// 12 – Original 8051 / 8052 and numerous modern versions

// 6 – Various Infineon and Philips devices, etc.

// 4 – Dallas, etc.

//

// Take care with Dallas devices

// – Timers default to *12* osc ticks unless CKCON is modified

// – If using generic code on a Dallas device, use 12 here

#define OSC_PER_INST (12)

//——————————————————————

// SHOULD NOT NEED TO EDIT THE SECTIONS BELOW

//——————————————————————

typedef unsigned char tByte;

typedef unsigned int tWord;

typedef unsigned long tLong;

// Misc #defines

#ifndef TRUE

#define FALSE 0

#define TRUE (!FALSE)

#endif

#define RETURN_NORMAL (bit) 0

#define RETURN_ERROR (bit) 1

//——————————————————————

// Interrupts

// – see Chapter 13.

//——————————————————————

// Generic 8051/52 timer interrupts (used in most schedulers)

#define INTERRUPT_Timer_0_Overflow 1

#define INTERRUPT_Timer_1_Overflow 3

#define INTERRUPT_Timer_2_Overflow 5

// Additional interrupts (used in shared-clock schedulers)

#define INTERRUPT_EXTERNAL_0 0

#define INTERRUPT_EXTERNAL_1 2

#define INTERRUPT_UART_Rx_Tx 4

#define INTERRUPT_CAN_c515c 17

//——————————————————————

// Error codes

// – see Chapter 14.

//——————————————————————

#define ERROR_SCH_TOO_MANY_TASKS (1)

#define ERROR_SCH_CANNOT_DELETE_TASK (2)

#define ERROR_SCH_WAITING_FOR_SLAVE_TO_ACK (3)

#define ERROR_SCH_WAITING_FOR_START_COMMAND_FROM_MASTER (3)

#define ERROR_SCH_ONE_OR_MORE_SLAVES_DID_NOT_START (4)

#define ERROR_SCH_LOST_SLAVE (5)

#define ERROR_SCH_CAN_BUS_ERROR (6)

#define ERROR_I2C_WRITE_BYTE (10)

#define ERROR_I2C_READ_BYTE (11)

#define ERROR_I2C_WRITE_BYTE_AT24C64 (12)

#define ERROR_I2C_READ_BYTE_AT24C64 (13)

#define ERROR_I2C_DS1621 (14)

#define ERROR_USART_TI (21)

#define ERROR_USART_WRITE_CHAR (22)

#define ERROR_SPI_EXCHANGE_BYTES_TIMEOUT (31)

#define ERROR_SPI_X25_TIMEOUT (32)

#define ERROR_SPI_MAX1110_TIMEOUT (33)

#define ERROR_ADC_MAX150_TIMEOUT (44)

#endif

/*——————————————————————*-

—- END OF FILE ————————————————-

-*——————————————————————*/

//头文件 PID_f1.H

// —— Public function prototypes ——————————-

float PID_Control(float,float);

// —— Public constants —————————————–

#define SAMPLE_RATE (1) // Hz

/*——————————————————————*-

—- END OF FILE ————————————————-

-*——————————————————————*/

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/beidong/346519.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部