首页 电路文章正文

51单片机控制直流电机的电路图 51单片机控制直流电机正反转电路图

电路 2022年11月15日 01:51 50 银路电子网

本篇文章主要给网友们分享51单片机控制直流电机的电路图的知识,其中更加会对51单片机控制直流电机正反转电路图进行更多的解释,如果能碰巧解决你现在面临的问题,记得关注本站!

本文目录一览:

求助51单片机通过uln2003控制继电器驱动直流电机的C语言和电路图,谢谢了

LN2003也是一个7路反向器电路51单片机控制直流电机的电路图,即当输入端为高电平时ULN2003输出端为低电平51单片机控制直流电机的电路图,当输入端为低电平时ULN2003输出端为高电平51单片机控制直流电机的电路图,继电器得电吸合。

#includestc.h

#define it unsigned int

sbit s0=P3^2;//两个按钮

sbit s1=P3^3;//两个按钮

sbit j0=P3^4;//继电器控制口,这3个IO口要和51单片机控制直流电机的电路图你实际电路去更改。

void ys(it); //声明延时函数

void main()

{

while(1)

{

if(s0==0) //判断S按键是否按下 {

ys(5000); //延时消抖

if(s0==0) //在次判断按键是否真51单片机控制直流电机的电路图的按下(在次判断很有必要)

{

j0=1; //让继电器关闭

while(s0==0); //判断S按键是否放开,如果没有放开继续等待。放开后执行下面的代码。

}

}

if(s1==0) //判断S按键是否按下 {

ys(5000);

if(s1==0)

{

j0=0; //让继电器打开

while(s1==0);

}

}

}

}

void ys(it a) //延时函数

{

it x;

for(x=0;x5000;x++)

for(x=0;xa;x++);

}

如何用单片机控制直流电机

通过与单片机相连的按键控制直流电机停启的电路如下图所示,通过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 bianhuasudu; //当前速度(理论计算值)

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;x0;x--)

for (y=20;y0;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;

bianhuasudu=(v_kp*d_error+v_ki*vi_PreError+v_kd*dd_error);

return (bianhuasudu);

}

void v_Display()

{

uint sudu;

sudu=(int)(reallyspeed*10); //乘以10之后强制转化成整型

speed[3]=sudu/1000; //百位

speed[2]=(sudu00)/100; //十位

speed[1]=(sudu0)/10; //个位

speed[0]=sudu; //小数点后一位

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(pwm100)pwm=100;

TH0=TL0=0;

TR0=1; //开启定时器0

}

num++;

if(num==pwm) //此处的num值,就是占空比

{

motor=0;

}

if(num==100) //100相当于占空比调节的精度

{

num=0;

motor=1;

}

}

用AT89C51单片机实现直流电机PWM调速原理图

正在做AT89S52的PWM调速,应该是一样的

#includereg52.h

#define uchar unsigned char

sbit zz=P1^0;

sbit fz=P1^1;

sbit K1=P3^2;

sbit K2=P3^3;

uchar PWM,a=0;

void main()

{

TMOD=0X01;

TH0=0XFF;

TL0=0XF6;

TR0=1;

ET0=1;

EA=1;

PWM=40;

zz=1;

fz=1;

while(1)

{

if(!K1)

{

PWM+=10;

}

if(!K2)

{

PWM-=10;

}

if(PWM=100)

PWM=1;

if(PWM=0)

PWM=99;

}

}

void timer0() interrupt 1

{

TH0=0XFF;

TL0=0XF6;

a++;

if(a=100)

a=0;

if(a=PWM)

{

zz=0;

}

else

{

zz=1;

}

}

51单片机怎么控制大功率的直流电机,麻烦给下电路图,谢啦。主要是驱动那怎么设计

看了这么多回答的,还是我给你一个答案吧!

答案见插图。解释如下:

1:你说的大功率直流电机,用三极管肯定驱动不了,必须要大功率的MOSFET或者IGBT去驱动,IGBT或者MOSFET可以买Infineon的。主电路结构最好采用H桥电路,可以双极性正反调速。

2:H桥的上管可以用IR2110来驱动,这个芯片自己提供了一个自举功能,上管MOSFET(或IGBT)的源极电压是浮动的,自举电路可以保证上管的栅源之间的电压在开启电压阈值之上。

3:你想要用51单片机实现调速,只需要用51单片机的P0~P3口产生两组互相反相的PWM波(注意两组之间要有死区),输出到IR2110的HIN和LIN。至于程序,就很简单了,不用我多说,你懂的。呵呵……

求51单片机控制直流电机正转反转的原理图

如果是直流微电机,典型的控制电路如图:

如果功率稍大的直流电机,晶体管换成继电器,两个继电器就可以,如果是大型动力用电机可以用可控硅等等但我没弄过。

这是为51单片机驱动直流电机所做的三极管电流放大驱动电路,请教各位大神,这个电路的详细原理是什么??

1、R3是电阻,他和D10稳压二极管构成稳压电路,稳压点接在两个三极管基极输入端(PORT),给两个三极管基极提供3.7伏电压使Q1NPN管子始终处于导通状态(在PORT是正极性信号和没有信号时),电机M2旋转。

2、三极管Q1Q2结成开关方式作为电机的控制开关,在PORT正极性信号和没有信号时电机正向旋转;在PORT负极性信号时电机反转(Q1截止,Q2导通)。

3、D?二极管是电机的续流二极管,作用是给电机停止时产生的感应电动势提供泄放通道,保护三极管不能击穿。

写到这里,本文关于51单片机控制直流电机的电路图和51单片机控制直流电机正反转电路图的介绍到此为止了,如果能碰巧解决你现在面临的问题,如果你还想更加了解这方面的信息,记得收藏关注本站。

标签: 51单片机控制直流电机的电路图

发表评论

抹茶交易所Copyright www.xjyinlu.com Some Rights Reserved. 2005-2023 本站所有信息均来自网络,为个人学习、研究、欣赏使用。投资有风险,选择需谨慎