|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機 | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
哪位大俠能給個PID算法的匯編程序,小弟不勝感激! |
| 作者:ptj_wing 欄目:單片機 |
最近在做一個溫度控制器,想用PID控制.在網(wǎng)上找PID算法程序找了很久,始終找不到合適的源程序.希望大俠們,發(fā)揚中華發(fā)族樂于助人的優(yōu)良傳統(tǒng),幫幫我們這些初學(xué)者吧. ............................................................................................................. 幫助須要幫助的人就是對曾經(jīng)幫助過你的人的最好的回報. 人人為我,我為人人! ............................................................................................................. |
| 2樓: | >>參與討論 |
| 作者: ptj_wing 于 2005/6/4 1:02:00 發(fā)布:
不要沉! 不要沉! |
|
| 3樓: | >>參與討論 |
| 作者: ptj_wing 于 2005/6/4 17:26:00 發(fā)布:
還是沒人?? .. |
|
| 4樓: | >>參與討論 |
| 作者: yumm99 于 2005/6/8 21:10:00 發(fā)布:
找本<<自動控制原理看看吧>> |
|
| 5樓: | >>參與討論 |
| 作者: ptj_wing 于 2005/6/9 1:33:00 發(fā)布:
RE:找本<<自動控制原理看看吧>> 只能這樣了~~看來這個論壇的人對初哥是不屑的了 |
|
| 6樓: | >>參與討論 |
| 作者: xieyuanbin 于 2005/6/9 7:29:00 發(fā)布:
這種源程序給你也沒用。 這種東西還是要根據(jù)實際情況調(diào)整,算法各不相同。 |
|
| 7樓: | >>參與討論 |
| 作者: myymichael 于 2005/6/9 9:47:00 發(fā)布:
中華發(fā)族?? 中華民族 我是來灌水的 |
|
| 8樓: | >>參與討論 |
| 作者: ztb 于 2005/6/9 11:46:00 發(fā)布:
提這樣的問題,這種要求,通篇錯別字。汗顏! |
|
| 9樓: | >>參與討論 |
| 作者: ptj_wing 于 2005/6/10 9:04:00 發(fā)布:
我打字很差,請不要見怪.... |
|
| 10樓: | >>參與討論 |
| 作者: ptj_wing 于 2005/6/10 9:06:00 發(fā)布:
找到一個關(guān)于PID的程序了,也發(fā)出來讓大家看看 積分分離PID控制算法程序 ;**********P10,積分分離PID控制算法程序 ******** ;T、TD、TI、KP依次從30H,33H,36H,39H開始。 ;A,B,C,A',的值依次存在BLOCK1,BLOCK2,BLOCK3 BLOCK4 的地址里 ;這里B'與C值相同 ; 這里R(k)給的是定值 ORG 0000H E EQU 20H ; 一閾值 GK EQU 23H ;G(k) GK1 EQU 26H ;G(k-1) FK EQU 29H ;F(k) FK1 EQU 2CH ;F(k-1) BLOCK1 EQU 50H ;A BLOCK2 EQU 53H ;B BLOCK3 EQU 56H ;C BLOCK4 EQU 5AH ;A' UK EQU 5DH ;存放結(jié)果 BUFF EQU 43H ;暫存區(qū) BUFF1 EQU 46H BUFF2 EQU 49H BUFFR0 EQU 4CH REC EQU 63H ;采樣次數(shù) RK EQU 66H ;R(k) CK EQU 69H ;采樣數(shù)據(jù)始址 EK EQU 6CH ;存放偏差值E(k)的始址 EK1 EQU 70H ;存放E(k-1)的始址 TEST: MOV RK,#01H ;常數(shù)Rk 1.25的BCD碼浮點數(shù) MOV RK+1,#12H MOV RK+2,#50H ; MOV E,#7EH ;設(shè)定一閾值0.001的BCD碼浮點數(shù) ; MOV E+1,#10H ; MOV E+2,#00H MOV E,#00H ;閾值為0.3 MOV E+1,#30H MOV E+2,#00H MOV 3CH,#01H ;常數(shù)1的BCD碼浮點數(shù) MOV 3DH,#10H MOV 3EH,#00H MOV 40H,#01H ;常數(shù)2的BCD碼浮點數(shù) MOV 41H,#20H MOV 42H,#00H MOV 30H,#01H ;T 2.34的BCD 碼浮點數(shù) MOV 31H,#23H MOV 32H,#40H MOV 33H,#01H ;Td 3.54的BCD碼浮點數(shù) MOV 34H,#35H MOV 35H,#40H MOV 36H,#01H ;Ti 1.12的BCD碼浮點數(shù) MOV 37H,#11H MOV 38H,#20H MOV 39H,#01H ;Kp 1.25的BCD碼浮點數(shù) MOV 3AH,#12H MOV 3BH,#50H MOV R0,#E ; 將其轉(zhuǎn)換成二進制浮點操作數(shù) LCALL BTOF MOV R0,#RK LCALL BTOF MOV R0,#3CH LCALL BTOF MOV R0,#40H LCALL BTOF MOV R0,#39H LCALL BTOF MOV R0,#36H LCALL BTOF ;將其轉(zhuǎn)換成二進制浮點操作數(shù) MOV R0,#33H ;指向BCD碼浮點操作數(shù)Td LCALL BTOF ;將其轉(zhuǎn)換成二進制浮點操作數(shù) MOV R0,#30H ;指向BCD碼浮點操作數(shù)T LCALL BTOF ;將其轉(zhuǎn)換成二進制浮點操作數(shù) MOV R1, #BUFFR0 ;保存30H中的值 即T值 LCALL FMOVR0 MOV R1, #36H ;計算A值(1+T/Ti+Td/T).Kp LCALL FDIV MOV R1,#3CH ;常數(shù)1 LCALL FADD MOV R0,#33H ;保存33H中的值 MOV R1,#BUFF LCALL FMOVR0 MOV R1,#BUFFR0 LCALL FDIV MOV R1,#30H ;30H里存的是T/Ti+1 LCALL FADD MOV R1,#39H LCALL FMUL MOV R1 ,#BLOCK1 ;將結(jié)果保存在BLOCK1中 LCALL FMOVR0 MOV R1,#BUFFR0 ;30H恢復(fù)原值 MOV R0,#30H LCALL FMOV MOV R1,#BUFF ;33H恢復(fù)原值 MOV R0,#33H LCALL FMOV MOV R0,#40H ;計算B的值Kp.(1+2.Td/T) MOV R1,#33H LCALL FMUL MOV R1,#30H LCALL FDIV MOV R1,#3CH LCALL FADD MOV R1,#39H LCALL FMUL MOV R1,#BLOCK2 ;保存B值到BLOCK2中 LCALL FMOVR0 MOV R0,#39H ;計算C的值Kp.Td/T MOV R1,#33H LCALL FMUL MOV R1,#30H LCALL FDIV MOV R1,#BLOCK3 ;保存C值到BLOCK3中 LCALL FMOVR0 MOV R0,#33H ;計算A',保存33H中的值 MOV R1,#BUFFR0 LCALL FMOVR0 MOV R1,#30H LCALL FDIV MOV R1,#3CH LCALL FADD MOV R1,#39H LCALL FMUL MOV R1,#BLOCK4 ;保存A'值到BLOCK4中 LCALL FMOVR0 MOV R1,#BUFFR0 ;恢復(fù)33H中的值 LCALL FMOV MOV R0,#EK1 ;將EK1,F(xiàn)K1,GK1設(shè)初值0 LCALL FCLR MOV R0,#FK1 LCALL FCLR MOV R0,#GK1 LCALL FCLR MOV REC,#04H ;設(shè)置采樣次數(shù) LOOP: MOV CK,#01H ;采樣數(shù)據(jù)暫時給了一個定值 MOV CK+1,#10H MOV CK+2,#00H MOV R0,#CK LCALL BTOF MOV R0,#RK ;保存R(k)中的值 MOV R1,#BUFFR0 LCALL FMOVR0 MOV R1,#CK LCALL FSUB ;計算R(k)-C(k)的值送給E(k) MOV R1,#EK LCALL FMOVR0 MOV R1,#BUFFR0 LCALL FMOV ;恢復(fù)R(K)的值,釋放、BUFFR0 MOV R0,#BUFFR0 ;EK存到BUFFR0 MOV R1,#EK LCALL FMOV LCALL FABS ;求EK的絕對值 MOV R1,#E ;判斷EK的絕對值與E的大小 LCALL FCMP JC PID ;EK<=E時轉(zhuǎn)PID控制程序否則PD程序 CJNE A,#00H,PD LJMP PID PD: MOV R0,#BLOCK4 MOV R1,#BUFFR0 ;保存A'的值 LCALL FMOVR0 MOV R1,#EK LCALL FMUL MOV R1,#FK1 LCALL FSUB MOV R1,#UK ;結(jié)果存在UK中 LCALL FMOVR0 MOV R1,#BUFFR0 ;恢復(fù)A' LCALL FMOV MOV R0,#BLOCK3 ;計算B'.E(k)這里B'值與C值同 MOV R1,#BUFFR0 ;保存B' LCALL FMOVR0 MOV R1,#EK LCALL FMUL MOV R1,#FK ;B'.EK存到FK中 LCALL FMOVR0 MOV R1,#BUFFR0 ;恢復(fù)B' LCALL FMOV LJMP OUT PID: MOV R0,#BLOCK1 ;計算A.E(k)+G(K-1) MOV R1,#BUFFR0 ;保存A LCALL FMOVR0 MOV R1,#EK LCALL FMUL MOV R1,#GK1 LCALL FADD MOV R1,#UK ;計算結(jié)果存入UK中 LCALL FMOVR0 MOV R1,#BUFFR0 ;恢復(fù)A值 LCALL FMOV MOV R0,#BLOCK2 ;計算U(k)-B.E(k)+C.E(k-1) MOV R1,#BUFFR0 ;保存B到BUFFR0 LCALL FMOVR0 MOV R1,#EK LCALL FMUL MOV R1,#BUFF ;B.E(k)保存到BUFF LCALL FMOVR0 MOV R0,#UK MOV R1,#BUFF1 ;UK保存到BUFF1 LCALL FMOVR0 MOV R1,#BUFF LCALL FSUB MOV R1,#BUFF ;U(k)-BE(k)保存到BUFF LCALL FMOVR0 MOV R0,#BLOCK3 ;計算C.E(k-1) MOV R1,#BUFF2 ;保存C到BUFF2 LCALL FMOVR0 MOV R1,#EK1 LCALL FMUL MOV R1,#BUFF LCALL FADD MOV R1,#GK ;U(k)-BE(k)+CE(k-1)保存到GK LCALL FMOVR0 MOV R1,#BUFF2 ;恢復(fù)C值釋放BUFF2 LCALL FMOV MOV R0,#UK ;恢復(fù)UK值釋放BUFF1 MOV R1,#BUFF1 LCALL FMOV MOV R0,#BLOCK2 ;恢復(fù)B MOV R1,#BUFFR0 LCALL FMOV OUT: MOV R0,#GK1 ;G(k)-->G(k-1) MOV R1,#GK LCALL FMOV MOV R0,#FK1 ;F(k)-->F(K-1) MOV R1,#FK LCALL FMOV MOV R0,#EK1 ;E(K)-->E(K-1) MOV R1,#EK LCALL FMOV MOV R0,#UK ;UK轉(zhuǎn)換成BCD碼浮點數(shù)輸出 LCALL FTOB LCALL DELAY ;等待采樣時刻 DJNZ REC,NEXT1 SJMP $ NEXT1: LJMP LOOP DELAY: MOV R7,#02H DELAY1: MOV R6,#0FFH DELAY2: DJNZ R6,DELAY2 DJNZ R7,DELAY1 RET |
|
| 11樓: | >>參與討論 |
| 作者: ptj_wing 于 2005/6/10 9:11:00 發(fā)布:
TO:xieyuanbin 看了一個樣本程序,了解它的基本架構(gòu),要用時再改引些參數(shù)就可以了.. 我想學(xué)其它的程序也一樣吧,像那些浮點運算子程序之類的,你總不參考別人的程序就埋頭設(shè)計一個吧.要真有這樣的人,我只能說:佩服! |
|
| 12樓: | >>參與討論 |
| 作者: ptj_wing 于 2005/6/10 9:33:00 發(fā)布:
在這里衷心地謝謝所有跟帖的人! ... |
|
| 13樓: | >>參與討論 |
| 作者: ghost8205 于 2009/3/19 12:24:14 發(fā)布:
請問樓主能留下個聯(lián)系方式否 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |