|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
9 w# r# B" ` B( R4 F
# i0 b& m- h0 \: |" e, Y+ K#include <C8051 F020.H>
! z& X B) B3 a' ~5 |2 Z: U#include <string.h>
. i9 T1 n/ _- H: v#include <math.h>
6 h& K9 I8 Y; t//void PIDInit(PID *PP);
/ K# h7 G: y. J0 Z, w* D; X4 m/*定义结构体和公用体*/4 r3 ?! q4 g3 s* D( ?
#define N 8
8 g5 x$ @$ C; _, c; a" |: f5 ?- |typedef struct PID{: ~, I/ p* \( I) _/ H2 _
unsigned int setpoint; /* 设定值*/' D: u$ t9 D& z8 e& j/ a3 Q
unsigned int proportion;/*比例系数*/; y9 ~- @& b9 ]
unsigned int integral;/*积分系数*/
2 t4 Q$ Y2 g- ~) C9 m2 F! ^9 t; H* s% q' Kunsigned int derivative;|*微分系数*/
7 q" \9 n5 r6 }( E5 m9 N3 q6 Iunsigned int lasterror;/*前一拍误差*/$ o7 j8 t' Q+ i: j* ^1 H, A% Q7 `
unsigned int preerror; .|*前两拍误差*/7 z7 n H! r( r- H, k
}PID;
# a! i$ b3 |. ^# Z: z
q1 h4 c. Y+ Y5 i: ?* c5 ^- `( [2 \! K1 w) b# H4 ^ u6 i
/ L" D. L- ~" H" A1 T
union stu{
$ G; a& o3 {2 Lunsigned int value;
: }4 E P4 Z. H1 ], F0 nunsigned char num[2];
6 Z W$ z9 z6 c# g0 P}laser;
2 h7 v+ I- l1 C- M, l i2 B* Zunion dat{
$ a' @4 p6 G- {unsigned char dd[2];
) K5 h' B/ z, R/ ?- M( ^unsigned int number;
# e1 \6 V7 k' M4 q4 @8 T% Z}collect; `" I' Q; ]. U7 e7 k; I
/*函数声明部分*/( _% b* o0 y; x' m2 _
unsigned int PIDcal(PID *pp,int thiserror);
' {+ ?- N5 y+ H+ |2 S- Hvoid PIDInit(PID *PP);6 Y8 k" N- k9 f5 Q4 ^9 ?5 E# l
void PortInit(void);
1 _" ^1 J7 D$ U* u. K2 punsigned int get_ _ad(void);
6 N6 E' q; E, i8 n. j6 t; [unsigned int filter_ _valve(void);
6 ~ B: C( f" Svoid Delayms(void);
( C# g' B1 q5 ]) x3 D/*主函数部分*/5 }. ?; q0 T9 E
void main(void)! Y3 ^" {+ @( c; G' f, e
/ A: Q) m- ?4 K- Z
{
* i j) y7 c4 z% S+ \, C% o+ tPID vPID;/*定义结构体变量名 */
3 n4 {' v4 F# d" M1 k: f* e% Kunsigned int verror;
+ m2 p" p2 V. u: K C% [8 runsigned int Error;
Z) C/ H3 v* A" j/ ]3 Q' Wunsigned int tempi;
% s- {" T3 m# m% N1 ?unsigned char L ASERH,L ASERL;/*误差的高低字节变量*/! C! j9 ?; n. c' @* x
WDTCN=0xde; & c& K) N3 S3 T) E
WDTCN=0xad;0 p- S1 A( J3 r/ ^/ u; s
//portinit();
7 a' K, c+ K- S6 O n. r* x, {$ ZPIDInit(&vPID);; L) @" V9 v) d9 F9 H
vPID.proportion= 10;/*设置PID比例系数为10*/
. D7 M& n& v* }7 VvPlD.integral=10;/*设定PID积分系数 为10*/3 k1 o: m) _" U+ N# g+ C
# E# Z" C$ U( W( K
1 Y! u! t ?# Z: B' P, n
. E$ n* J* N4 y8 h! D( J# x3 X
8 u- `% `7 ]/ }; t' C
/ f- E V1 ?, u$ U% T$ _% T* ?, T0 I5 ~& U
9 B3 R" I7 ]* ^ o/ T# ?: d$ m' u3 a& }
7 l" [+ q o+ k
|
|