|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
X- T( j L' O: O- h5 y: C1 e/ B& e: f
#include <C8051 F020.H>
+ S. f3 d' G; L V, R* X#include <string.h>. t4 Q" K9 A4 F2 g: E* ^2 W
#include <math.h>
# `" k% d, _) c7 I- _% t//void PIDInit(PID *PP);
* @% q# ~7 L* C; I/*定义结构体和公用体*/
! M* _$ D8 M9 C* P" z/ X& Y#define N 8/ C! N+ T- Z+ f5 I& [: q2 I- S
typedef struct PID{
3 Z9 M) C+ H/ |! Xunsigned int setpoint; /* 设定值*/
- m! y2 c, I% S& e" h5 b- e7 xunsigned int proportion;/*比例系数*/: E K- Z+ Y6 h E p+ c8 n9 o
unsigned int integral;/*积分系数*/
2 U/ E X; j. t0 @6 G1 y0 Y! B, `unsigned int derivative;|*微分系数*/
: f7 _: }) V2 k1 l9 \1 }2 r1 Qunsigned int lasterror;/*前一拍误差*/
4 U+ d" m; Z# M3 |$ Xunsigned int preerror; .|*前两拍误差*/$ K$ Z' G- _ c( l e8 M
}PID;
( a7 G7 M5 Q1 v, q% }* T1 g
6 Z; ?- L9 V o1 D
& ?7 Z- @7 {8 {& x' S! _& V
8 P) n! E, k6 F7 v5 k6 Xunion stu{) w# C8 z# F* z9 \) E7 x
unsigned int value;; [: l2 A2 P" H8 a" O
unsigned char num[2];
, v# X" C! I0 E0 i}laser;
# i! S, u3 G4 o I ounion dat{
9 y$ [+ c( k* r1 @5 w! c) Eunsigned char dd[2];3 u A0 x. B) u: J7 U7 r- y
unsigned int number;3 h) H o: n: o" R
}collect;
( W5 _0 |' }% ?% M. X1 ]& t$ a/*函数声明部分*/: v" d# c, ^1 D% ]
unsigned int PIDcal(PID *pp,int thiserror);
1 n; _+ o/ X" T$ }+ }9 J% b2 f' ?; Evoid PIDInit(PID *PP);4 x* B- J: b; M$ u
void PortInit(void);
& y+ l" ?9 q! y8 runsigned int get_ _ad(void);$ C1 ^3 p, S, g8 o+ A, D2 C) [
unsigned int filter_ _valve(void);) S& \$ Q& j2 [
void Delayms(void);
! d1 V& N/ `; Y6 q! ~: m4 u/*主函数部分*/
8 I) V2 q1 a* ~' L8 g0 Zvoid main(void)
: J* b6 P0 f4 k3 C6 Z- Y- y; o( J# F ?. ~! i& E2 ~
{
" i7 p+ ~" m- Z# h- x% X1 oPID vPID;/*定义结构体变量名 */, a$ K1 ], A1 Y& U
unsigned int verror;: ^' D n2 K0 H' X- y8 j+ c! ^
unsigned int Error;, ~3 c0 n7 E3 W8 E( {
unsigned int tempi;+ Y# H: ]9 K7 u
unsigned char L ASERH,L ASERL;/*误差的高低字节变量*/6 `% J" }4 I0 z. ~8 d/ j
WDTCN=0xde; ( O! ]% H6 A/ l8 l
WDTCN=0xad;
0 |: S$ x- G! _( z Q' j- R//portinit();
. f2 w3 H+ U9 |PIDInit(&vPID);( i8 R7 f& |; ?' E. [
vPID.proportion= 10;/*设置PID比例系数为10*/
3 R# F9 u! R4 Q5 ]" gvPlD.integral=10;/*设定PID积分系数 为10*/
' J4 x: x* e* ]0 R* j5 \
2 x5 ^2 k: f( s6 d6 m( B2 g' s: x% v; w M: c3 F
: d# g: Z& s4 I2 q; h0 |0 v; r/ a. c
( M( y% u& Z C* S
1 N1 s0 l$ t+ J* H4 K, G% }3 u0 D/ L6 Z
& J6 q5 N; U, h/ y; t& n9 e
3 E! x* P5 l+ ?2 x1 Z1 Z- e& ?6 v( U! H! |, V
|
|