A. 我用51單片機做個智能小車四驅的!想要實現差速轉向,怎麼做!要pwm控制!需要幾個定時器!一個可以
電子差速從幾年前就有人投入了研究,分主動差速和被動差速。被動差速是控制兩個電機嚴格的按照等轉矩或等功率運轉,主動差速是根據要求控制兩個電機按一定的差速比閉環調速運轉。
51系列單片機指令周期太長,不適合做電機驅動,無法實現電子差速的要求,建議使用性能更好單片機來完成,比如dsPIC,STM32,AVR系列等。
B. 本人大四(面向嵌入式和單片機的),要做畢設,求建議,以下是題目,本人成績中下。
如果你們有導師指導的話,最好選擇一個能包含硬體和軟體技術最多的了,我看這些題目,大部分僅僅涉及到一小個技術而已啊。
如果你以後想從事小型電子設備的開發,或者僅僅是電子設備軟體開發,那麼學軟體才是重點,說實在,軟體是個無底洞,內容多,提升空間很大。
如果以後想做控制,如自動化生產線,數字化設備方面的,那麼單片機、感測器、儀器儀表這些是重點。
學習還是靠自己以後長期的自學吧,大學學的東西很少,而一個課程設計學到的也非常有限。
如果能選幾個課程設計的話,可以綜合一下,平常也跟同學多了解下別人的設計。
3,6,15,25,43,58,65,75,85 這些都比較貼近實際的應用,你可以根據自己的興趣和弱點加強下。
C. 想做一輛由單片機控制的智能小車,我需要學習哪些方面的知識
1,樓主,你首先要學習C語言基礎,就相當於80%會單片機了,因為現在所有8/16/32位(51系列,MSP430系列,ARM系列)都是使用C語言。
2,先看內核8051的單片機:台灣宏晶的STC89C51-DIP40/或其它如新茂,到網上買一個開發板,價格不會超過200元。
3,看一下單片機功能:包換內部FLASH、RAM、TIMER、INT、ADC、USB、ISP/IAR等。
4,編譯環境、編程軟體KEIL。
5,打開開發板的例子程序,在KEIL編譯,下載到板,看結果和說明是不是相符,達到這樣效果時,你心裡肯定很激動,這時你真正學會了單片機,你成功了!!!!!。
6,單片機C語言舉例:
sbit SPEAK = P1^5; //IO口定義為蜂鳴器控制
如果蜂鳴器正極接電源,SPEAK =0;蜂鳴器就會響,你看就是這么簡單。
unsiggne char temp;//定義TEMP為單位元組變數。
sfr PORTA P1;//將P1口定義為PORTA
7,結合上面講的,你就可以搭電路和編代碼進行小車控制。。
總結,當然,做起來可能不那麼順利,堅持才是硬道理。
D. 求高手寫一個C程序,要求用單片機控制小車前進,後退,左轉彎,右轉彎。用的是C51系列單片機。
控制小車其實也就是控制小車的電機,一般來說,是通過PWM信號來控制。比如說,要讓小車前進,則輸出正轉的PWM信號,後退則輸出反轉的PWM信號等。而調節PWM信號的占空比則可以改變電機的轉速,從而改變小車的速度。此外,拐彎則需要藉助於感測器提供的信號了。編程時,先了解小車的電機資料,再有就是捕獲感測器的信號了。
E. 51單片機遙控車編程,幫忙寫程序要求在下面
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit IN3=P1^2;
sbit IN4=P1^3;
sbit key1=P2^0;
sbit key2=P2^1;
sbit key3=P2^2;
void delay(uint n)
{ uint x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
}
void forward()
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
}
void reverse()
{
IN1=0;
IN2=1;
IN3=0;
IN4=1;
}
void left()
{
IN1=0;
IN2=0;
IN3=1;
IN4=0;
}
void right()
{
IN1=1;
IN2=0;
IN3=0;
IN4=0;
}
void stop()
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
}
void RSINTR() interrupt 4
{
if(RI==1)
{
RI=0;
if(SBUF=='A')
reverse();
else if(SBUF=='B')
forward();
else if(SBUF=='C')
left();
else if(SBUF=='D')
right();
else if(SBUF=='E')
stop();
}
}
main()
{
SCON=0x50;//允許串口接收
TMOD=0x20;
PCON=0x80;
TH1=0xfd;
TL1=0xfd;
RI=0;
TR1=1;
EA=1;
ES=1;
while(1)
{
}
}
F. 用c語言寫一個單片機控制小車走直線的程序,小車一共3個輪子,一個萬向輪,另兩個是電機驅動的,用51單片
自己看注釋改一下就行 函數都寫好了了 沒用的刪掉就可以了
#include<reg52.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
#define L_M 1
#define R_M 2
uchar temp2,temp1,t,m1,m2,redline;
sbit tr=P2^4; //超聲波
sbit ec=P2^5; //
sbit en=P2^7; //液晶的EN
sbit rs=P2^6; //液晶RS選擇端
//液晶數據口 P0口
sbit Rin_1=P2^0; //尋跡管腳輸入
sbit Rin_2=P2^1;
sbit Lin_2=P2^2;
sbit Lin_1=P2^3;
sbit L_EN=P1^0; //左側電機使能
sbit L_1=P1^1; //左側電機控制 1
sbit L_2=P1^2; //左側電機控制 2
sbit R_1=P1^3; //右側電機控制 1
sbit R_2=P1^4; //右側電機控制 2
sbit R_EN=P1^5; //右側電機使能
void delay(uint z) //延時程序1
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delay1s(uchar t) //1s延時函數
{
uchar a,h,i,j,k;
for(a=t;a>0;a--)
{
for(h=5;h>0;h--)
for(i=4;i>0;i--)
for(j=116;j>0;j--)
for(k=214;k>0;k--);
}
}
void v_cotrol(uchar number,uchar speed)
{
if(speed<100)
{
if(number==1)
m1=abs(speed);
if(number==2)
m2=abs(speed);
}
}
void turnleft()
{
L_1=1; // left fan zhuan //
L_2=0;
R_1=1; // right fanzhuan
R_2=0;
}
void turnright()
{
L_1=0; // left zheng zhuan
L_2=1;
R_1=0; // right fanzhuan
R_2=1;
}
void gostright()
{
L_1=0; // left zheng zhuan
L_2=1;
R_1=1; // right zhengzhuan
R_2=0;
}
void goback()
{
L_1=1; // left zheng zhuan
L_2=0;
R_1=0; // right zhengzhuan
R_2=1;
}
void stop()
{
L_1=1; // stop
L_2=1;
R_1=1; // stop
R_2=1;
}
void timer0_int()
{
TMOD=0X01;
TH0=-100/256;
TL0=-100%256;
EA=1;
ET0=1;
TR0=1;
}
state_int()
{
Rin_1=1;
Rin_1=1;
Lin_1=1;
Lin_1=1;
t=0;
m1=50;
m2=50;
stop();
}
void main()
{
timer0_int();
state_int();
while(1)
{
//避障程序
if((Lin_1==1)&&(Lin_2==1)&&(Rin_1==1)&&(Rin_2==1))
gostright();
if((Lin_1==1)&&(Lin_2==1)&&(((Rin_1==1)&&(Rin_2==0))||((Rin_1==0)&&(Rin_2==1))||((Rin_1==0)&&(Rin_2==0))))
turnleft();
if((Rin_1==1)&&(Rin_2==1)&&(((Lin_1==1)&&(Lin_2==0))||((Lin_1==0)&&(Lin_2==1))||((Lin_1==0)&&(Lin_2==0))))
turnright();
if((((Lin_1==1)&&(Lin_2==0))||((Lin_1==0)&&(Lin_2==1))||((Lin_1==0)&&(Lin_2==0)))&&(((Rin_1==1)&&(Rin_2==0))||((Rin_1==0)&&(Rin_2==1))||((Rin_1==0)&&(Rin_2==0))))
goback();
if((Lin_1==1)&&(Lin_2==1)&&(Rin_1==1)&&(Rin_2==1))
gostright();
if((Lin_1==1)&&(Lin_2==1)&&(((Rin_1==1)&&(Rin_2==0))||((Rin_1==0)&&(Rin_2==1))||((Rin_1==0)&&(Rin_2==0))))
turnleft();
if((Rin_1==1)&&(Rin_2==1)&&(((Lin_1==1)&&(Lin_2==0))||((Lin_1==0)&&(Lin_2==1))||((Lin_1==0)&&(Lin_2==0))))
turnright();
if((((Lin_1==1)&&(Lin_2==0))||((Lin_1==0)&&(Lin_2==1))||((Lin_1==0)&&(Lin_2==0)))&&(((Rin_1==1)&&(Rin_2==0))||((Rin_1==0)&&(Rin_2==1))||((Rin_1==0)&&(Rin_2==0))))
goback();
}
while(1);
}
timer0() interrupt 1
{
TH0=-100/256;
TL0=-100%256;
if(t==0)
{
temp1=m1;
temp2=m2;
}
if(t==temp1)
L_EN=0;
if(t==temp2)
R_EN=0;
t++;
if(t==50)
{
t=0;
L_EN=1;
R_EN=1;
}
}