導航:首頁 > 操作系統 > 單片機怎麼看微積分

單片機怎麼看微積分

發布時間:2024-07-20 08:26:18

① 只用單片機單獨一個晶元能進行積分,微分等復雜運算嗎不能的話怎麼辦

單片機當然可以進行積分/微分運算,關鍵還是看你的速度要求

② 不太懂微積分,怎麼做單片機PID啊,如果要學重點學那一部分

不用懂微積分,僅僅是一個PID算式而已,現在還有點印象

Pout = Pp*delta + Pi * (所有delta的和)+Pd*(delta1-delta2)

delta:給定和測量值之差

就是那個三角號,你要控制到的目標值和當前測量值只差,然後你就調P,I,D三個參數就可以了

你到網上隨便找一個單片機的PID程序,我給你注釋一下

int delta_PID(PID *pp, int next_point)//增量法
{
int error;

error = pp->set_point - next_point;

pp->ek[2] = pp->ek[1];
pp->ek[1] = pp->ek[0];
pp->ek[0] = error;

return (KP*pp->ek[0] - KI*pp->ek[1] + KD*pp->ek[2]);
}
void PIDproc(PID *pp, int next_point) //帶死區控制以及抗積分飽和的PID
{
uint tmp[3] = {0, 0, 0};
uint PosSum = 0;
uint NegSum = 0;
uchar gain = 1;

if(pp->set_point > next_point){
tmp[0] = pp->set_point - next_point;//ek0
if(tmp[0] > pp->B){
pp->ek[2] = pp->ek[1];
pp->ek[1] = pp->ek[0];
pp->ek[0] = tmp[0];

pp->ek_flag[2] = pp->ek_flag[1];
pp->ek_flag[1] = pp->ek_flag[0];
pp->ek_flag[0] = 0; //當前EK為正數
tmp[0] = KP * pp->ek[0] / dKP + KI * pp->ek[0] / dKI + KD * pp->ek[0] / dKD; // KP*EK0
tmp[1] = KP * pp->ek[1] / dKP + 2 * KD * pp->ek[1] / dKD; // KI*EK1
tmp[2] = KD * pp->ek[2] / dKD; // KD*EK2
}
}
else{ //反饋大於給定
tmp[0] = next_point - pp->set_point;//ek0
if(tmp[0] > pp->B){
//數值移位
pp->ek[2] = pp->ek[1];
pp->ek[1] = pp->ek[0];
pp->ek[0] = tmp[0];
//符號移位
pp->ek_flag[2] = pp->ek_flag[1];
pp->ek_flag[1] = pp->ek_flag[0];
pp->ek_flag[0] = 1; //當前EK為負數
tmp[0] = KP * pp->ek[0] / dKP + KI * pp->ek[0] / dKI + KD * pp->ek[0] / dKD; // KP*EK0
tmp[1] = KP * pp->ek[1] / dKP + 2 * KD * pp->ek[1] / dKD; // KI*EK1
tmp[2] = KD * pp->ek[2] / dKD; // KD*EK2
}
}
/*以下部分代碼是講所有的正數項疊加,負數項疊加*/
if(pp->ek_flag[0]==0){
PosSum += tmp[0]; //正數和
}
else{
NegSum += tmp[0]; //負數和
} // KP*EK0
if(pp->ek_flag[1]!=0){
PosSum += tmp[1]; //正數和
}
else{
NegSum += tmp[1]; //負數和
} // - kI * EK1
if(pp->ek_flag[2]==0){
PosSum += tmp[2]; //正數和
}
else{
NegSum += tmp[2]; //負數和
} // KD * EK2
PosSum += pp->uk; //

if(PosSum > NegSum){ // 是否控制量為正數
tmp[0] = PosSum - NegSum;
tmp[0] *= gain;
if( tmp[0] < (uint)65000){ //小於限幅值則為計算值輸出
pp->uk = tmp[0];
}
else{
pp->uk = (uint)65000; //否則為限幅值輸出
}
}
else{ //控制量輸出為負數,則輸出0
pp->uk = 0;
}
}
void PID_init(PID* pp)
{
pp->set_point = OBJ;

pp->B = 0;

pp->ek[0] = 0;
pp->ek[1] = 0;
pp->ek[2] = 0;

pp->ek_flag[0] = 0;
pp->ek_flag[1] = 0;
pp->ek_flag[2] = 0;

pp->uk = 0;
}
我以前用過的程序

