用51单片机,输出PWM信号控制智能小车的小电机,汇编程序要怎么写

用51单片机,输出PWM信号控制智能小车的小电机,汇编程序要怎么写,第1张

如果用全桥控制的话,自己搭起来的最好有一个使能控制端,像L293,L298可以从使能端输入PWM信号进行调速,剩下的可以控制正转,反转。

中午的时候试了一下用C51的定时器模拟PCA模块那样的PWM输出,即使用汇编程序返回的时间会积累。还是网上的示例参考……

还是用STC的51,12系列(STC12C5608AD)有自带PCA可以PWM输出(还有8路鸡肋的ADC),价格在5-7块之间……

最近也在搞小车~

#include<reg52h>

#define uchar unsigned char

#define uint unsigned int

sbit moto1=P1^5;

sbit moto2=P1^6;

sbit moto3=P2^0;

sbit moto4=P2^1;

sbit en1=P1^7;

sbit en2=P2^2;

///////////////

sbit left1=P1^0;//

sbit left2=P1^1;

sbit left3=P1^2;

sbit mid=P1^3;//

sbit right1=P1^4;

sbit right2=P2^3;

sbit right3=P2^4;////////////////

sbit hled=P0^0;

sbit bled=P0^1;

sbit lled=P0^2;

sbit rled=P0^3;

sbit bizhang=P2^5;

uchar pro_head;

uchar pro_back;

uchar i;

uchar j; //前后占空比标志

void delay(uint z)

{

uchar i;

while(z--)

{

for(i=0;i<121;i++);

}

}

void init()

{

TMOD=0x01;

TH0=(65536-100)/256;

TL0=(65536-100)%6;

EA=1;

ET0=1;

TR0=1;

en1=1;

en2=1;

}

void time0(void) interrupt 1

{

i++;

j++;

if(i<=pro_back)

{

en1=1;

}

else

{

en1=0;

}

if(i==40)

{

en1=~en1;

i=0;

}

if(j<=pro_head)

{

en2=1;

}

else

{

en2=0;

}

if(j==40)

{

en2=~en2;

j=0;

}

TH0=(65536-100)/256;

TL0=(65536-100)%6;

}

void qianjin()/////////////////////

{

pro_back=15;

pro_head=5;

moto1=0;

moto2=0;

moto3=1;

moto4=0;

lled=1;

rled=1;

bled=1;

}

void turn_right1()//

{

pro_back=10;

pro_head=15;

moto1=0;

moto2=1;

moto3=1;

moto4=0;

}

。。。。。。。

void xunji() //

{

uchar flag;

if((left1==0)&&(left2==0)&&(left3==1)&&(mid==1)&&(right1==0)&&(right2==0)&&(right3==0))

{

flag=1;

}

else if((left1==0)&&(left2==0)&&(left3==1)&&(mid==0)&&(right1==0)&&(right2==0)&&(right3==0))

{

flag=2;

}

else if((left1==0)&&(left2==1)&&(left3==1)&&(mid==0)&&(right1==0)&&(right2==0)&&(right3==0))

{

flag=3;

}

、。。。。。。。。。。。。。

switch (flag)

{

case 0:qianjin();headled();

break;

case 1:turn_left1();leftled();

break;

case 2:turn_left2();leftled();

、。。。。。。。。。。。。。。。 break; default:backled();

break;

}

}

void main()

{

init();

delay(600);

jiance();

delay(300);

while(1)

{

if(bizhang==1)

{

xunji();

}

else

bz();

}

}、、、、、、、、、后面根据自己的实际情况填写吧!

电磁开关接线方法

一、一般三相接触器一共有8个点,三路输入,三路输出,还有是控制点两个。输出和输入是对应的,很容易能看出来。如果要加自锁的话,则还需要从输出点的一个端子将线接到控制点上面。

二、首先应该知道交流接触器的原理。他是用外界电源来加在线圈上,产生电磁场。加电吸合,断电后接触点就断开。知道原理后,你应该弄清楚外加电源的接点,也就是线圈的两个接点,一般在接触器的下部,并且各在一边。其他的几路输入和输出一般在上部,一看就知道。还要注意外加电源的电压是多少(220V或 380V),一般都标得有。并且注意接触点是常闭还是常开。如果有自锁控制,根据原理理一下线路就可以了。

l1,l2l3 是输入电压QF1 是控制输入电压的空开KM1,KM2tKM3rKM4KM5,KM6是接触器M 是马达电动机其图:表达的意思是用6个接触器5173控制3台电动机的正反转,1

自己看注释改一下就行 函数都写好了了 没用的删掉就可以了

#include<reg52h>

#include<mathh>

#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;

}

}

以上就是关于用51单片机,输出PWM信号控制智能小车的小电机,汇编程序要怎么写全部的内容,包括:用51单片机,输出PWM信号控制智能小车的小电机,汇编程序要怎么写、智能小车避障程序~~~急、10千伏小车开关电磁铁怎么安装等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10106640.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存