payfsl
級(jí)別: 工控俠客
![]() |
圖片:
![]() 鋼管折彎設(shè)備: 客戶(hù)對(duì)弧度要求比較高,人工手動(dòng)調(diào)整不能滿(mǎn)足要求,想用傳感器實(shí)時(shí)檢測(cè)弧度,通過(guò)PID運(yùn)算驅(qū)動(dòng)伺服電機(jī)帶動(dòng)活動(dòng)輪進(jìn)行自動(dòng)調(diào)整。不知道這樣的方案可不可行,各位大神有沒(méi)有更好的方案? 另外具體寫(xiě)程序也還是迷迷糊糊,以前寫(xiě)過(guò)溫度的PID,還沒(méi)有寫(xiě)過(guò)運(yùn)動(dòng)控制的PID,也希望大神能賜教。 因?yàn)殇摴苡蟹磸棧⑶曳磸椀牧坎还潭,所以才引入檢測(cè)和PID運(yùn)算進(jìn)行動(dòng)態(tài)補(bǔ)償 [ 此帖被payfsl在2022-04-25 20:11重新編輯 ] |
|
---|---|---|
|
payfsl
級(jí)別: 工控俠客
![]() |
就是因?yàn)橛蟹磸,并且反彈的量不固定,所以才引入檢測(cè)和PID運(yùn)算 |
|
---|---|---|
|
payfsl
級(jí)別: 工控俠客
![]() |
等大神解惑 |
|
---|---|---|
|
payfsl
級(jí)別: 工控俠客
![]() |
就是因?yàn)橥慌鷣?lái)料一致性不好,沒(méi)有辦法建立數(shù)據(jù)庫(kù),所以想要?jiǎng)討B(tài)補(bǔ)償,國(guó)內(nèi)的材料供應(yīng)商沒(méi)法解決,韓國(guó)進(jìn)口的一致性比較好,但是價(jià)格太高, |
|
---|---|---|
|
payfsl
級(jí)別: 工控俠客
![]() |
現(xiàn)在的企業(yè)不容易,已經(jīng)用不起高價(jià)的材料了,所以要靠技術(shù)來(lái)降本,正好也能體現(xiàn)工控人的價(jià)值,不然誰(shuí)找你?不過(guò)我只想在這里討論純技術(shù)的事情,不想討論別的 |
|
---|---|---|
|
payfsl
級(jí)別: 工控俠客
![]() |
傳感器還是有辦法的,現(xiàn)在設(shè)想用3點(diǎn)位移傳感器檢測(cè),計(jì)算弧度,不過(guò)還沒(méi)有實(shí)際實(shí)驗(yàn)過(guò) |
|
---|---|---|
|
payfsl
級(jí)別: 工控俠客
![]() |
你說(shuō)得對(duì)的,或者叫彎管設(shè)備可能更加合理;現(xiàn)在就是一次加工以后用檢具檢測(cè),不合格的進(jìn)行2次加工,費(fèi)時(shí)費(fèi)力,生產(chǎn)效力低,公司要提升,所以把它作為公司提升技改的一個(gè)項(xiàng)目 |
|
---|---|---|
|
payfsl
級(jí)別: 工控俠客
![]() |
實(shí)際設(shè)備有11個(gè)輪子,圖只是說(shuō)明原理 |
|
---|---|---|
|
payfsl
級(jí)別: 工控俠客
![]() |
首先感謝你的回復(fù)!電控確實(shí)有難度,但是機(jī)械已經(jīng)黔驢技窮了,少說(shuō)也已經(jīng)努力了5年,做過(guò)很多方法,比如沖壓折彎,滾彎,拉彎,熱彎,冷彎,等等已經(jīng)說(shuō)不盡了,現(xiàn)在是想在電控上面做一下配合 |
|
---|---|---|
|
payfsl
級(jí)別: 工控俠客
![]() |
(1)位置式PID OUT= Kp *Ek+(((Kp*T)/Ti)+((Kp*Td)/T)*(Ek-Ek-1))+OUT0 (2)增量式PID △OUT=OUTk-OUTk-1= Kp (Ek-Ek-1)+((Kp*T)/Ti) Ek+((Kp*Td)/T)*(Ek-2*Ek1+Ek-2) Ek: 本次的偏差 Ek-1: 上次的偏差 Ek-2: 上上次的偏差 Kp:算法增益調(diào)節(jié) Ti: 積分時(shí)間 Td: 微分時(shí)間常數(shù) |
|
---|---|---|
|
payfsl
級(jí)別: 工控俠客
![]() |
PID程序: pid.cpp #ifndef _PID_SOURCE_ #define _PID_SOURCE_ #include <iostream> #include <cmath> #include "pid.h" using namespace std; class PIDImpl { public: PIDImpl( double dt, double max, double min, double Kp, double Kd, double Ki ); ~PIDImpl(); double calculate( double setpoint, double pv ); private: double _dt; double _max; double _min; double _Kp; double _Kd; double _Ki; double _pre_error; double _integral; }; PID::PID( double dt, double max, double min, double Kp, double Kd, double Ki ) { pimpl = new PIDImpl(dt,max,min,Kp,Kd,Ki); } double PID::calculate( double setpoint, double pv ) { return pimpl->calculate(setpoint,pv); } PID::~PID() { delete pimpl; } /** * Implementation */ PIDImpl::PIDImpl( double dt, double max, double min, double Kp, double Kd, double Ki ) : _dt(dt), _max(max), _min(min), _Kp(Kp), _Kd(Kd), _Ki(Ki), _pre_error(0), _integral(0) { } double PIDImpl::calculate( double setpoint, double pv ) { // Calculate error double error = setpoint - pv; // Proportional term double Pout = _Kp * error; // Integral term _integral += error * _dt; double Iout = _Ki * _integral; // Derivative term double derivative = (error - _pre_error) / _dt; double Dout = _Kd * derivative; // Calculate total output double output = Pout + Iout + Dout; // Restrict to max/min if( output > _max ) output = _max; else if( output < _min ) output = _min; // Save error to previous error _pre_error = error; return output; } PIDImpl::~PIDImpl() { } #endif [ 此帖被payfsl在2022-05-12 07:49重新編輯 ] |
|
---|---|---|
本帖最近評(píng)分記錄:
|