③ 求51單片機實驗設備儀器DP-51PROC的實驗指導書

51單片機實驗設備儀器DP-51PROC的實驗指導書
談談單片機實驗指導方法
http://ckrd.cnki.net/grid20/detail.aspx?filename=SYSY199202006&dbname=CJFD1992

http://search.cnki.net/search.aspx?q=%E5%8D%95%E7%89%87%E6%9C%BA%E5%AE%9E%E9%AA%8C%E8%AE%BE%E5%A4%87%E4%BB%AA%E5%99%A8%E7%9A%84%E5%AE%9E%E9%AA%8C%E6%8C%87%E5%AF%BC%E4%B9%A6

④ 51單片機「上電/按鍵復位電路」的原理及其電容C的作用

我認為說法1正確:51單片機是高電平復位,所以先看給單片機加5V電源(上電)啟動時的情況:這時電容充電相當於短路,你可以認為RST上的電壓就是VCC,這是單片機就是復位狀態。隨著時間推移電容兩端電壓升高,即造成RST上的電壓降低,當低至閾值電壓時,即完成復位過程。

如果按下SW,的確就是按鈕把C短路了,這時電容放電,兩端電壓都是VCC,即RST引腳電壓為VCC,如果超過規定的復位時間,單片機就復位了。當按鈕彈起後,RST引腳的電壓為0,單片機處於運行狀態。

51單片機復位要求是:RST上加高電平時間大於2個機器周期,你用的12MHz晶振,所以一個機器周期就是1us,要復位就加2us的高電平即可。

圖中的RC常數是51K×1uF=51ms,即51毫秒,這個常數足夠大了。

⑤ stm32單片機能運算微積分嗎,運算微積分的能力怎麼樣,大概需要多長時間運算一次,在此謝過。。。

關鍵問題不是MCU而是你能不能用C語言編出合理相應函數的演算法,如果能 51單片機也能實現

⑥ 微積分能不能應用在電子方面

可以,微積分在電子可以說成微分電路和積分電路(我好像在說廢話)。微分電路,顧名思義,就是輸出與輸入是微分關系,如單片機復位電路,見下圖。

上電時,單片機復位,RST引腳需要有高電平。一段時間後(很短)復位完成,RST引腳需要有低電平,此後,單片機可正常工作。微分電路正好可以滿足需求,此電路中,RST引腳會有一個從高到低的變化,即微分電路的輸出與輸入是微分關系(輸出電平由高到低變化)。

有些單片機是低電平復位,此時需要上電時,RST引腳有低電平,一段時間後(很短)復位完成,RST引腳需要有高電平,這樣單片機才能正常工作。積分電路可滿足需求(將上圖電阻電容換位置),保證RST引腳電平有一個由低到高的變化,即積分電路的輸出與輸入是積分關系(輸出電平由低到高變化)。

就說這一個例子吧,其它的同理。微積分電路的意思是根據電路算出的等式關系是數學上的微積分關系,所以才叫微分、積分電路吧。

上述純屬個人愚見,難免有誤,還望不吝賜教。

閱讀全文

與單片機怎麼看微積分相關的資料

熱點內容
php發布站程序 瀏覽:204
源碼編譯ntfs內核模塊 瀏覽:120
r11s手機管家沒有加密 瀏覽:781
怎麼看電腦連接哪個伺服器 瀏覽:191
二手伺服器設備欺詐如何解決 瀏覽:877
單片機伺服器安裝win10 瀏覽:658
胸椎壓縮性骨折傷殘 瀏覽:954
mt怎麼解壓文件 瀏覽:41
達芬奇項目伺服器有什麼用 瀏覽:854
自製怎麼捏都可以復原的解壓球 瀏覽:615
qq軟體管理怎麼加密 瀏覽:740
手機使用代碼編程器 瀏覽:939
單片機四位99秒錶製作流程圖 瀏覽:617
壓縮包軟體如何安裝 瀏覽:767
我的世界伺服器1122地址 瀏覽:5
蘋果如何與安卓系統連接伺服器 瀏覽:934
農業銀行app學生繳費怎麼切換 瀏覽:470
福建在哪個app上有安康碼 瀏覽:547
用友商貿寶t1登錄找不到加密狗 瀏覽:557
區間測速演算法不正確 瀏覽:333