给你原理图,修改一下,
两个程序修改一下。。
实在弄不来我再帮忙
这是控制正反转的程序:
#include <reg52h>
bit Flag;//定义正反转标志位
unsigned char code F_Rotation[4]={0xf1,0xf2,0xf4,0xf8}; //正转表格
unsigned char code B_Rotation[4]={0xf8,0xf4,0xf2,0xf1}; //反转表格
//
/ 延时函数 /
//
void Delay(unsigned int i)//延时
{
while(--i);
}
//
/ 主函数 /
//
main()
{
unsigned char i;
EX1=1; //外部中断0开
IT1=1; //边沿触发
EA=1; //全局中断开
while(!Flag)
{
P0=0x71;//显示 F 标示正转
for(i=0;i<4;i++) //4相
{
P1=F_Rotation[i]; //输出对应的相 可以自行换成反转表格
Delay(800); //改变这个参数可以调整电机转速 ,数字越小,转速越大
}
}
while(Flag)
{
P0=0x7C;//显示 b 标示反转
for(i=0;i<4;i++) //4相
{
P1=B_Rotation[i]; //输出对应的相
Delay(500); //改变这个参数可以调整电机转速 ,数字越小,转速越大
}
}
}
//
/ 中断入口函数 /
//
void ISR_Key(void) interrupt 2 using 1
{
Delay(300);
Flag=!Flag; //s3按下触发一次,标志位取反
}
这是控制转速的程序:
#include<reg52h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbit KEY1 = P3^1; //定义调速按键
sbit PWM = P1^5; //定义调速端口
unsigned char CYCLE; //定义周期 该数字X基准定时时间 如果是10 则周期是10 x 01ms
unsigned char PWM_ON ;//定义高电平时间
//
/ 延时函数 /
//
void delay(unsigned int cnt)
{
while(--cnt);
}
//
/ 主函数 /
//
main()
{
unsigned char PWM_Num;//定义档位
TMOD |=0x01;//定时器设置 1ms in 12M crystal
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;//定时1mS
IE= 0x82; //打开中断
TR0=1;
CYCLE = 10;// 时间可以调整 这个是10步调整 周期10ms 8位PWM就是256步
while(1)
{
if(!KEY1)
{
delay(10000);
if(!KEY1)
{
PWM_Num++;
if(PWM_Num==4)PWM_Num=0;
switch(PWM_Num){
case 0:P0=0x06;PWM_ON=0;break;//高电平时长
case 1:P0=0x5B;PWM_ON=4;break;
case 2:P0=0x4F;PWM_ON=6;break;
case 3:P0=0x66;PWM_ON=8;break;
default:break;
}
}
}
}
}
//
/ 定时器中断函数 /
//
void tim(void) interrupt 1 using 1
{
static unsigned char count; //
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;//定时1mS
if (count==PWM_ON)
{
PWM = 1; //灯灭
}
count++;
if(count == CYCLE)
{
count=0;
if(PWM_ON!=0) //如果左右时间是0 保持原来状态
PWM = 0; //灯亮
}
}
#include <stdioh>
void main()
{
int i,j;
int a[3][4],b[3][4],c[3][4];
printf("input a[3][4]:\n");
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
printf("input b[3][4]:\n");
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&b[i][j]);
for(i=0;i<3;i++)
for(j=0;j<4;j++)
c[i][j]=a[i][j]+b[i][j];
printf("output c[3][4]:\n");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf("%d ",c[i][j]);
printf("\n");
}
安装长安星光4500启动马达拆卸程序
断开蓄电池负极电缆。
拆下起动机电缆。
断开起动机连接器。
清除起动机外部的灰尘和油污。拆下起动机。
取下防尘盖,拉起碳刷d簧,取出碳刷。
拆下夹紧螺柱,分离端盖、外壳和驱动端,取出电枢。
拆下驱动杆销轴的螺钉,取出驱动叉销和回位d簧。
拆下中间轴承支撑板的固定螺钉,拆下支撑板垫圈、传动叉和啮合装置。
拆下开关与磁场线圈端子之间的连接铜片,然后拆下开关的固定螺丝,取下开关。
清洁拆卸的零件。
起动机的安装
润滑传动箱中的衬套。
在安装单向离合器总成之前,润滑螺旋花键,润滑与离合器连接的滑动面和接触面,润滑安装在支架上的衬套和插入衬套的电枢轴。
安装止动螺母后,用冲头将其支撑在两个位置并将其锁定。
调整双头螺栓的长度,使嵌入状态下限位螺母与驱动轮之间的间隙为1~4mm。
检查过程中,在空负载下启动机器,以分离驱动齿轮,直到起动机的速度稳定。
连接蓄电池接地线。
检查起动机工作是否正常。
你用1个按键控制调节状态,这个时侯,显示调节值,用几个按键调节数值(个位,十位,百们,千位),在按状态键,回到计数状态,用脚踏板启动马达,马达 连接计数传感器到单片机,当圈数=调节值变量就停止,计数变量再变成0,程序自己去写,当然硬件与软件要一至
51单片机驱动直流电机程序(用的是l298n芯片):
#include<reg51h>
#include<mathh>
#define uint unsigned int
#define uchar unsigned char
#define N 100
sbit s1=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;
}
扩展资料
L298N 是一种双H桥电机驱动芯片,其中每个H桥可以提供2A的电流,功率部分的供电电压范围是25-48v,逻辑部分5v供电,接受5vTTL电平。一般情况下,功率部分的电压应大于6V否则芯片可能不能正常工作。
参考资料来源:百度百科-l298n
以上就是关于怎样用单片机控制电机或马达的正反转以及转速。要有电路设计,如果有proteus仿真图和程序就最好了!全部的内容,包括:怎样用单片机控制电机或马达的正反转以及转速。要有电路设计,如果有proteus仿真图和程序就最好了!、大鸣教你如何编程的有6个马达的程序咋编 有书的更好、如何安装长安星光4500启动马达等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)