|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
, P3 p! F2 w o8 w1 R* _- u2 _- d; R
; O$ k. G: U9 @7 ^' s$ q2 q* a#include <C8051 F020.H>
8 i- I/ C6 m8 e) [#include <string.h>
/ v8 S1 D% y d( E# K$ g7 Q#include <math.h>
( g5 a- c; H8 D7 _% i//void PIDInit(PID *PP);
; c3 K1 ^% `+ h1 n/*定义结构体和公用体*/7 A' V- h2 K. E5 C
#define N 8
# w/ x. @0 W; I0 X! _/ i( F2 _* {typedef struct PID{. f1 ~9 G1 O# T4 `; y+ ]
unsigned int setpoint; /* 设定值*/
' b! Z; |" ]. o' w$ @unsigned int proportion;/*比例系数*/( p8 O$ Z) O. b
unsigned int integral;/*积分系数*/
& g; U( w7 B, d) _! S b; bunsigned int derivative;|*微分系数*/
& t/ r# n& @; y! s5 ~, h: |unsigned int lasterror;/*前一拍误差*/
$ I0 T( ~# Z2 s! {' Runsigned int preerror; .|*前两拍误差*/
! P2 H# O, v6 y1 I9 _ e9 R, w}PID;1 N6 V5 E: i$ p
2 C5 W y$ f5 g: D1 [$ M2 S
; e2 }6 L' { |, _! L6 A* U
! L K1 N3 l# P& i8 c I
union stu{
, V7 Q4 |# Y( }3 ^* o& yunsigned int value;
$ z- a/ B [' C5 }- k3 Q" G; sunsigned char num[2];" @5 n% K5 ?7 i
}laser;# Y1 E/ I8 U' U$ f, @
union dat{
5 X" X2 V# K& T* Z2 ]unsigned char dd[2];
1 m+ t o" ^1 J* ^unsigned int number;
' H4 G! r) O2 k) y9 ?9 e* i* e( R}collect;
+ U: v3 G$ Q: [+ V/*函数声明部分*/+ I J' b' B, b2 v4 N" S( K
unsigned int PIDcal(PID *pp,int thiserror);
2 b+ n/ r ]! q$ Rvoid PIDInit(PID *PP);8 c- H! y; Z# F+ M$ I/ u& Z
void PortInit(void);
! H+ Q& V. J3 ]# I) }unsigned int get_ _ad(void);0 |/ [$ R. h. B# ]( k0 ~
unsigned int filter_ _valve(void);
. x; [4 z/ B; j2 Y% h1 L7 U+ a: |% e6 Cvoid Delayms(void);+ s2 `9 I! `0 t# K3 ]
/*主函数部分*/
8 G4 w- f% e6 r/ P/ \void main(void)
8 G* N, S1 ?7 w5 `. c9 v' B/ n. r4 X( J1 Q, R$ U0 [
{- [6 Q1 _$ f- p8 q1 G
PID vPID;/*定义结构体变量名 */8 H* P! i; @8 ?) n/ J$ H
unsigned int verror;4 R- n9 Y8 F9 c/ K7 v U* A1 L. ?9 O: x
unsigned int Error;9 v5 m- w2 r2 d/ c+ B& T* v* R; e3 ?
unsigned int tempi;
& {# D, m' V- H Q3 vunsigned char L ASERH,L ASERL;/*误差的高低字节变量*/
2 W2 P$ q' c6 G& rWDTCN=0xde; * A2 {' ` a; R9 h0 `6 G
WDTCN=0xad;
|2 G* i( E8 f( R//portinit(); n$ f# i' D# H5 M4 t0 X& _
PIDInit(&vPID);
: Q1 V) D& ?* J3 ovPID.proportion= 10;/*设置PID比例系数为10*/
. u- y2 Y8 W8 mvPlD.integral=10;/*设定PID积分系数 为10*/
' A" f" S6 W; q' |/ A. Q( K# j x# @# o/ {
! ] \ p6 [) x( A7 L% H: G8 s
7 |4 i* Y8 q! U5 }
6 |2 D+ ^/ U+ {6 q5 R" L O! a) g2 d
9 D' M4 K- q% h& h
+ W& y$ G" a V. f1 K2 U1 S/ z& W
3 W7 d" o4 \; H5 R
1 r2 m% r/ \) `" x' B% ]. |: U& y4 q$ A9 d r3 x. ^$ V
|
|