資源簡介
本設計為基于51單片機的直流電機PID指定轉速控制,利用4x4矩陣鍵盤對電機的轉速進行設定,并可以根據電機的反饋脈沖顯示電機的實時轉速,利用PID調節對實時速度進行調整,最終達到設定的目標速度。
壓縮包內含keil程序(詳細注釋)、proteus7.1和8.6兩個版本的仿真文件以及使用方法。
代碼片段和文件信息
/*PID的參數設置可以參照以下來進行:
??參數整定找最佳,從小到大順序查;
??先是比例后積分,最后再把微分加;
??曲線振蕩很頻繁,比例度盤要放大;
??曲線漂浮繞大灣,比例度盤往小扳;
??曲線偏離回復慢,積分時間往下降;
??曲線波動周期長,積分時間再加長;
??曲線振蕩頻率快,先把微分降下來;
??動差大來波動慢。微分時間應加長;
??理想曲線兩個波,前高后低4比1 ;
??一看二調多分析,調節質量不會低;
*/
#include?
#include?
#define?uchar?unsigned?char?
#define?uint?unsigned?int
sbit?RS?=?P2^5;??//LCD1602數據命令選擇端口?
sbit?RW?=?P2^6;??//LCD1602讀寫選擇端口
sbit?EN?=?P2^7;??//LCD1602使能端口
sbit?IN2=P3^3;???//L298輸入端2
sbit?IN1=P3^4;???//L298輸入端1
sbit?PWM_FC=P3^5;//L298使能端口
uchar?aa[]={‘T‘‘a‘‘r‘‘g‘‘e‘‘t‘‘?‘‘?‘‘?‘‘?‘‘?‘‘r‘‘/‘‘m‘‘i‘‘n‘};//目標轉速:Target??r/min
uchar?cc[]={‘A‘‘c‘‘t‘‘u‘‘a‘‘l‘‘?‘‘?‘‘?‘‘?‘‘?‘‘r‘‘/‘‘m‘‘i‘‘n‘};//實測轉速:?Actual??r/min
uchar?displayflag;??//顯示標志位變量
uint?SetSpeed=500;??//聲明設定速度變量
uint?ActualSpeed=0;?//聲明實際速度變量
int?e?e1?e2?;?????//聲明當前偏差值變量、之后偏差值變量、再后偏差值變量
int?out=0;??????????//PID調節后輸出偏差值變量
uint?cnt=0;?????????//定時器1中斷次數變量
uint?Inpluse=0;?????//聲明脈沖計數變量、
uint?PWMTime=100;???//聲明脈沖寬度時間變量
float?uk?uk1?duk?;//聲明目前總偏差值變量、之后偏差值總變量、偏差值總變量
float?Kp=0.36Ki=0.05Kd=0.016;//pid控制系數p=0.36,i=0.05,d=0.016。
uchar?countsign1;
uchar?key;
??void?DelayUs2x(unsigned?char?t)
??{?????
???while(--t);
??}
??void?DelayMs(unsigned?int?t)
??{
???while(t--)
???{
????DelayUs2x(245);
????DelayUs2x(245);
???}
??}
?uchar?key_scan?(void)
?{
uchar?temptemp2;
uchar?num;
P1?=?0xf0;//讓P1輸出0xf0
temp?=?P1;//讀入P1的值
if?(temp?!=?0xf0)?//當P1讀入的值不等于0xf0
{
DelayMs(5);//延遲5ms
temp?=?P1;//再讀入P1口的值
if?(temp?!=?0xf0)//如果P1讀入的值不等于
{ ?//0xf0,就說明有按鍵按下
temp2?=?temp;//保留P1讀入值得高四位 ?
P1?=?0x0f;//再讓P1口輸出0x0f
DelayMs(5);
temp?=?P1;//再讀入P1口的值
temp2?|=?temp;//保留此讀入值的低四位
}
}
switch(temp2)
{
case?0xee:?num?=?0;break;
case?0xde:?num?=?1;break;
case?0xbe:?num?=?2;break;
case?0x7e:?num?=?3;break;
case?0xed:?num?=?4;break;
case?0xdd:?num?=?5;break;
case?0xbd:?num?=?6;break;
case?0x7d:?num?=?7;break;
case?0xeb:?num?=?8;break;
case?0xdb:?num?=?9;break;
case?0xbb:?num?=?10;break;
case?0x7b:?num?=?11;break;
case?0xe7:?num?=?12;break;
case?0xd7:?num?=?13;break;
case?0xb7:?num?=?14;break;
case?0x77:?num?=?15;break;
default?:num=16;break;
}
return?num;
?}
??void?write_com(uchar?com)//寫命令
??{
???RS=0;
???RW=0;
???P0=com;
???DelayMs(5);
???EN=1;
???DelayMs(5);
???EN=0;
??}
??void?write_data(uchar?date)//寫一個字符
??{
???RS=1;
???RW=0;
???P0=date;
???DelayMs(5);
???EN=1;
???DelayMs(5);
???EN=0;
??}
??void?init()//初始化
??{
???write_com(0x38);
???write_com(0x0c);
???write_com(0x06);
???write_com(0x01);
??}
??void?LCD_Write_String(uchar?xuchar?yuchar?*s)//寫字符串?
??{?????
???if?(y?==?0)?
???{?????
????write_com(0x80?+?x);?????
???}
???else?
???{?????
????write_com(0xC0?+?x);?????
???}????????
???while?(*s)?
???{?????
?????write_data(?*s);?????
?????s++;?????
???}
??}
??void?PIDControl()????????????????????//pid偏差計算
??{
???e=SetSpee
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2020-07-15?15:40??直流電機轉速控制\
?????目錄???????????0??2020-07-15?15:41??直流電機轉速控制\仿真7版本\
?????文件????????6966??2020-07-15?13:47??直流電機轉速控制\仿真7版本\main.hex
?????文件?????????792??2020-07-15?15:41??直流電機轉速控制\仿真7版本\無刷直流電機轉速控制.PWI
?????文件??????114431??2020-07-15?15:39??直流電機轉速控制\仿真7版本\直流電機轉速控制.DSN
?????目錄???????????0??2020-07-15?15:40??直流電機轉速控制\仿真8.6版本\
?????文件????????6966??2020-07-15?13:47??直流電機轉速控制\仿真8.6版本\main.hex
?????文件???????23738??2020-07-15?12:34??直流電機轉速控制\仿真8.6版本\直流電機轉速控制.pdsprj
?????文件?????????631??2020-07-15?15:40??直流電機轉速控制\先看我.txt
?????目錄???????????0??2020-07-15?13:47??直流電機轉速控制\程序\
?????文件???????14983??2020-07-15?13:47??直流電機轉速控制\程序\main
?????文件?????????957??2020-07-15?13:47??直流電機轉速控制\程序\main.build_log.htm
?????文件????????7874??2020-07-15?13:47??直流電機轉速控制\程序\main.c
?????文件????????6966??2020-07-15?13:47??直流電機轉速控制\程序\main.hex
?????文件??????????25??2020-07-15?13:47??直流電機轉速控制\程序\main.lnp
?????文件???????13331??2020-07-15?13:47??直流電機轉速控制\程序\main.LST
?????文件???????19824??2020-07-15?13:47??直流電機轉速控制\程序\main.M51
?????文件???????17311??2020-07-15?13:47??直流電機轉速控制\程序\main.OBJ
?????文件?????????256??2020-06-21?21:57??直流電機轉速控制\程序\main.plg
?????文件???????70950??2020-07-14?23:02??直流電機轉速控制\程序\main.uvgui.Administrator
?????文件???????91018??2020-07-15?13:47??直流電機轉速控制\程序\main.uvgui.世興哥哥
?????文件????????5025??2020-07-15?00:22??直流電機轉速控制\程序\main.uvopt
?????文件???????14246??2020-07-14?23:16??直流電機轉速控制\程序\main.uvproj
?????文件???????54873??2020-06-16?00:07??直流電機轉速控制\程序\main_uvopt.bak
?????文件???????13558??2020-05-10?22:42??直流電機轉速控制\程序\main_uvproj.bak
評論
共有 條評論