|
QQ截圖20170618115146.png (15.69 KB, 下載次數(shù): 61)
下載附件
碼盤測速電機(jī) 測速碼盤 編碼器 370 直流電機(jī) 光電編碼器 334線
2017-6-18 11:52 上傳
0.png (53.44 KB, 下載次數(shù): 82)
下載附件
2017-6-18 16:55 上傳
全部資料下載地址:
直流馬達(dá)pid調(diào)速液晶顯示.zip
(68.64 KB, 下載次數(shù): 81)
2017-6-18 11:59 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
單片機(jī)源程序:
- #include "12864Serial.h"
- #include "PWM.h"
- uint data h_count=0,freq10=0,Speed=0,Speed1=0; //h_count高頻脈沖個數(shù) (高)
- uint data num1=0,num2=0,num3=0,num4=0;
- //float data p=4.0,i=0.9,d=1.0;
- float xdata p=3.0,i=20,d=3.0; //P:3 I:20 D:3
- static data ErrorNum=0.0,en=0.0,en1=0.0,en2=0.0;
- static int data output=0;
- float data pwm;
- uint temp40,temp50,temp60;
-
- bit Flag=0;
- uint data config=5,error=0,input=0,adjust=20;
- long int data duty=50;
- uint data TempConfig=0; //定義暫時的一個轉(zhuǎn)速,P、I、D參數(shù)
- float xdata TempP=0,TempI=0,TempD=0; //在退出參數(shù)調(diào)整界面時將這些暫時的數(shù)據(jù)賦給真實的值
- uchar xdata ConfigTable[3]=0; //設(shè)定參數(shù)數(shù)組
- uchar xdata ErrorTable[3]=0; //誤差參數(shù)數(shù)組
- uchar xdata SpeedTable[6]=0; //速度參數(shù)數(shù)組
- uchar xdata InputTable[3]=0; //輸入?yún)?shù)數(shù)組
- uchar xdata DutyTable[4]=0; //占空比參數(shù)數(shù)組
- uchar xdata AdjustTable[3]=0; //調(diào)整參數(shù)數(shù)組
- uchar xdata PTable[3]=0; //P參數(shù)數(shù)組
- uchar xdata ITable[3]=0; //I參數(shù)數(shù)組
- uchar xdata DTable[3]=0; //D參數(shù)數(shù)組
- uchar xdata PTable1[3]=0;
- uchar xdata ITable1[4]=0;
- uchar xdata DTable1[3]=0;
- //定義控制板的按鍵值
- sbit SW1= P3^1;
- sbit SW= P3^4;
- sbit K2= P3^5;
- sbit K3= P3^6;
- sbit K4= P3^7;
- sbit D0 = P1^0;
- sbit D1 = P1^1;
- sbit D2 = P1^2;
- sbit D3 = P1^3;
- sbit D4 = P1^4;
- sbit D5 = P1^5;
- sbit D6 = P1^6;
- sbit D7 = P1^7;
- unsigned char KeyScan(void);
- void delay(unsigned int ms)
- {
- unsigned int De_Cnt;
- while( (ms--) != 0)
- {
- for(De_Cnt = 0; De_Cnt < 950; De_Cnt++);
- }
- }
- //****************************************************
- //****************高頻測量定時計數(shù)器初始化*********** 高頻的測量方法較準(zhǔn)確
- void init_port()
- {
- TMOD=0x11; //T1計時工作方式1
- IT0=1; //INT0下降沿觸發(fā)
- IT1=1; //INT1下降沿觸發(fā)
- EX1=1; //外部中斷1打開
- TH1=0xb1;
- TL1=0xe0; //定時初值的計算:50ms*20=1s
- EA=1; //全局中斷允許
- ET1=1; //T1中斷允許
- TH0=0; //清零
- TL0=0; //清零
-
- ET0=1; //定時器0中斷允許
- TR0=0; //關(guān)T0中斷
- TR1=0; //關(guān)T1中斷
- }
- //******************高頻率測量*****************
- void hight_frequency()
- {
- h_count=0; //脈沖計數(shù)初值為0,
- EX0=1; //INT0中斷允許,開始計數(shù)
- TR1=1; //啟動定時器1
- while(EX0); //等待INT0中斷關(guān)閉
- TR1=0; //關(guān)T1中斷
- h_count=(h_count-1)*50; //得實際頻率
- Speed=h_count/334; //此處采用200線編碼器
- if((Speed>300)||(Speed<0))
- Speed=0;
-
- SpeedTable[0]=0x30+(Speed/100); //百位
- SpeedTable[1]=0x30+(Speed%100/10); //十位
- SpeedTable[2]=0x30+(Speed%10); //個位
- SpeedTable[3]=0x20;
-
- }
- void display()
- {
- //顯示設(shè)定的速度值
- ConfigTable[0]=(0x30+(config/100));
- ConfigTable[1]=(0x30+(config%100/10));
- ConfigTable[2]=(0x30+(config%10));
-
- LCD_Write_String(0,0,"Set Sp");
- LCD_Write_Com(0x80+3);
- LCD_Write_Data(':');
- LCD_Write_Data(ConfigTable[0]);
- LCD_Write_Data(ConfigTable[1]);
- LCD_Write_Data(ConfigTable[2]);
- //顯示實際測得的速度
- LCD_Write_Com(0x80+10);
- LCD_Write_Data(':');
- LCD_Write_Data(SpeedTable[0]);
- LCD_Write_Data(SpeedTable[1]);
- LCD_Write_Data(SpeedTable[2]);
-
- LCD_Write_String(0,1,"Err Da");
- //顯示設(shè)定值與實測值的誤差
- if(config>Speed)
- {
- error=config-Speed;
- ErrorTable[0]=(0x30+(error/100));
- ErrorTable[1]=(0x30+(error%100/10));
- ErrorTable[2]=(0x30+(error%10));
- LCD_Write_Com(0xC0+3);
- LCD_Write_Data(':');
- LCD_Write_Data('-');
- LCD_Write_Data(ErrorTable[0]);
- LCD_Write_Data(ErrorTable[1]);
- LCD_Write_Data(ErrorTable[2]);
- }
- else if((Speed>config)||(Speed==config))
- {
- error=Speed-config;
- ErrorTable[0]=(0x30+(error/100));
- ErrorTable[1]=(0x30+(error%100/10));
- ErrorTable[2]=(0x30+(error%10));
- LCD_Write_Com(0xC0+3);
- LCD_Write_Data(':');
- LCD_Write_Data('+');
- LCD_Write_Data(ErrorTable[0]);
- LCD_Write_Data(ErrorTable[1]);
- LCD_Write_Data(ErrorTable[2]);
- }
- //顯示調(diào)整參數(shù)數(shù)據(jù)
- if((Speed>Speed1)||(Speed==Speed1))
- {
- adjust=Speed-Speed1;
- AdjustTable[0]=(0x30+(adjust/100));
- AdjustTable[1]=(0x30+(adjust%100/10));
- AdjustTable[2]=(0x30+(adjust%10));
- LCD_Write_Com(0xC0+11);
- LCD_Write_Data(':');
- LCD_Write_Data('+');
- LCD_Write_Data(AdjustTable[0]);
- LCD_Write_Data(AdjustTable[1]);
- LCD_Write_Data(AdjustTable[2]);
- }
- else if(Speed1>Speed)
- {
- adjust=Speed1-Speed;
- AdjustTable[0]=(0x30+(error/100));
- AdjustTable[1]=(0x30+(error%100/10));
- AdjustTable[2]=(0x30+(error%10));
- LCD_Write_Com(0xC0+11);
- LCD_Write_Data(':');
- LCD_Write_Data('-');
- LCD_Write_Data(AdjustTable[0]);
- LCD_Write_Data(AdjustTable[1]);
- LCD_Write_Data(AdjustTable[2]);
- }
復(fù)制代碼
|
評分
-
查看全部評分
|