|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
: U) r2 b! }/ S' z( m" K% x' C0 W! v
#include <C8051 F020.H>) R8 @' H9 y+ H9 i
#include <string.h>. E. J7 g! w- `; X
#include <math.h>. u! ]( N5 D& n- a1 D' ?$ J; J
//void PIDInit(PID *PP);
/ |! U/ o8 G9 \. J3 S# D m' h/*定义结构体和公用体*/4 M: e& L& z8 j. v; h9 s
#define N 81 ~. W1 k' M/ k; ^' \
typedef struct PID{/ l- J6 S' t- |, h6 Q$ J
unsigned int setpoint; /* 设定值*/$ @" c$ j- N8 ~ G7 t* e
unsigned int proportion;/*比例系数*/
- K- K+ q' @$ A( Wunsigned int integral;/*积分系数*/
+ ]9 J6 [2 [! `7 V Y) y( F" g# munsigned int derivative;|*微分系数*/. ~( w: q; d2 T5 r1 p1 I
unsigned int lasterror;/*前一拍误差*// s. Z% a0 b: c& z8 [; Y; N
unsigned int preerror; .|*前两拍误差*/
{2 _$ T5 b1 A; M}PID;, y* J8 Y, {. q
; W0 P# A4 w6 r" q; k4 \
; m) u# A2 S- d# d# g5 G) T0 Z
+ y3 t2 Y0 B t: gunion stu{' G& v. r% B O. B9 A+ f0 d
unsigned int value;. ]4 S- i' F8 b/ p* U+ A- P
unsigned char num[2];8 O. C0 w, V( V9 k0 Z% g# u; z) c
}laser;& Y- |6 q& \' e3 E# L4 R; U; y
union dat{
( g0 y6 _: t/ n. M9 X* Runsigned char dd[2];
# p f! c" @! k% junsigned int number;9 [( g# m9 r. v' P
}collect;/ o: @4 d4 x; H( p9 b8 P' @ c6 h$ R
/*函数声明部分*/7 k- m% J' G7 ]4 U; q/ r$ \6 O/ L3 m
unsigned int PIDcal(PID *pp,int thiserror);; T2 M- @( @9 u# U' D9 t
void PIDInit(PID *PP);5 l$ N* V o+ P# I1 {
void PortInit(void);
) U, p6 E# V- a- V2 }& hunsigned int get_ _ad(void);
$ s0 N. L" R1 [: U0 i A; ?unsigned int filter_ _valve(void);
, P" a, j- _6 Q! Jvoid Delayms(void);
+ C* C8 S$ i. t6 [4 E8 O: }- ^/*主函数部分*/% W% X& E, M1 w6 S [: \
void main(void)
2 z1 P' W& Q% |0 h, U9 H2 y9 ^! k5 `; ~2 h
{. ]& X* H% r1 z+ I$ g7 b
PID vPID;/*定义结构体变量名 */. m. K5 N! I3 i( l) }3 k1 Y0 P
unsigned int verror;+ x9 i" J; A* d3 K2 S- V4 D
unsigned int Error;# T; x) q1 b6 _8 j, C. z, }
unsigned int tempi;
7 I8 A% g# k0 nunsigned char L ASERH,L ASERL;/*误差的高低字节变量*/$ k! O3 D3 t5 {( b; B7 h) p) ~
WDTCN=0xde;
: @0 ?( f1 D( i+ z) Y. `WDTCN=0xad;0 V# f$ v! o' l% v; |0 z
//portinit();7 a% E9 \) t: S4 S7 @
PIDInit(&vPID);7 y" k3 C7 \, J; N) D: x
vPID.proportion= 10;/*设置PID比例系数为10*/
# H7 n& H2 \* _+ _+ x; nvPlD.integral=10;/*设定PID积分系数 为10*/ B6 {8 N; Z+ E6 @6 n' N( K# ~2 l
3 \: i3 v5 E8 b+ X! M
0 e% u! _% I4 Y
. Q3 H5 C8 N4 ?6 t! |, ? p7 n4 g" E( ]" q( Z2 }% ]7 X$ C
7 a- U8 z( A7 o2 p% R [
+ K% y m" b9 B& z% l; c8 _
* t; v- w+ M. p2 h) O4 M J
/ {+ w5 _7 s9 u6 F% H8 j
- B8 Q" @2 U Q |
|