1. 怎麼用單片機控制伺服放大器來控制伺服電機
伺服控制一般單片機給脈沖信號,伺服接受的控制信號一般簡單控制如下:
S_ON:伺服ON,使能信號
Pulse+:正轉 或Pulse:脈沖
Pulse-:反轉 dir 方向
以上三個控制信號就可以控制伺服電機了。
2. 如何用單片機控制直流電機
通過與單片機相連的按鍵控制直流電機停啟的電路如下圖所示,通過P3.6口按鍵觸發啟動直流電機,P3.7口的按鍵觸發停止直流電機的運行。由圖可知,當P1.0輸出高電平「1」時,NPN型三極體導通,直流電機得電轉動;當P1.0輸出低電平「0」時,NPN型三極體截止,直流電機停止轉動。
通過單片機產生PWM波控制直流電機程序
#include"reg52.h"
#defineucharunsignedchar
#defineuintunsignedint
ucharcodetable[10]={0x3f,0x06,0x5b,
0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰數碼管顯示碼(0-9)
sbitxiaoshudian=P0^7;
sbitwei1=P2^4;//數碼管位選定義
sbitwei2=P2^5;
sbitwei3=P2^6;
sbitwei4=P2^7;
sbitbeep=P2^3;//蜂鳴器控制端
sbitmotor=P1^0;//電機控制
sbits1_jiasu=P1^4;//加速按鍵
sbits2_jiansu=P1^5;//減速按鍵
sbits3_jiting=P1^6;//停止/開始按鍵
uintpulse_count;//INT0接收到的脈沖數
uintnum=0;//num相當於占空比調節的精度
ucharspeed[3];//四位速度值存儲
floatbianhuasu;//當前速度(理論計算值)
floatreallyspeed;//實際測得的速度
floatvv_min=0.0;vv_max=250.0;
floatvi_Ref=60.0;//給定值
floatvi_PreError,vi_PreDerror;
uintpwm=100;//相當於占空比標志變數
intsample_time=0;//采樣標志
floatv_kp=1.2,v_ki=0.6,v_kd=0.2;//比例,積分,微分常數
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=20;y>0;y--);
}
voidtime_init()
{
ET1=1;//允許定時器T1中斷
ET0=1;//允許定時器T0中斷
TMOD=0x15;//定時器0計數,模式1;定時器1定時,模式1
TH1=(65536-100)/256;//定時器1值,負責PID中斷,0.1ms定時
TL1=(65536-100)%6;
TR0=1;//開定時器
TR1=1;
IP=0X08;//定時器1為高優級
EA=1;//開總中斷
}
voidkeyscan()
{
floatj;
if(s1_jiasu==0)//加速
{
delay(20);
if(s1_jiasu==0)
vi_Ref+=10;
j=vi_Ref;
}
while(s1_jiasu==0);
if(s2_jiansu==0)//減速
{
delay(20);
if(s2_jiansu==0)
vi_Ref-=10;
j=vi_Ref;
}
while(s2_jiansu==0);
if(s3_jiting==0)
{
delay(20);
motor=0;
P1=0X00;
P3=0X00;
P0=0x00;
}
while(s3_jiting==0);
}
floatv_PIDCalc(floatvi_Ref,floatvi_SpeedBack)
{
registerfloaterror1,d_error,dd_error;
error1=vi_Ref-vi_SpeedBack;//偏差的計算
d_error=error1-vi_PreError;//誤差的偏差
dd_error=d_error-vi_PreDerror;//誤差變化率
vi_PreError=error1;//存儲當前偏差
vi_PreDerror=d_error;
bianhuasu=(v_kp*d_error+v_ki*vi_PreError+v_kd*dd_error);
return(bianhuasu);
}
voidv_Display()
{
uintsu;
su=(int)(reallyspeed*10);//乘以10之後強制轉化成整型
speed[3]=su/1000;//百位
speed[2]=(su00)/100;//十位
speed[1]=(su0)/10;//個位
speed[0]=su;//小數點後一位
wei1=0;//第一位打開
P0=table[speed[3]];
delay(5);
wei1=1;//第一位關閉
wei2=0;
P0=table[speed[2]];
delay(5);
wei2=1;
wei3=0;
P0=table[speed[1]];
xiaoshudian=1;
delay(5);
wei3=1;
wei4=0;
P0=table[speed[0]];
delay(5);
wei4=1;
}
voidBEEP()
{
if((reallyspeed)>=vi_Ref+5||(reallyspeed
{
beep=~beep;
delay(4);
}
}
voidmain()
{
time_init();
motor=0;
while(1)
{
v_Display();
BEEP();
}
if(s3_jiting==0)//對按鍵3進行掃描,增強急停效果
{
delay(20);
motor=0;
P1=0X00;
P3=0X00;
P0=0x00;
}
while(s3_jiting==0);
}
voidtimer0()interrupt1
{
}
voidtimer1()interrupt3
{
TH1=(65536-100)/256;//1ms定時
TL1=(65536-100)%6;
sample_time++;
if(sample_time==5000)//采樣時間0.1ms*5000=0.5s
{
TR0=0;//關閉定時器0
sample_time=0;
pulse_count=TH0*255+TL0;//保存當前脈沖數
keyscan();//掃描按鍵
reallyspeed=pulse_count/(4*0.6);//計算速度
pwm=pwm+v_PIDCalc(vi_Ref,reallyspeed);
if(pwm
if(pwm>100)pwm=100;
TH0=TL0=0;
TR0=1;//開啟定時器0
}
num++;
if(num==pwm)//此處的num值,就是占空比
{
motor=0;
}
if(num==100)//100相當於占空比調節的精度
{
num=0;
motor=1;
}
}
3. 單片機和pwm和PLC的大致用途是什麼
【1】單片機可以開發成單片機應用系統,應用極為廣泛,許多工業控制設備都有它的蹤影。單片機甚至可以實現低廉的PLC。與PLC不同的是,外圍電路設計靈活且必要,編程採用匯編或C,價格相當便宜。
【2】PLC——Programmable
Logic
Controller。更實用的工業控制器,有足夠的擴展板方便直連電氣設備。編程採用梯形圖等。價格相當相當貴。
【3】PWM——Pulse
Width
Molation。脈寬調制。與前兩者風馬牛,屬於一種應用技術,而非設備。單片機可以產生此控制波形,PLC也可。用於占空比調制輸出。如開關電源開關管控制。類似應用可見與電機調速、調光燈等。
4. 單片機語句P1= ~ pulse;怎麼解釋
'~'是個位運算符,意思是對變數取反,
那麼你的那個意思就是 對pulse取反,然後將其值賦給P1管腳
5. 單片機輸出的電平多少
單片機輸出的高電平和低電平
在單片機的應用中,輸出高低電平是我們經常需要處理的一項任務。通過控制輸出電平的高低來驅動外部器件,實現各種功能。那麼單片機輸出的電平到底有多少呢?
高電平和低電平的定義
首先,我們需要明確高電平和低電平的定義。在單片機的輸入輸出口中,我們通常定義高電平的電壓為5V左右,而低電平的電壓則為0V左右。這兩種電平的中間值則為臨界點。當單片機輸出高於臨界點的電壓時,我們通常稱之為高電平;當單片機輸出低於臨界點的電壓時,則對應為低電平。
高低電平的控制
單片機輸出的高低電平需要通過程序控制,一般使用GPIO(General Purpose Input Output)口實現。在單片機的程序中,我們可以通過編寫輸出高低電平的代碼來實現對GPIO口的控制。以Arino為例,以下是一段控制輸出高低電平的示範代碼:
void setup()
{
pinMode(13, OUTPUT); //定義13號口為輸出口
}
void loop()
{
digitalWrite(13, HIGH); //輸凳帶出高電平
delay(1000); //延遲1秒
digitalWrite(13, LOW); //輸出低電平
delay(1000); //延遲1秒
}
在這段代碼中,我們首先定義了13號口為輸出口,然後在loop循環中,先輸出高電平,延遲一秒鍾,再輸出低電平,也延遲一秒鍾,以此反復循環。
高低電平的應用
單片機輸出的高低電平具有廣泛的應用場棗悔蘆景。比如,當單片機需要驅動LED燈時,我們需要輸出高電平來點亮LED燈;當需要驅動電機轉動時,在單片機輸出低電平的同時,還需要結合PWM(Pulse Width Molation)控制電機的轉速和方向。
此外,單片機的高低電平還可以用於模擬輸入輸出,比如模擬音頻信號的輸入輸出,模擬各種感測器數據的輸入輸出等等。
總結
單片機輸出的電平,無論是高電平還是低電平,都是我們常常需要處理的問題。通過程序對GPIO口的控制,我們可以實現單片機輸出電平的控制,從而驅動各種各樣的外部器件,實現各種各樣的功能。知道了單片機輸出電平的基本原理和應用,我們才能更好地理解單片機的工作前羨原理,也更能靈活地應用單片機技術。