导航:首页 > 操作系统 > 单片机怎么看微积分

单片机怎么看微积分

发布时间: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引脚电平有一个由低到高的变化,即积分电路的输出与输入是积分关系(输出电平由低到高变化)。

就说这一个例子吧,其它的同理。微积分电路的意思是根据电路算出的等式关系是数学上的微积分关系,所以才叫微分、积分电路吧。

上述纯属个人愚见,难免有误,还望不吝赐教。

阅读全文

与单片机怎么看微积分相关的资料

热点内容
租房管理平台源码 浏览:65
复乐园pdf 浏览:455
程序员找到公交车 浏览:695
婴儿宝宝操有什么APP推荐 浏览:71
如何将数据库附加到服务器上 浏览:391
php退出循环 浏览:479
梦幻西游怎么修改服务器人数上限 浏览:330
自动开启命令 浏览:845
查询云服务器访问的ip 浏览:836
智能app的弱点是什么 浏览:410
php实现的n 浏览:544
Python写出特效 浏览:976
加密的zip压缩包修复 浏览:415
安卓系统源码如何混淆 浏览:291
题库算法 浏览:476
临沂压缩机生产厂家 浏览:942
cad旋转角度命令 浏览:389
阿里云是用什么牌子服务器 浏览:670
java基础入门百度云 浏览:979
360压缩咋加密 浏览:354