編程小馬達
Ⅰ 51單片機怎麼驅動直流電機c語言
51單片機驅動直流電機程序(用的是l298n晶元):
#include<reg51.h>
#include<math.h>
#define uint unsigned int
#define uchar unsigned char
#define N 100
sbits1=P1^0; //電機驅動口
sbit s2=P1^1; //電機驅動口
sbit s3=P1^2; //電機驅動口
sbit s4=P1^3; //電機驅動口
sbit en1=P1^4; //電機使能端
sbit en2=P1^5; //電機使能端
sbit LSEN=P2^0; //光電對管最左
sbit LSEN1=P2^1; //光電對管左1
sbit LSEN2=P2^2; //光電對管左2
sbit RSEN1=P2^3; //光電對管右1
sbit RSEN2=P2^4; //光電對管右2
sbit RSEN=P2^5; //光電對管最右
uint pwm1=0,pwm2=0,t=0;
void delay(uint xms)
{
uint a;
while(--xms)
{
for(a=123;a>0;a--);
}
}
void motor(uchar speed1,uchar speed2)
{
if(speed1>=-100&&speed1<=100)
{
pwm1=abs(speed1);
if(speed1>0)
{
s1=1;
s2=0;
}
if(speed1==0)
{
s1=1;
s2=1;
}
if(speed1<0)
{
s1=0;
s2=1;
}
}
if(speed2>=-100&&speed2<=100)
{
pwm2=abs(speed2);
if(speed2>0)
{
s3=1;
s4=0;
}
if(speed2==0)
{
s3=1;
s4=1;
}
if(speed2<0)
{
s3=0;
s4=1;
}
}
}
void go_forward(uint speed)
{
s1=1;
s2=0;
s3=1;
s4=0;
pwm1=speed;
pwm2=speed;
}
void go_back(uint speed)
{
s1=0;
s2=1;
s3=0;
s4=1;
pwm1=speed;
pwm2=speed;
}
void stop()
{
s1=1;
s2=1;
s3=1;
s4=1;
pwm1=0;
pwm2=0;
}
void turn_right(uint P1,uint P2) //右轉函數
{
s1=1;
s2=0;
s3=0;
s4=1;
pwm1=P1;
pwm2=P2;
}
void turn_left(uint P1,uint P2) //左轉函數
{
s1=0;
s2=1;
s3=1;
s4=0;
pwm1=P1;
pwm2=P2;
}
void tracking()
{
if((LSEN1==0)&&(LSEN2==0)&&(RSEN1==0)&&(RSEN2==0)) //沒有檢測到
{
go_forward(100);
}
if((LSEN1==1)&&(LSEN2==0)&&(RSEN1==0)&&(RSEN2==0)) //左一檢測到
{
turn_left(40,80); //左轉 右輪 》左輪
delay(N);
}
if((LSEN1==0)&&(LSEN2==1)&&(RSEN1==0)&&(RSEN2==0)) //左二檢測到
{
turn_left(40,60); //左轉 右輪 》左輪
delay(N);
}
if((LSEN1==0)&&(LSEN2==0)&&(RSEN1==1)&&(RSEN2==0)) //右一檢測到
{
turn_right(60,4); //右轉 左輪 》右輪
delay(N);
}
if((LSEN1==0)&&(LSEN2==0)&&(RSEN1==0)&&(RSEN2==1)) //右二檢測到
{
turn_right(80,40); //右轉 左輪 》右輪
delay(N);
}
if((LSEN1==1)&&(LSEN2==1))
{
turn_left(0,100);
delay(1000);
}
if((RSEN1==1)&&(RSEN2==1))
{
turn_right(100,0);
delay(1000);
}
}
void avoidance()
{
}
void init()
{
TMOD=0x02; //timer0 同時配置為模式2, 8自動重裝計數模式
TH0=156; //定時器初值設置100us中斷
TL0=156;
ET0=1;
EA=1;
TR0=1; //開啟總中斷
}
void main()
{
init();
while(1)
{
tracking();
}
}
void timer0() interrupt 1 //電機驅動 提供PWM信號
{
if(t<pwm1)
en1=1;
else
en1=0;
if(t<pwm2)
en2=1;
else
en2=0;
t++;
if(t>100)
t=0;
}
(1)編程小馬達擴展閱讀
L298N 是一種雙H橋電機驅動晶元,其中每個H橋可以提供2A的電流,功率部分的供電電壓范圍是2.5-48v,邏輯部分5v供電,接受5vTTL電平。一般情況下,功率部分的電壓應大於6V否則晶元可能不能正常工作。
Ⅱ 科技小製作小發明之電風扇怎麼做
材料:一個大電池,一個馬達,兩根導線,一個雙面膠,一個修正帶的齒輪還有幾張瓦楞紙。
首先,我們先將電池的一頭接上導線,然後把黃色瓦楞紙拿出,貼上雙面膠,把導線的一頭粘在銅帽上並在電池的周圍圍上金色的瓦楞紙,關於電池方面的事就做完了。
接下來就是馬達方面的事了,我們就先用卡紙剪一個圓圈,然後再把圓圈貼到馬達的背面,拿出另一根導線,在圓圈的中心部分剪一個小孔,然後再把導線穿進去,接下來在圓圈下面貼上雙面膠,然後把第一根導線的另一頭粘在馬達的一頭,把第二更導線的另一頭粘在馬達的另一邊,這樣就能使馬達和電池接通,馬達就「滋滋滋」的轉起來了。
拿出修正帶的齒輪,把瓦楞紙剪成三段,粘在齒輪上面,然後再把齒輪的中心鑽進一個筆蓋,筆蓋的中心放進雙面膠,再把齒輪粘到馬達上,這樣就完成啦!
另外,風扇葉片做出一個弧度,否則不會有風的。
Ⅲ 步進電機怎麼編寫控製程序
步進電機編程一般有幾點。細分數,結構比例,加速度,減速度。最大頻率限值,最小起跳頻率。
1:原點。
2:速度,距離(相對位置,絕對位置)。速度模式
3:停止。等待
如果多軸的或開關,感測器比較多的位置控制就比較復雜了。有很多變數和跳轉。這取決於控制器功能和底層程序開發和運用。
根據你問的情況,應該是寫上層程序。中層都已經做好了,寫程序需要對使用的晶元和代碼非常熟悉,邏輯關系比較了解,運動結構也有一定的認知。
Ⅳ EV3編程如何馬達轉動卡死程序停止
共分為2步操作。
具體操作如下:
1、馬達功率為10持續轉動,按下觸碰感測器後,馬達停止轉動。
2、再次按下觸碰感測器後,馬達功率為10轉動3秒鍾,程序結束。
如果開啟模塊後面沒有任何模塊,程序就此中止了,那麼電機也會立刻停止。運行效果,看起來好像電機並沒有動一樣。
Ⅳ 一台10kw小功率電動機,使用轉換法,編程實現用PLC控制電動機在兩地起動和停止
一台10kw小功率電動機,使用轉換法,編程實現用PLC控制電動機在兩地起動和停止?一台10kw小功率電動機,使用轉換法,編程實現用PLC控制電動機在兩地起動和停止?一台10kw小功率電動機,使用轉換法,編程實現用PLC控制電動機在兩地起動和停止?一台10kw小功率電動機,使用轉換法,編程實現用PLC控制電動機在兩地起動和停止?
Ⅵ 可編程微型步進電機驅動
有那種io口控制的門鎖,合不合適就不知道了
Ⅶ wedo2.0怎麼控制雙馬達編程
可以算出在某個置信概率(如0.00001)下,隨機情況下,某個鹼基上可以覆蓋的read的數目的最小值,當實際觀察到的read數目超過這個值(單側檢驗)時,我們認為該鹼基是TF的一個結合熱點。
反過來,針對每一個read數目,我們也可以算出對應的置信概率P。