导航:首页 > 操作系统 > 单片机直流电机

单片机直流电机

发布时间:2022-02-05 05:01:58

A. 单片机直流电机驱动电路

电机电流小于1A用8050和8550搭H桥是最便宜的方案,电路也非常简单,

B. 单片机驱动直流电机的方案有哪些

单片机驱动直流电机一般有两种方案。

第一,无须占用单片机资源,直接选择有PWM功能的单片机,可以实现精确调速。

第二,可以由软件模拟PWM输出调制,单片机型号的选择余地较大,但是需要占用单片机资源,难以精确调速。

C. 单片机驱动直流电动机

你用的是12V电源,也就应该使用这个电路了。

问题是单片机输出高电平,提供的电流有限,虽经过8050放大,也难以达到使电机转动的需求。

可以再加一级放大,用8550即可,见图。

原来的1K电阻可以适当的减小,680~470欧姆左右即可。

此时,单片机输出低电平时,电机转动。

--------------------------

加那两个电阻,是进行电流限制,以免烧坏三极管和单片机引脚。

3.3K电阻,是控制8550的基极电流,在1mA左右就基本够用;

减小到1K也可,这时,电流将近5mA了,还可以的。

1K电阻,是控制8050的基极电流的,减小到470欧姆,基极电流就能达到8~10mA,电流再增大,8050有危险。

D. AT89C52单片机与直流电机

直流电机驱动芯片UM2003,单片机程序产生pwm信号调节转速

E. 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;

}

(5)单片机直流电机扩展阅读

L298N 是一种双H桥电机驱动芯片,其中每个H桥可以提供2A的电流,功率部分的供电电压范围是2.5-48v,逻辑部分5v供电,接受5vTTL电平。一般情况下,功率部分的电压应大于6V否则芯片可能不能正常工作。

F. 用单片机怎么使直流电机正反转

单片机控制直流电机正反转,最简单的方法是 两个I/O口 控制两个继电器(一组常开、常闭)的就可以,电机 两个极 接 两个继电器 的 动触点,两个继电器 的 常开点接+(电机电源),两个常闭点接-,就可以了。
单片机控制接通一个继电器 是正转,控制接通另一个继电器 是反转,两个继电器都不接通(或者都接通)电机不转。

G. 单片机带动直流电机

1、不用单片机,你直接加电,电机是否运行正常?并测驱动电流是否小于1A。
2、如果正常,建议两级8050放大以达到第二极最大300mA基极,1.5A发射极的效果。

H. 直流电机对单片机的影响

我对单片机也是个新手,具体电机转的情况得看你的驱动信号,还有就是电源电压(包括直流电机的电压)是不是准的,你看一下吧。

I. 单片机如何控制直流电机的速度

基于模糊PID的直流力矩电机转速控制。

在分析模糊控制和PID控制结合方式的基础上,设计一个二维模糊PID控制算法,该算法根据误差信号是否达到阈值来决定何时在模糊控制与PID控制之间切换.采用编码器、80196KC单片机、16位D/A转换器和直流力矩电并结合上述控制算法构成直流力矩电机的模糊PID稳速控制系统.通过对标准PID和模糊PID实测数据分析比较说明,模糊PID控制可以达到无超调输出,其调节时间小于标准PID控制的调节时间,稳态误差小于万分之四.

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

通过与单片机相连的按键控制直流电机停启的电路如下图所示,通过P3.6口按键触发启动直流电机,P3.7口的按键触发停止直流电机的运行。由图可知,当P1.0输出高电平“1”时,NPN型三极管导通,直流电机得电转动;当P1.0输出低电平“0”时,NPN型三极管截止,直流电机停止转动。

(10)单片机直流电机扩展阅读:

通过单片机产生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 bianhuasu; //当前速度(理论计算值)


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


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


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


return (bianhuasu);


}


void v_Display()


{


uint su;


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


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


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


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


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


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


TH0=TL0=0;


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


}


num++;


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


{


motor=0;


}


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


{


num=0;


motor=1;


}


}



阅读全文

与单片机直流电机相关的资料

热点内容
行偏移算法 浏览:240
什么app也能让wifi增强 浏览:178
双分录核算法反映什么 浏览:210
ubuntuphpaptget 浏览:256
安卓手机快充需要什么数据线 浏览:795
程序中存在未转换未编译部分 浏览:323
编译汇编链接优化 浏览:83
程序员打字和作家哪个打字快 浏览:579
安卓手机怎么用cad命令行 浏览:385
2200工程机接收命令瞬间消失 浏览:255
压缩机工艺管是多大的 浏览:314
安卓刷什么系统稳定 浏览:37
程序员写炫酷代码 浏览:933
大话存储pdf 浏览:526
中铭机器人怎么编程 浏览:812
把字母变为数字的加密法 浏览:523
噬血狂袭第三季哪个app能看 浏览:423
江苏螺杆压缩机 浏览:982
android底部弹出对话框 浏览:503
怎么查服务器同行fc号 浏览:1001