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

单片机控制小直流电机

发布时间:2023-03-26 15:38:51

单片机控制直流电机采用的是什么信号

PWM信号。单片机官方参数显示,控制直流电机采用的是PWM信号。单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器、多种IO口和中断系统等功能集兆亮圆成到一块硅片键则上构成的一个小而完族塌善的微型计算机系统。

❷ 怎样用单片机控制直流电动机

1,简单的开关控制,用单片机引脚输出高低电平,控制MOS管驱动电路。
2,正反转控制,需要两个单片机引脚,一个控制正反转,一个控制启动与否。
3,需要控制速度,(1)电压控制,(2)PWM(脉宽)控制。
4,需要控制转角,首先能够控制速度,然后增加一个编码器,单片机中加入PID控制,用以精确控制。
以上大概就是直流电机能够控制的东西。

❸ 单片机控制直流电机

低压供电的电路,这样子用三极管实在让我无语!这样子单边都要耗掉1.4,假如是5V供电,那到电机处就只有2伏多一点了。

给你剪了一张图,看看吧,比你那个好多了。

只是提供一个思路,若要用在你那个电路里需要小改 。

❹ 怎样用单片机控制直流电动机

1、通过设置PWM波的占空比来控制直流闭前电机的转速,占空比越大,转速越快,越小转速越低。2、当然单片机的I/O口是不能直接驱动电机的,所以你还需要用一个马达驱动芯片。像LG9110、CMO825等。马达驱动IC可以将单片机I/O输出信号放大,这样电机中流过的电流足够大,电机才能转起来。3、你要是不清除PWM是怎么回事呢,可以先作一些了解,再来知道有征对性轿吵清地提问就好了碰胡。]

❺ 如何用单片机控制200个直流小电机(3V左右,不到100mA)启停,正反转(无需调速),求高手建议

哈!这到不难,就是麻烦,可用现控制发光管的方式,先扩展一堆I/O口,可用164移位寄存器最省事(因电机反应慢,就一百全串在一个串口输出端口上也只要100US就打完,不会影响到电机运行的),也可有74X73系列的锁存器(这要麻烦点)来并行扩展端口。再准备一对适合你这电机的正负电源(用正负电源是为了省很多事)这再找一堆驱动,就一般三极管都行,分别把NPN的和PNP的挂在正负电源上中间相联接到一个电机脚上(如不用正负电源就要用桥式了,如是正负电源另一脚就接到这正负电源中的公共端上),基极全串一限流电阻接到你扩的I/O端口上,OK!这时你只要给端口打上相应的信号电机就会按你的正,反,关执行了。 哈!只是注意不要打成共态导通了(在打信号时能关了这正负电源为最好)

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

1、通过设置PWM波的占空比来控制直流电机的转速,占空比越大,转速越快,越小转速越低。
2、当然单片机的I/O口是不能直接驱动电机的,所以你还需要用一个马达驱动芯片。像LG9110、CMO825等。马达驱动IC可以将单片机I/O输出信号放大,这样电机中流过的电流足够大,电机才能转起来。
3、你要是不清除PWM是怎么回事呢,可以先作一些了解,再来知道有征对性地提问就好了。

❼ 51单片机控制直流电机。(c语言控制)

有3种方案:
第一种,通过PWM脉宽调制输出方法控制转速,控制占空比的大小可以实现调速!
第二种,通过AD转换的方法控制直流电机的电压
第三种,用xtr115程控电流源来控制直流电机(类似第二种方法)
如果以上的驱动能力不够的话再加上一个电压跟随器!
程序方面就是一个寄存器的配置问题了,你查一下单片机的技术手册上面都有介绍的,祝你成功

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

1、通过设置PWM波的占空比来控制直流电机的转速,占空比越大,转速越快,越小转速越低。
2、当然单片机的I/O口是不能直接驱动电机的,所以你还需要用一个马达驱动芯片。像LG9110、CMO825等。马达驱动友烂IC可以将单片机I/O输出信号放大,这样电机中流过的电流足够大,电机才能转起来。
3、你要是不清除PWM是怎么回事呢,可以塌告李先作一些了解,再来知道有征对性地团迟提问就好了。

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

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

(9)单片机控制小直流电机扩展阅读:

通过单片机产生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;


}


}



❿ 如何利用51系列单片机控制电机

方法一、单片机接三极管做一个全桥控制小功率直流电机正反转,检测到红色的状态标记下来,电机转动,绿色时候标记下来,反向转动。
方法二、淘宝上购买一小的步进电机,一般直接驱动电路带着的,可以直接接在单片机的IO口上,程序的控制原理一样,电机控制做for循环,步进电机,步数即for循环次数定好,正反转的区别无非就是IO口输出的逻辑顺序不同就可以实现了。
两个方法,一个硬件上有个难度,一个是软件上。但是都是很简单的,正常的情况下花1天时间就能学会和应用。预祝成功。
ps:纯手打。。

阅读全文

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

热点内容
注册表扫描命令 浏览:218
中国老电影演员全部名单 浏览:942
用服务器ip地址访问 浏览:8
文登银河电影院今日放映表 浏览:82
学习板和单片机烧录器的区别 浏览:334
米思齐怎么编程顺序控制 浏览:807
linux磁盘规划 浏览:266
途观安卓大屏如何投屏 浏览:281
无声电影出现的时间 浏览:181
电信的app开票金额在哪里看 浏览:817
程序员薪资占比重图表 浏览:912
女主叫姜 浏览:314
催眠控制芯片bl 浏览:946
pdf复制后乱码 浏览:869
检测无法连接到加密锁授权服务器 浏览:532
新建文件夹2星空 浏览:581
同性恋激情电影 浏览:435
手机怎么访问自己搭建的服务器地址 浏览:361
运算法则题库 浏览:989
做程序员最开心的方式 浏览:748