tlc2543

更新时间:2023-03-09 11:30:37 阅读: 评论:0

冰箱原理-图书借阅管理制度

tlc2543
2023年3月9日发(作者:厚德教育)

/*---------------------------------------------

张力测试和控制器使用pid调节算法算法定义

x--本次张力测试值

x1--上次张力测试值

s--张力设定值

e--误差累加值

c1-张力调整值

c--输出量,制动器电流DA值

KP--比例常数

KI--积分常数

KD--微分常数

-----------------------------------------*/

#include"reg52.h"

#include"absacc.h"

#defineucharunsignedchar

#defineunitunsignedint

#definesintsiginedint

#defineTure1

#defineFALSE0

#defineKP1.0//比例常数精度

#defineKI0.0//0.02//5//6-150.0//0.1//积分常数//0.1惯性震荡平移

#defineKD0.3//0.26--18//6-150.10.5//积分常数//0。1仅反映速度

#defineAlpha0.3//Alpha=采样周期/滤波时间常数0.2-0.5

#defineDaVar200//启动之前DA预先置入量

#defineK0.8//从调整量崔算制动器电流系数//0。2

#defineTH11M0X4C

#defineTL11M0X00//11.0592定时50MS

#defineTH12M0X3C

#defineTL12M0XB0//12M定时50MS

sfrWDT_RST=0XE1;//STC89C52RCUSESFC是位于80H-FFH的片内

直接寻址

bitsampleflag;//采集标志

bitenterworkstatus;//进入工作状态

bdataucharadword0,adword,ad8data,da8data;//bdata可位寻址片内数据存储区

sbitad0bit=ad8data^0;

sbitadw7bit=adword^7;

sbitdab7it=da8data^7;//设置ad8data第0位是ad0bit

bdatauchara,b,nddata;

sbita_0=a^0;sbita_7=a^7;

sbitb_0=a^0;sbitb_7=a^7;

sbitndbit_0=nddata^0;//时钟

sbitadck=p1^0;sbitaddi=p1^1;sbitaddo=p1^2;sbitadcs=p1^3;//tlc2643u

///cs为高时处高祖态为低时访引脚

sbitdacs=p3^5;sbitdack=p3^6;sbitdain=p3^7;//max504u

sbitr=p2^0;sbitsrclk=p2^1;sbit=p2^2;//74ls595u

sbitAutoStatus=p3^3;//0---自动1--手动

sbitStartUpSignal=p3^4;//1---收到启动信号

unitad16data,autot,tensiontest,testu,mant,testmax,testmine;//0--65535

unitTestvalue,Setvalue,Prevalue;uint;pulst,num=0;//脉冲

sintda16data,da16new,DownDa;//-32768-32767

uchari,j,IntCount,SmapleCount,StopCount;//smapcount样品

ucharDisplayCount;//显示

ucharcounterc

ucharidatadisbuf[8]={0,0,0,0,0,0,0,0};//间接寻址片内数据存储区

floatx;//本次张力测量值

floatx1;//上次张力测量值

floatx11;//备份x11

floats;//张力设定值

floate;//误差累加值

floatc1;//张力调整值

floatc;//输出量,制动器电流DA值

floatKI=0.0;//积分

ucharcodedisptab[23]={0x88,0xeb,0x4c,0x49,0x2b,0x19,0x18,0xcb,0x08,0x0b,

0x7f,0x0e,0xff,0x80,0xe3,0x44,0x41,0x23,0x11,0x10,

0xc3,0x00,0x03}

//88h-'0',ebh-'1',4ch-'2',49h-'3',2bh-'4',19h-'5',18h-'6',cbh-'7',08h-'8'

//0bh-'9',7fh-'-',oeh-'p',ffh-"",0x80--0x03=="0.~9."

//gfabdpcde

voiddisplay1(uinty);/*changuchardatatodisplaydata*/

voiddisplay2(uintz);/*changeuchardatatodisplaydata*/

voiddisplay3(uintw);

voidndchar(void);

voidad0(void);

voidad2(void);

voidad3(void);

voidtlc2543(void);

voidda(void);

voidinitCpu(void);

//---------------------------------------------------------

//100ms采样一次

//---------------------------------------------------------

voidtimer()interrupt1using1//采用外部中断0

{

TH0=0X4C;//TH11M;

TL0=0X00;//TL11M;

if(intCount>=3)//100ms到50ms2300ms

{IntCount=0;

SampleFlag=TURE;//采样标志

}

}

voidmain(void)

