|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
2 h/ _7 ^- ~# w& p b
5 }# E7 L$ X- c* ?#include <C8051 F020.H>- l8 _4 ^* w$ E9 v1 E
#include <string.h>/ I! a1 k* w( |; ?$ D
#include <math.h>) O! t+ Q4 `' R1 _! U
//void PIDInit(PID *PP);. h* D# `$ ^5 }8 J( M2 |
/*定义结构体和公用体*/
. h) {6 i$ ~8 H#define N 8* ^* Y1 b) y1 Z: t# {$ B' y
typedef struct PID{
5 H$ a4 Q& ^0 C* l! J* g& O% \unsigned int setpoint; /* 设定值*/$ U: w) C0 O( Y) e& u: a" V
unsigned int proportion;/*比例系数*/# B6 d# h- q2 }, w6 E5 [
unsigned int integral;/*积分系数*/
; g) R7 {. @; o; p+ t% B+ Uunsigned int derivative;|*微分系数*/
% Z. F- W/ v9 ] T! Tunsigned int lasterror;/*前一拍误差*/
( u; z0 k8 Q% V# _9 b8 Funsigned int preerror; .|*前两拍误差*/
. f5 o' o& b. A0 C. c6 D}PID;, `& j8 [) U- f) i; f6 e
z, I/ H' t& {+ r; H& r/ n
# r- E9 X& ^$ J
% \- d3 p) [1 e0 M0 }+ v/ ?union stu{* D% O3 n$ r( B6 Z
unsigned int value;
2 A# y0 n# K" M" ^4 P9 Vunsigned char num[2];
! O0 r, B N6 ~( a' E$ m}laser;8 U0 z S* W# P6 q! H0 k
union dat{8 F. F- ^) F& s5 _1 z! m" X; ?
unsigned char dd[2];
/ J6 m7 H% c9 I6 I9 ?unsigned int number;
# X# k+ w! L" k6 A8 x4 G2 S}collect;( @+ s' O0 l6 m' H. D: b: }: F& f! _
/*函数声明部分*/
7 y8 C+ l. }- g$ n1 ^" }unsigned int PIDcal(PID *pp,int thiserror);
' U! B) L- o$ G: Pvoid PIDInit(PID *PP);/ t8 @6 y& M L: ^1 W g
void PortInit(void);
/ s1 Z! Y! z$ q; {9 J% Tunsigned int get_ _ad(void);
& ^! M; ~$ H- P) zunsigned int filter_ _valve(void);( ^/ z. r+ G* [5 g
void Delayms(void);
( G. `. G1 F* z4 N/*主函数部分*/4 D+ Y1 e! C) i6 A: h, j/ z2 U
void main(void)4 X( m+ Q- F( z. K1 x" M
$ Y5 u4 v2 `1 P& C! L( q
{5 Q, P/ r5 ~5 p( L V( G
PID vPID;/*定义结构体变量名 */, }3 a5 ~0 w! O+ J' d" _; Q
unsigned int verror;. P; d; d5 A7 B( [" U3 w+ D
unsigned int Error;$ F3 X, a1 G- Z; P5 F
unsigned int tempi;
7 j- Z% M2 ~1 F+ k3 G* ?4 runsigned char L ASERH,L ASERL;/*误差的高低字节变量*/
9 S8 {: R" ?1 s: e6 NWDTCN=0xde; 1 p& V+ m k) q7 `* c+ m
WDTCN=0xad;
3 W' U, ]2 j) _4 n, ?//portinit();
+ c6 B- D' y @" BPIDInit(&vPID);9 M7 e1 _0 z& b- L
vPID.proportion= 10;/*设置PID比例系数为10*/- k0 E4 @1 v3 W! H& H
vPlD.integral=10;/*设定PID积分系数 为10*/
5 r* l) v: I& ?5 j
/ o& ?2 U; ^* p" w" u! u% e7 m! Y" m+ c$ k6 }1 D2 l" q
8 H: H! \) G! V" Y/ M
4 b- O! h, ~! ]# Q
' t1 n. M9 M# y* V# b
8 t) z5 Z8 ?7 H% `/ C( Q( `+ I# s& l0 v) ^
6 ] l$ e- z* ~7 M( h' g/ P, A y1 l" }( O1 r
|
|