#include "DSP6713_emif.h" //dsp内部设备emif
#include "device_ad.h" //系统外部设备ad convert
#include "device_da.h" //系统外部设备da convert
#include "device_motor.h" //系统外部设备直流伺服电动机
#include "device_can.h" ////
#include <math.h>
//////////////////////////////
void wait();
int pid_p(int ek);
int pid_pid(int ek);
int gas(int i);//取绝对值
int dataout_convert(int k);//使输出的DA信号安全的范围内
///////////////////////////////
#define SDRAM_BASE_ID 0x80001000
#define LED *(int *)0xA024003C
//取值运算符(定义了指针变量)地址,LED存储了该地址的值
#define NUM1 40000
#define NUM 100000
//////////////////////////////
float pi = 3.14;
int pwm_control=0;//motor测试临时变量
int addata1;//ad测试临时变量
int dataout;//da输出测试临时变量
int encoderdata1;//encoder测试临时变量
/////////////////////////PID测试变量
float Kp=0.3, Ti=0.0002,Td=0.0002;//pid参数
//float Kp=0.3, Ti=0.0002,Td=0.0002;//pid参数
int ek=0,ek1=0,ek2=0;
//ek为码盘采样值,ek1为上一采样时刻的偏差,程序中写的有点乱?
int ek_input=10000;//输入设定的码盘值,此值变化的话,PID参数也随应改变
int ee=50;//误差阈值
float ek_sum=0.0;//位置式PID算法中,积分累积项
float uk0=0;//初始位置
float uk_float=0;//pid输出调节量
int uk_int=0;//pid输出调节量
main()
{
//uk0=(Kp*ek_input)/2;//控制器输出初始量。
initEmif();
da_clr();
da_control(2);
da_dataout(1765);//DA输出信号经过analog板后为零幅
da_control(3);
da_dataout(1625);
da_outputEn();
encoder_clr(0);
wait(10000);
while(1)
{
ek=encoder_read(3);
dataout=pid_pid(ek);
da_dataout(dataout_convert( dataout));
da_outputEn();
}
//da_dataout(1036);
}