❶ 單片機控制直流電機採用的是什麼信號
PWM信號。單片機官方參數顯示,控制直流電機採用的是PWM信號。單片機是一種集成電路晶元,是採用超大規模集成電路技術把具有數據處理能力的中央處理器、多種IO口和中斷系統等功能集兆亮圓成到一塊矽片鍵則上構成的一個小而完族塌善的微型計算機系統。
❷ 怎樣用單片機控制直流電動機
1,簡單的開關控制,用單片機引腳輸出高低電平,控制MOS管驅動電路。
2,正反轉控制,需要兩個單片機引腳,一個控制正反轉,一個控制啟動與否。
3,需要控制速度,(1)電壓控制,(2)PWM(脈寬)控制。
4,需要控制轉角,首先能夠控制速度,然後增加一個編碼器,單片機中加入PID控制,用以精確控制。
以上大概就是直流電機能夠控制的東西。
❸ 單片機控制直流電機
低壓供電的電路,這樣子用三極體實在讓我無語!這樣子單邊都要耗掉1.4,假如是5V供電,那到電機處就只有2伏多一點了。
給你剪了一張圖,看看吧,比你那個好多了。
只是提供一個思路,若要用在你那個電路里需要小改 。
❹ 怎樣用單片機控制直流電動機
1、通過設置PWM波的占空比來控制直流閉前電機的轉速,占空比越大,轉速越快,越小轉速越低。2、當然單片機的I/O口是不能直接驅動電機的,所以你還需要用一個馬達驅動晶元。像LG9110、CMO825等。馬達驅動IC可以將單片機I/O輸出信號放大,這樣電機中流過的電流足夠大,電機才能轉起來。3、你要是不清除PWM是怎麼回事呢,可以先作一些了解,再來知道有徵對性轎吵清地提問就好了碰胡。]
❺ 如何用單片機控制200個直流小電機(3V左右,不到100mA)啟停,正反轉(無需調速),求高手建議
哈!這到不難,就是麻煩,可用現控制發光管的方式,先擴展一堆I/O口,可用164移位寄存器最省事(因電機反應慢,就一百全串在一個串口輸出埠上也只要100US就打完,不會影響到電機運行的),也可有74X73系列的鎖存器(這要麻煩點)來並行擴展埠。再准備一對適合你這電機的正負電源(用正負電源是為了省很多事)這再找一堆驅動,就一般三極體都行,分別把NPN的和PNP的掛在正負電源上中間相聯接到一個電機腳上(如不用正負電源就要用橋式了,如是正負電源另一腳就接到這正負電源中的公共端上),基極全串一限流電阻接到你擴的I/O埠上,OK!這時你只要給埠打上相應的信號電機就會按你的正,反,關執行了。 哈!只是注意不要打成共態導通了(在打信號時能關了這正負電源為最好)
❻ 如何用單片機控制直流電機
1、通過設置PWM波的占空比來控制直流電機的轉速,占空比越大,轉速越快,越小轉速越低。
2、當然單片機的I/O口是不能直接驅動電機的,所以你還需要用一個馬達驅動晶元。像LG9110、CMO825等。馬達驅動IC可以將單片機I/O輸出信號放大,這樣電機中流過的電流足夠大,電機才能轉起來。
3、你要是不清除PWM是怎麼回事呢,可以先作一些了解,再來知道有徵對性地提問就好了。
❼ 51單片機控制直流電機。(c語言控制)
有3種方案:
第一種,通過PWM脈寬調制輸出方法控制轉速,控制占空比的大小可以實現調速!
第二種,通過AD轉換的方法控制直流電機的電壓
第三種,用xtr115程式控制電流源來控制直流電機(類似第二種方法)
如果以上的驅動能力不夠的話再加上一個電壓跟隨器!
程序方面就是一個寄存器的配置問題了,你查一下單片機的技術手冊上面都有介紹的,祝你成功
❽ 如何用單片機控制直流電機
1、通過設置PWM波的占空比來控制直流電機的轉速,占空比越大,轉速越快,越小轉速越低。
2、當然單片機的I/O口是不能直接驅動電機的,所以你還需要用一個馬達驅動晶元。像LG9110、CMO825等。馬達驅動友爛IC可以將單片機I/O輸出信號放大,這樣電機中流過的電流足夠大,電機才能轉起來。
3、你要是不清除PWM是怎麼回事呢,可以塌告李先作一些了解,再來知道有徵對性地團遲提問就好了。
❾ 如何用單片機控制直流電機
通過與單片機相連的按鍵控制直流電機停啟的電路如下圖所示,通過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;
}
}
❿ 如何利用51系列單片機控制電機
方法一、單片機接三極體做一個全橋控制小功率直流電機正反轉,檢測到紅色的狀態標記下來,電機轉動,綠色時候標記下來,反向轉動。
方法二、淘寶上購買一小的步進電機,一般直接驅動電路帶著的,可以直接接在單片機的IO口上,程序的控制原理一樣,電機控製做for循環,步進電機,步數即for循環次數定好,正反轉的區別無非就是IO口輸出的邏輯順序不同就可以實現了。
兩個方法,一個硬體上有個難度,一個是軟體上。但是都是很簡單的,正常的情況下花1天時間就能學會和應用。預祝成功。
ps:純手打。。