| 
 | 
	
    
 
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册  
 
x
 
2 i  ]5 E% l/ h2 k* W, {, |# {  E 
  {& V3 Y: U0 q" i 
#include <C8051 F020.H>1 y7 ^# J+ n! y0 v3 C 
#include <string.h> 
% J! c8 h7 S9 T- F$ G* i#include <math.h>9 \; G. M5 T7 k8 F 
//void PIDInit(PID *PP); 
' g$ b/ V# v9 }: p2 X/*定义结构体和公用体*/4 S2 t% ~% @" k# [+ j* c9 B 
#define N 8 
2 Q3 _, o4 j+ ^2 X7 c% mtypedef struct PID{ 
% h, [1 E- |: w3 v, Xunsigned int setpoint; /* 设定值*/6 X' n& U2 v! X2 q  J. r) t/ e 
unsigned int proportion;/*比例系数*/ 
, y) ]  `. E0 G: [8 k  ^unsigned int integral;/*积分系数*/- r$ A- c/ |" d: s4 l 
unsigned int derivative;|*微分系数*/ 
$ [6 p" C! v. C! `unsigned int lasterror;/*前一拍误差*/0 V; O* s9 J4 F9 p 
unsigned int preerror; .|*前两拍误差*/ 
  t3 I  \2 X0 F( q4 x+ F" s' L}PID;; B- i, ?3 F8 j5 d 
 
2 U3 ~$ M8 V: ~ 
" q2 ^1 ]  V, x& i: T) `" n5 R3 o: C' `) h+ B7 E$ G4 E 
union stu{ 
* G  M$ t" g* `' C- p1 D. ~unsigned int value;; }/ t5 x& q/ e& W" _ 
unsigned char num[2];6 C! ?- |* Z: D% G1 C5 ` 
}laser;+ _& l1 m; b+ @ 
union dat{ 
% g! S7 R/ b% N% L3 j" Yunsigned char dd[2]; 
# r# O% M, ~9 Z. Iunsigned int number;) d! C2 m7 M% a; s2 O5 q  n 
}collect; 
; l6 W. D/ H) ]8 ?% ]/ n0 Y, r/*函数声明部分*/ 
2 W  q( T* Y- }! G9 Aunsigned int PIDcal(PID *pp,int thiserror);/ }- ^% Z& U) S' ? 
void PIDInit(PID *PP); 
2 j+ }- K: S! v2 q2 F/ Cvoid PortInit(void);& R7 C% ]) w+ P- O 
unsigned int get_ _ad(void); 
. y) I, u9 ~6 b. G, S) T7 Z6 ]2 junsigned int filter_ _valve(void); 
5 M: m. i. A# `6 L& r- `! |8 }& pvoid Delayms(void); 
/ o* ]1 P7 @: D. z- o/*主函数部分*/4 Z. N, i" o- a/ Y) Y5 p2 J3 m& N 
void main(void) 
2 i  k8 n' Q, d' P0 u3 A* N6 C# w$ M% C& L- Z7 ]- v9 _/ U 
{ 
" n7 I  {( N) r" i0 |& i7 ePID vPID;/*定义结构体变量名 */ 
2 a0 W: W+ l# W! r2 \unsigned  int verror;& ]0 y& F# x2 |2 E: S/ P! n9 _' J0 a; e# v* ] 
unsigned  int Error;) ~2 Q* D% Z# l 
unsigned  int tempi; 
7 O, |2 [& H9 \( `7 X  Nunsigned char L ASERH,L ASERL;/*误差的高低字节变量*/- H% w. S( B) C; A 
WDTCN=0xde; 2 d0 H5 q5 `* F- P# m( Z- [( i% L. K 
WDTCN=0xad;4 D# L! Y# b2 q# U" t! E  B8 G: F 
//portinit(); 
6 t1 O4 k$ z0 YPIDInit(&vPID);; @; G1 M9 n" ~0 ] 
vPID.proportion= 10;/*设置PID比例系数为10*/ 
0 x6 u) {' L- z/ D8 r/ MvPlD.integral=10;/*设定PID积分系数 为10*/& h9 I+ w+ w0 r5 S9 S5 Y 
 
  X  |7 V) y( ^/ ] 
5 G% K) F* A, t5 J6 a* C 
1 P6 `5 I# a( k! m( \, Q, K9 n' k1 o$ [+ d 
 
1 ~5 ~: S% W0 p* j4 }: Z1 _9 v* l5 h+ ?( i) H7 y7 R* W* |6 l 
6 o$ X! [  c+ C; n 
" t5 }- I) G$ p$ p: g  _8 Q 
 
/ s$ {# F) ?. b: E1 z" S, N |   
 
 
 
 |