{floatk;//控制器电流采集//0.2

sp=0x70;WDT_RST=0x3a;

InitCpu();//cpu初始化

while(TURE)

{WDT_RST=0x3a;

if(sampleFlag=TURE)//采样周期到

{EA=0;//关中断

TR0=0;//停止计数

SmapleFlag=FALSE;//采集开始

ad0();//读张力测量值

if(Autostatus==0)//自动状态

{ad3();//读自动张力设定值

if(StartupSignal)//shou收到启动信号A=0/B=0

{

x=(float)(tensiontest*5.0/2047.0);//本次AD采样/x本次测量值

s=(float)(autot*5.0/2047.0);//设定值张力设定值

if((++samplecount)<=10)

{k=0.50;s=(s-x11)*sampleCount/10.0+x11;}//前20次为斜坡信

el{SampleCount=11;K=0.5;}//0.4//6_150.5

c1=KP*(s-x)+KI*(E+S-X)+KD(X1-X);//张力调整量

c=c+K*c1;//输出量

if(sampleCount<=10){if(c<=x11)c=x11;}

if(c<0.0)c=0.0;

if(c>5.0)c=5.0;//限幅

da16data=(sint)(c*1023.0/5.0);//计算出DA值

da();//输出DA以控制制动器电流

x1=x;

e=e+s-x;

EnterWorkstatus=TURE;

}

el//没有收到连动信号B=0A=1时

{if(Enterworkstatus)//如果正常工作突然停止

{if((++stopcount)<=14)//2.4s保持高输出

{if(stopcount==1)

{da16data=2*da16data;///2005_8_142->1

if(da16data>1023)da16data=1023;

DownDa=da16data;

}

elda16data=DownDa;

}

el

{if(stopCount<=28)//2s降到初始DA

{da16data=DownDa/(StopCount-14);

if(da16data<=DaVar)da16data=DaVar;

}

el

{EnterWorkStatus=FALSE;

StopCount=0;

SmapleCount=0;

e=0;//误差累加值

c=0;//输出量,

x1=x11;

x1=0;

}

}

}

el

da16data=DaVar;

da();

}

display1(tValue);

}

el//手动状态

{ad2();//读手动张力设定值

display3(mant);

SmapleCount=11;

if(!StartUpSignal)//手动状态没有连动信号

{EnterWorkstatus=FALSE;

Stopcount=0;

Samplecount=0;

e=0;//误差累加值

c=0;//输出量

x1=x11;

}

}

TestValue=(uint)((1-Alpha)*preValue+Alpha*TestValue);

preValue=TestValue;

display2(TestValue);//侧张力

if(++DisplayCount>=3)

{ndchar();

DisplayCount=0;

}

TR0=1;//启动定时器

EA=1;//开中断

}

}

}

VoidInitCpu(void)

{uchardelay;

EA=0;//关中断

IP=0x02;//设定中断优先级pt0高优先级

TMOD=0X01;//INTIALUSETIME0

TH0=0x4c;//TH11M;

TL0=0x00;//TL011M;//11.0592timer50ms

SCON=0x00;//串口工作在方式0

ET0=1//EnableTimer0

x1=0;//上次张力设定值

e=0;

c=0;

SampleFlag=FALSE;

EnterWorkStatus=FALSE;

SampleCount=0;//采样次数为0

StopCount=0;

da16data=DaVar;//预先给定DA值

da();

for(delay=0;delay<50;delay++);

ad0();

ad0();

x11=x1=(float)(tsnsiontest*5.0/2047.0);//本次AD采样//备份

preValue=TestValue;

DisplayValue=0;

DisplayCount=0;

EA=1;

TR0=1

}

Program

Voidndchar(void)

{

uchardipbit,disptime;

rclk=0;

for(dispbit=0;dispbit<8;dispbit++)

{nddata=disptab[disbuf[dispbit]];//移位寄存器//Rclk=STcp=移位时钟

脉冲//SRclk=SHcp锁存时钟脉冲

for(disptime=0;disptime<8;disptime++)//送数码

{srclk=0;

r=ndbit_0;

srclk=1;

ndata=ndata>>1;//数据移位

}

}

rclk=1;

}

Voiddisplay1(uintY)

{disbuf[0]=(uchar)(y/1000);y=y-(disbuf[0]*1000);

disbuf[1]=(uchar)(y/100);y=y-(disbuf[1]*100);

disbuf[2]=(uchar)(y/10);y=y-(disbuf[2]*10);

disbuf[2]=disbuf[2]+13;/*add.*/

disbuf[3]=(uchar)(y);

if(disbuf[0]==0)disbuf[0]=12;/*highbit0don'tdisplay*/

}

voiddisplay2(uintz)

//--------------------------

{disbuf[4]=(uchar)(z/1000);z=z-(disbuf[4]*1000);

disbuf[5]=(uchar)(z/100);z=z-(disbuf[5]*100);

disbuf[6]=(uchar)(z/10);z=z-(disbuf[5]*10);//显示数

disbuf[6]=disbuf[6]+13;/*add.*/

disbuf[7]=(uchar)(z);

if(disbuf[4]==0)disbuf[4]=12;/*highbit0don'tdisplay*/

//----------------------------------

}

voiddisplay3(uintw)

{w=(uint)(w/3.5);

disbuf[0]=(uchar)(w/1000);w=w-(disbuf[0]*1000);

disbuf[1]=(uchar)(w/100);w=w-(disbuf[1]*100);

disbuf[2]=(uchar)(w/10);w=w-(disbuf[2]*10);

disbuf[2]=disbuf[2]+13;/*add.*/

disbuf[3]=(uchar)(w);

if(disbuf[0]==0)disbuf[0]=12;/*highbit0don'tdisplay*/

}

/*thisprogrameisforget#0channeltensiontestvalue--tensiontest*/

voidad0(void)

{testmin=4096;testmax=0;

adword0=0x00;

adck=0;/*cktolow*/

adcs=1;/*cstohigh*/

tlc2543();

adword0=0x00;

tlc2543();

if(testmin>ad16data)testmain=ad16data;

if(testmax

tensiontest=ad16data;

adword0=0x00;/*12bitcontrolworld*/

tlc2543();

if(testmin>ad16datd)testmin=ad16data;

if(testmax

tensiontest=tensiontest+ad16data;

adword0=0x00;/*12bitcontrolword*/

tlc2543();

if(testmin>ad16data)testmin=ad16data;

if(testmax

tensiontest=tensiontest+ad16data;

adword0=0x00;/*12bitcontrolword*/

tlc2543();

if(testmin>ad16data)testmin=ad16data;

if(testmax

tensiontest=tensiontest+ad16data;

adword0=0x00;/*12bitcontrolworld*/

tlc2543();

if(testmin>ad16data)testmin=ad16data;

if(testmax

Program

tesiontest=tesiontest+ad16data;

tensiontest=(tensiontest-testmin-testmax)/6;

//tensiontest=tensiontest>>1;

//tensiontest=(tensiontest-testmin-testmax)>>1;

TestValue=(uint)(tensiontest*10.0/19.3+0.5);/*manttvalue*/

}

/*thisprogrameisforget#channlautotvalue--autot*/

voidad3(void)

{adword0=0x30;

adck=0;/*cktolow*/

adcs=1;/*csto1*/

tlc2543();

autot=ad16datd;

autot=ad16data>>1;//delete

SetValue=(uint)(autot*10.0/19.3+0.5);

}

/*thisprogramisforgetanalogvalue*/

voidtlc2543(void)

{adword=adwird0;//送通道号地址//

adcs=0;/*cs*/

for(j=0;j<7;j++)

ad0bit=addo;//输入数据//addo=数据输出

//ad0bit=ad8data^0//adw7bit=adword^7

ad8data=ad8data<<7;

addi=adw7bit;//输出的是地址

adck=1;/*ckhigh*/

adck=0;/*cklow*/

ad16data=(uint)ad8data;

ad16data=ad16data<<4;//*采集高8位数据//

adword=0x00;

ad8data=0x00;/*clear0*/

for(j=0;j<3;j++)

{ad0bit=addo;//输入数据//

ad8data=ad8data<<1;

addi=adw7bit;//输出的是地址///*di*/

adword=adword<<1;

adck=1;

adck=0;

}

add0bit=add0;//输入数据//

addi=adw7bit;

adck=1;

adck=0;

adcs=1;/*cstohigh*/

ad16data=ad16data|(uint)ad8data;/*get12bit*/

/*needdelay10usforA/Dconversion,*/

for(delays=0;delay<2;delays++)

{;}/*delay10us*/

}

voidda(void)//D/A转换//

{dack=0;/*tSCLKlow*?

da16new=da16data;

da16mew=da16new<<2//左移2位//

da8data=(uchar)(da16new>>8);

dacs=0;/*cstolow*/

for(i=0;i<8;i++)

{dain=da7bit;/*din*///da7bit=da8data^7

_nop_();/*NOP*/

dack=1;/*SETSCLKHIGH*/

_nop_();

-nop_();

dack=0;/*tsclklow*/

da8data=da8data<<1;

}

da8data=(uchar)(da16new&0x00ff);

for(i=0;i<8;i+)

{dain=da7bit;

_nop_();

dack=0;

_nop_();

_nop_();

dack=0;/*tSCLKLOW*/

da8data=da8data<

}

dacs=1;/*cshigh*/

}

//------------------------------------------------------------

//KP影响控制精度

//KI力学惯性,使震荡平缓

//KD控制提前量,力学家速度//

本文发布于:2023-03-09 11:30:37,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/zhishi/a/167833263720299.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:tlc2543.doc

本文 PDF 下载地址:tlc2543.pdf

上一篇:情感的作用
下一篇:返回列表
标签:tlc2543
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
  • 宿舍管理
    牛排腌制-室内加湿小妙招2023年2月28日发(作者:怎么买国外的东西)学生宿舍管理方案学生宿舍管理是关乎学生人身平安的,所以我们万不能懈怠。下面请看学生宿舍管理方案的详细内容吧!我校全校搬迁进入大学城,使得我校的学生公寓无论是宿舍外观还是住宿条件都比过去有了很大的提高,这同时对我们的学生宿舍管理有了新的要求,我们在经过调研的根底上,结合我校的实际情况,引入物业效劳体系,使学生公寓管理由过去的单纯
  • 3℃蚂蚁观察日记
  • 2℃竞选
  • 2℃如何创立公司
  • 2℃跟单员岗位职责
  • 2℃活动计划书
  • 2℃我爱你家乡
  • 2℃小学数学内容
  • 2℃乡情结尾
  • 2℃疫情防
Copyright ©2019-2022 Comsenz Inc.Powered by © 实用文体写作网旗下知识大全大全栏目是一个全百科类宝库! 优秀范文|法律文书|专利查询|