freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于freescalehcs12系列單片機的結(jié)晶器振動控制系統(tǒng)——pid算法實現(xiàn)-資料下載頁

2025-06-27 17:48本頁面
  

【正文】 單片機的相關(guān)工作原理的同時,制定基于MC9S12的結(jié)晶器振動控制系統(tǒng)和數(shù)字PID控制方案。其次是程序的編寫。由于以前沒有接觸過這款單片機,所以,用了好幾周的時間來熟悉編程環(huán)境和相關(guān)寄存器、I/O端口的操作。軟件的編寫,不僅涉及到PID的算法,還涉及到硬件電路。通過軟件和硬件的結(jié)合,也更進一步的體會了嵌入式編程,這也是這次設(shè)計中收獲最大的地方。在剛開始程序的編寫過程中,犯了很多錯誤,比如PID浮點運算問題,中斷調(diào)試問題以及到最后才發(fā)現(xiàn)的鍵盤邏輯錯誤問題,這些問題最后都得到了比較完美的解決。在設(shè)計中,使用了MC9S12DG128的開發(fā)板,通過開發(fā)板的使用,很快就熟悉和掌握了該單片機的大部分模塊的功能。程序運行成功后,由于沒有實際調(diào)試環(huán)境,沒有對PID參數(shù)進行整定,只能通過串口觀察程序運行情況,實在可惜。因此,本程序有等進一步的完善。這次設(shè)計的時間不是很長,我們也不可能通過一次設(shè)計就掌握所有單片機設(shè)計的知識,但通過這一次設(shè)計,讓我更深信,只要努力就有收獲,單片機的發(fā)展日新月異,在今后的工作中,我們還要不斷的學習才能適應技術(shù)的發(fā)展。參考文獻1. Steven systems Design and Applications with the 68HC12 and HCS12[M].北京:電子工業(yè)出版社,20062. 毛義梅,羅海福,[J].天津:自動化儀表,2001,16(3):36~383. 陳衛(wèi)紅,夏伯鍇,[J],青島:青島大學學報,2002,17(3):904. Freescale Mc9s12介紹及編程練習[J] .5. [J] .武漢:武漢科技大學6. [M] .北京:紡織工業(yè)出版社,19927. :機械工業(yè)出版社[M],19988. :電子工業(yè)出版社[M],20069. [M].北京:科學出版,200710. [M].北京:清華大學出版社,200411. [J].天津:自動化儀表,12. [J].重型機械[J],13. [J].河北:14. [D] .重慶:重慶大學,200715. [D].:燕山大學,200116. 17. 18. 19. 附錄A源程序include /* mon defines and macros */include /* derivative information */pragma LINK_INFO DERIVATIVE mc9s12dg128bdefine set PTIH_PTIH0define pid_set PTIH_PTIH1define adding PTIH_PTIH2define reduce PTIH_PTIH5define confirm PTIH_PTIH7 int S_DATA[20]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}。 //接口數(shù)組設(shè)定值int F_DATA[20]={2,10,90,108,17,161,5,143,142,21,10,9,84,77,67,54,41,13,20,11}。 //接口數(shù)組反饋值int i=0。 //數(shù)組循環(huán)20次int j=0。 //鍵盤檢查時間float Err=,Perr=,Derr=。float Du=。 int Rout=0。int Rin=0。char count_flag=0。//鍵盤檢查標志char pid_choose。 //選擇調(diào)整的參數(shù) P or I or Dfloat temp=。 //pid計算中間變量char flag=0,flag1=0。 //set按下標志位flag ,confirm按下標志位flag1/**************************************************************//*PID結(jié)構(gòu)體*//**************************************************************/struct PID { int Setpoint。 //商定目標值 float Proportion。 //比例 float Integral。 //積分 float Derivative。 //微分 float Pre2err。 //上次誤差 float Preerr。 //本次誤差 float Max_e。 float limit_min。 float limit_max。 float death。 float death_k。 }Spid。/**************************************************************//*PID計算*////Du=Kp[E(k)E(k1)]+Ki[E(k)]+Kd[E(k)2*E(k1)+E(k2)]////////////Du=Kp[Err]+Ki[Perr]+Kd[Derr]//////////////////////////////////**************************************************************/float PIDCale(struct PID *p,int Feedback) // PID計算 { //返回值 Err=pSetpointFeedback。 //本次誤差Err=E(k) if(Err) { Perr=ErrpPreerr。 //Perr=E(k)E(k1) Derr=Err2*(pPreerr)+pPre2err。 //Derr=E(k)2*E(k1)+E(k2) Du=pProportion*Perr+pDerivative*Derr+pIntegral*Err。 pPre2err=pPreerr。 pPreerr=Err。 if(Err) //death limit Du=*Du。 if(Du) //max Du=。 if(Du) //min Du=。 return Du。 } else { Perr=ErrpPreerr。 //Perr=E(k)E(k1) Derr=Err2*(pPreerr)+pPre2err。 //Derr=E(k)2*E(k1)+E(k2) Du=pProportion*Perr+pDerivative*Derr。 pPre2err=pPreerr。 pPreerr=Err。 //if(Err) //death limit //Du=*Du。 if(Du) //max Du=。 if(Du) //min Du=。 return Du。 } }/**************************************************************//*PID參數(shù)初始化*//**************************************************************/void PIDinit(void) { = 0。 = 0。 = 0。 = 0。 = 2。 = 。 = 。 = 。 = 。 }/**************************************************************//*串口程序*//**************************************************************/void SciInit(void){ SCI0BDL = (unsigned char)((16000000UL /* OSC freq */ / 2) / 9600 /* baud rate */ / 16 /*factor*/)。 SCI0CR1 = 0。 /*normal,no parity*/ SCI0CR2 = 0X0c。 /*TIE=0,TE=1,RE=1*/}void SciTx(unsigned char text){ //字符發(fā)送 if (text==39。\n39。) { while(!(SCI0SR1amp。0x80)) 。 //換行 SCI0DRL = 0x0a。 return。 } if (text == 39。\t39。) { while(!(SCI0SR1amp。0x80)) 。 SCI0DRL = 0x09。 return。 } else{ while (!(SCI0SR1amp。0x80))。 // wait for output buffer empty // SCI0DRH = 0。 SCI0DRL = text。 }} void print_str(char data[]) { //字符串發(fā)送 uchar i = 0。 while(data[i])SciTx((uchar)data[i++]) 。 } void SciPID(float t){ //int k。 char qian=0,ge=0,si=0,bai=0。 if(t0) { print_str() 。 t = t。 } //t=t*+ 。 qian=t/100 。 bai=(tqian*100)/10。 si=(t100*qian10*bai)。 ge=((t(100*qian)(10*bai)(si))+)*10。 qian=qian+0x30。 bai=bai+0x30。 si=si+0x30。 ge=ge+0x30。 SciTx(qian)。 SciTx(bai)。 SciTx(si)。 SciTx(0x2e)。 SciTx(ge)。 } /**************************************************************//*定時器參數(shù)初始化*//**************************************************************/void timerInit(void) { TIOS = 0x80。 //設(shè)定PORTT口7為輸出 TSCR2 = 0x0B。//選定與分頻系數(shù)為8,時基:1/(8M/8)=1us ,TCRE置位,輸出比較相等時,定時器復位 TC7= 50000。//中斷間隔1000*1=1000us TIE = 0x80。//允許中斷 TSCR1 = 0x80。//定時器使能 } /**************************************************************//*延時程序*//**************************************************************/void Dly_ms(int ms){ int ii,jj。 if (ms1) ms=1。 for(ii=0。iims。ii++) for(jj=0。jj2670。jj++)。 //busclk:16MHz1ms} /**************************************************************//*PWM_INIT*//**********
點擊復制文檔內(nèi)容
教學教案相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1