我這有51的
#include <stdlib.h>
#include "global_varible.h"
/****************************************************************************
* 模塊名: PID
* 描述: PID調節子程序
* 採用PID-PD演算法。在偏差絕對值大於△e時,用PD演算法,以改善動態品質。
* 當偏差絕對值小於△e時,用PID演算法,提高穩定精度。
* PIDout=kp*e(t)+ki*[e(t)+e(t-1)+...+e(1)]+kd*[e(t)-e(t-1)]
*============================================================================
* 入口: 無
* 出口: 無
* 改變: PID_T_Run=加熱時間控制
*****************************************************************************/
void PID_Math(void)
{
signed long ee1; //偏差一階
//signed long ee2; //偏差二階
signed long d_out; //積分輸出
if(!Flag_PID_T_OK)
return;
Flag_PID_T_OK=0;
Temp_Set=3700; //溫度控制設定值37.00度
PID_e0 = Temp_Set-Temp_Now; //本次偏差
ee1 = PID_e0-PID_e1; //計算一階偏差
//ee2 = PID_e0-2*PID_e1+PID_e2; //計算二階偏差
if(ee1 > 500) //一階偏差的限制范圍
ee1 = 500;
if(ee1 < -500)
ee1 = -500;
PID_e_SUM += PID_e0; //偏差之和
if(PID_e_SUM > 200) //積分最多累計的溫差
PID_e_SUM = 200;
if(PID_e_SUM < -200)
PID_e_SUM = -200;
PID_Out = PID_kp*PID_e0+PID_kd*ee1; //計算PID比例和微分輸出
if(abs(PID_e0) < 200) //如果溫度相差小於1.5度則計入PID積分輸出
{
if(abs(PID_e0) > 100) //如果溫度相差大於1度時積分累計限制
{
if(PID_e_SUM > 100)
PID_e_SUM = 100;
if(PID_e_SUM < -100)
PID_e_SUM = -100;
}
d_out = PID_ki*PID_e_SUM; //積分輸出
if(PID_e0 < -5) //當前溫度高於設定溫度0.5度時積分累計限制
{
if(PID_e_SUM > 150)
PID_e_SUM = 150;
if(PID_e_SUM > 0) //當前溫度高於設定溫度0.5度時削弱積分正輸出
d_out >>= 1;
}
PID_Out += d_out; //PID比例,積分和微分輸出
}
else
PID_e_SUM=0;
PID_Out/=100; //恢復被PID_Out系數放大的倍數
if(PID_Out > 200)
PID_Out=200;
if(PID_Out<0)
PID_Out=0;
if(PID_e0 > 300) //當前溫度比設定溫度低3度則全速加熱
PID_Out=200;
if(PID_e0 < -20) //當前溫度高於設定溫度0.2度則關閉加熱
PID_Out=0;
Hot_T_Run=PID_Out; //加熱時間控制輸出
PID_e2 = PID_e1; //保存上次偏差
PID_e1 = PID_e0; //保存當前偏差
}
////////////////////////////////////////////////////////////void PID_Math() end.
『貳』 單片機中調整指令:DA A是什麼意思
BCD碼轉換指令;
比如說:
81D+91D=172D
而:
81H+91H=112H
這里為了將81H+91H結果與81D+91D一致,經過DA有:
DA(112H)=112H+60H=172H
雖然一個是16進制一個是10進制但172在形式上是相等的。
MOV R5,#81H
MOV A, #91H
ADD A, R5
DA A
首先81H+91H=112H,此時AC=0,Cy=1,A=12H,所以DA A後A=12H+60H=72H,AC=0,Cy=1,結果為172H,當然運算應該理解為81D+91D=172D。
『叄』 如何用單片機來控制運放的放大倍數
用MCP10410,這是一種電子電位器,去網上下載資料看看,與單片機通信程序很好寫。
『肆』 STC15w4k32單片機如何更改內部時鍾頻率
STC15w4k32單片機更改內部IRC時鍾頻率,有兩種方法,一種是在燒錄程序時,選擇內部時鍾頻率。如下圖,畫紅框的下拉列表中的頻率,就是可以選擇 的時鍾頻率。
『伍』 怎麼用51單片機控制DA實現可變增益放大啊急求具體方法與程序啊!!!
可變增益說的簡單就是調幅。
一般可用乘法DAC,雙DA的方案,一個DA的輸出作為另一個DA的參考電壓,當參考電壓變化了,那麼最終輸出的DA幅度也就變化了。
另外可變固定增益一般用運放做些特定放大倍數的,比如2倍,5倍,10倍等等,然後串聯起來,把不用的倍數用繼電器短接起來,就可以實現一些比如 1,2,5,10,20,50,100這些倍數關系