㈠ 怎麼用單片機控制無刷電機驅動器
單片機驅動無刷電機,首先需要知道無刷電機的工作原理,按線序和相位導通,從而實現轉動和正反轉。
解決了驅動程序的問題,還需要解決硬體問題。
單片機io口不能直接驅動無刷電機,需要使用MOS管組成的h橋,或者專用晶元。
㈡ 如何利用51系列單片機控制電機
小功率電機,玩具車上的,可用單片機接三極體來驅動。
㈢ 單片機是怎樣控制電機的
單片機只輸出信號,經過隔離電路,再經過功率開關電路驅動電機。
控制普通的三項非同步電機可以單片機輸出信號經三極體後驅動一個小功率繼電器,由繼電器來驅動交流接觸器,進而控制電機,也可以單片機信號經三極體放大後直接驅動功率繼電器。 方法有很多很多。至於驅動伺服,單片機埠的信號經過光耦隔離後可以直接驅動,伺服驅動器本身需要的驅動信號都是弱電信號。
單片機注意事項
一般在單片機的數據手冊(Datasheet)中都會提到該單片機需要的復位信號的要求。一般復位信號的寬度應為。復位電平的寬度和幅度都應滿足晶元的要求,並且要求保持穩定。還有特別重要的一點就是復位電平應與電源上電在同一時刻發生,即晶元一上電,復位信號就已產生。
不然,由於沒有經過復位,單片機中的寄存器的值為隨機值,上電時就會按PC寄存器中的隨機內容開始運行程序,這樣很容易進行誤操作或進入死機狀態。
㈣ 用單片機控制步進電機驅動器怎麼接線
公共正端------->單片機5V脈沖信號------->串個小電阻再接到單片機輸出脈沖引腳方向信號------->串個小電阻下接到單片機輸出方向引腳有上面3根線就可以控制步進電機的走動了,一上電時,電機是自動鎖定的,如果還需要控制步進電機鎖定和放開,那還要再接一根電機釋放信號,接法同脈沖信號
㈤ 51單片機通過伺服驅動器控制伺服電機
看你伺服電機的設置情況如何了,位置模式,信號可以是PULSE+PULSE或PULSE+DIR兩種模式,及雙脈沖或脈沖+方向。你只需要兩個控制IO口就可以了,PUL-及DIR-接GND。要想伺服電機運轉需要脈沖信號,伺服電機的速度是靠脈沖信號的頻率決定的。所以發電平是無法讓電機轉動的。
㈥ 哥,步進電機驅動器怎麼用單片機控制啊
步進電機驅動器一般接受的控制信號為:
1、cw+ccw,即正轉脈沖加反轉脈沖
2、pulse+dir,即脈沖加方向
一般驅動器都可以兼容兩種方式,即通過DIP開關選擇採用哪種方式。
如此,你用單片機控制起來就很方便了,用兩個IO口發控制信號就OK了,哪種方式都可以,脈沖的頻率大小決定電機的速度快慢。
當然,你也要注意驅動器需要信號的電壓大小,如果是5V,直接IO相連就行,如果需要12V,那麼需要加個光耦就行了。
㈦ 如何用單片機控制直流電機
通過與單片機相連的按鍵控制直流電機停啟的電路如下圖所示,通過P3.6口按鍵觸發啟動直流電機,P3.7口的按鍵觸發停止直流電機的運行。由圖可知,當P1.0輸出高電平「1」時,NPN型三極體導通,直流電機得電轉動;當P1.0輸出低電平「0」時,NPN型三極體截止,直流電機停止轉動。
通過單片機產生PWM波控制直流電機程序
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
uchar code table[10]={0x3f,0x06,0x5b,
0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰數碼管顯示碼(0-9)
sbit xiaoshudian=P0^7;
sbit wei1=P2^4; //數碼管位選定義
sbit wei2=P2^5;
sbit wei3=P2^6;
sbit wei4=P2^7;
sbit beep=P2^3; //蜂鳴器控制端
sbit motor = P1^0; //電機控制
sbit s1_jiasu = P1^4; //加速按鍵
sbit s2_jiansu= P1^5; //減速按鍵
sbit s3_jiting=P1^6; //停止/開始按鍵
uint pulse_count; //INT0接收到的脈沖數
uint num=0; //num相當於占空比調節的精度
uchar speed[3]; //四位速度值存儲
float bianhuasu; //當前速度(理論計算值)
float reallyspeed; //實際測得的速度
float vv_min=0.0;vv_max=250.0;
float vi_Ref=60.0; //給定值
float vi_PreError,vi_PreDerror;
uint pwm=100; //相當於占空比標志變數
int sample_time=0; //采樣標志
float v_kp=1.2,v_ki=0.6,v_kd=0.2; //比例,積分,微分常數
void delay (uint z)
{
uint x,y;
for(x=z;x>0;x--)
for (y=20;y>0;y--);
}
void time_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; //開總中斷
}
void keyscan()
{
float j;
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);
}
float v_PIDCalc(float vi_Ref,float vi_SpeedBack)
{
register float error1,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);
}
void v_Display()
{
uint su;
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;
}
void BEEP()
{
if((reallyspeed)>=vi_Ref+5||(reallyspeed
{
beep=~beep;
delay(4);
}
}
void main()
{
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);
}
void timer0() interrupt 1
{
}
void timer1() interrupt 3
{
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;
}
}
㈧ 單片機控制步進電機驅動器
你要看一下這個驅動器的信號是獨立的還是共電源或共地。如果是獨立的或共5V電源的,那麼這樣接沒有問題,如果是共地的,那麼需要反過來,CLK+ 和DIR+接IO口,負端接地。還有,你的驅動器有EN口,這是不是使能信號,看看說明書,或許有這個信號才能有效。
㈨ 那個單片機控制伺服電機驅動器怎麼控制。我們已經好到信號輸入的四個埠。
伺服驅動器一般有三種工作模式:位置、速度和力矩。單片機一般採用位置控制方式,這樣實現起來較為簡單,控制信號有三個就可以了:伺服ON,脈沖信號,方向信號。再加一個「地」,那麼就可以實現對伺服驅動器的控制。