Ⅰ 如何用单片机控制直流电机
通过与单片机相连的按键控制直流电机停启的电路如下图所示,通过P3.6口按键触发启动直流电机,P3.7口的按键触发停止直流电机的运行。由图可知,当P1.0输出高电平“1”时,NPN型三极管导通,直流电机得电转动;当P1.0输出低电平“0”时,NPN型三极管截止,直流电机停止转动。
通过单片机产生PWM波控制直流电机程序
#include"reg52.h"
#defineucharunsignedchar
#defineuintunsignedint
ucharcodetable[10]={0x3f,0x06,0x5b,
0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴数码管显示码(0-9)
sbitxiaoshudian=P0^7;
sbitwei1=P2^4;//数码管位选定义
sbitwei2=P2^5;
sbitwei3=P2^6;
sbitwei4=P2^7;
sbitbeep=P2^3;//蜂鸣器控制端
sbitmotor=P1^0;//电机控制
sbits1_jiasu=P1^4;//加速按键
sbits2_jiansu=P1^5;//减速按键
sbits3_jiting=P1^6;//停止/开始按键
uintpulse_count;//INT0接收到的脉冲数
uintnum=0;//num相当于占空比调节的精度
ucharspeed[3];//四位速度值存储
floatbianhuasu;//当前速度(理论计算值)
floatreallyspeed;//实际测得的速度
floatvv_min=0.0;vv_max=250.0;
floatvi_Ref=60.0;//给定值
floatvi_PreError,vi_PreDerror;
uintpwm=100;//相当于占空比标志变量
intsample_time=0;//采样标志
floatv_kp=1.2,v_ki=0.6,v_kd=0.2;//比例,积分,微分常数
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=20;y>0;y--);
}
voidtime_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;//开总中断
}
voidkeyscan()
{
floatj;
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);
}
floatv_PIDCalc(floatvi_Ref,floatvi_SpeedBack)
{
registerfloaterror1,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);
}
voidv_Display()
{
uintsu;
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;
}
voidBEEP()
{
if((reallyspeed)>=vi_Ref+5||(reallyspeed
{
beep=~beep;
delay(4);
}
}
voidmain()
{
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);
}
voidtimer0()interrupt1
{
}
voidtimer1()interrupt3
{
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;
}
}
Ⅱ 我想用单片机控制100个微型电机,2.2V,100mA的,应该怎么驱动电路啊
那你需要单片机有100个IO引脚啊。没有那么哪数多的单片机,你可以用锁存器来驱动,13片74HC573需要13+8个引脚,51单片机就可以。
这只是信号输出。
但是裤拆想输出100毫安的李纯首电流,那就还需要15片ULN2003来驱动了。
你的电机电压挺低,需要串联电阻才行。
至少的1W的电阻,阻值需要实验得出。
Ⅲ 单片机控制电机
这个题目很大了,如果你一个人做,工作量太大,一是要培码设计变频器,二是要设计上位机(电脑)的消棚通信程序,还有USB控制线不可能很长,需要把USB转换成485协议,这又增加配桥哪了一个设计工作。一个人虽然有这个能力,但需要太多的时间了。
建议:购买带有通信控制接口的变频器,搞清其通信协议,一般变频器没有直接使用USB的,大都是485或232,如果变频器厂家有上位机电脑控制程序最好了,自己编写太麻烦
Ⅳ 如何用设计单片机电路控制电机启动
单片机IO口败桥接三极管,三极管带动继电器,继电器直接控制小型电机,或者通过接森枯改触器控制此判大型电机
单片机的输入可以用微型按钮开关,也可以用触摸屏等
Ⅳ 如何利用51系列单片机控制电机
方法一、单片机接三极管做一个全桥控制小功率直流电机正反转,检测到红色的状态标记下来,电机转动,绿色时候标记下来,反向转动。
方法二、淘宝上购买一小的步进电机,一般直接驱动电路带着的,可以直接接在单片机的IO口上,程序的控制原理一样,电机控制做for循环,步进电机,步数即for循环次数定好,正反转的区别无非就是IO口输出的逻辑顺序不同就可以实现了。
两个方法,一个硬件上有个难度,一个是软件上。但是都是很简单的,正常的情况下花1天时间就能学会和应用。预祝成功。
ps:纯手打。。
Ⅵ 单片机控制电机
1、用到什么功能,应该是取决于单片机本身的特征,有些也要用到ADC或内置比较部分.
2、常规设计是,6个IO口控制无刷电机的转动,3个IO口检测过零信号,加上一些辅助的IO,楼主就可以算一下了
如下图
Ⅶ 电子式压力传感器的信号通过 单片机采集处理后 能控制小型电动机吗
电子式压力传感器的信号通过单片机采集处理后能控制小型电动机吗?
答:可以控制小型电动机。
而且,李绝清可以控制任何宏渣可以控制的东西。
大概可以输出几伏电压?
你想输出多少伏的电压,就能输出多少伏的电压,只要你能提供这个电压。
给你提供一个简单的电路图。哪前
图中的Vcc,你可以任意设置。
Ⅷ 单片机控制电机
单片机的IO接一个1K电阻到三极管基极,三极管发射极接电源,三极管集电极接小马达的正端,小马达负端接地.
小马达本身没有正负端,但你加上二极管后就有了正负端,上述"小马达正端"指的是小马达上二极管的负极,而"小马达负端"指的是小马达上二极管的正极,也就是将小马达上的二极管正极接地,负极接三极管的集电极.
如果这样接了局册不转,一是羡孙检查小桐派宏马达的电压是否符合电源要求,二是检查三极管是否良好,三是更换一个较小功率的三极管.三极管的功率越大,其导通电阻也越大.
Ⅸ 如何用单片机控制200个直流小电机(3V左右,不到100mA)启停,正反转(无需调速),求高手建议
哈!这到不难,就是麻烦,可用现控制发光管的方式,先扩展一堆I/O口,可用164移位寄存器最省事(因电机反应慢,就一百全串在一个串口输出端口上也只要100US就打完,不会影响到电机运行的),也可有74X73系列的锁存器(这要麻烦点)来并行扩展端口。再准备一对适合你这电机的正负电源(用正负电源是为了省很多事)这再找一堆驱动,就一般三极管都行,分别把NPN的和PNP的挂在正负电源上中间相联接到一个电机脚上(如不用正负电源就要用桥式了,如是正负电源另一脚就接到这正负电源中的公共端上),基极全串一限流电阻接到你扩的I/O端口上,OK!这时你只要给端口打上相应的信号电机就会按你的正,反,关执行了。 哈!只是注意不要打成共态导通了(在打信号时能关了这正负电源为最好)
Ⅹ 单片机是怎样控制电机的
单片机只输出信号,经过隔离电路,再经过功率开关电路驱动电机。
控制普通的三项异步电机可以单片机输出信号经三极管后驱动一个小功率继电器,由继电器来驱动交流接触器,进而控制电机,也可以单片机信号经三极管放大后直接驱动功率继电器。 方法有很多很多。至于驱动伺服,单片机端口的信号经过光耦隔离后可以直接驱动,伺服驱动器本身需要的驱动信号都是弱电信号。
单片机注意事项
一般在单片机的数据手册(Datasheet)中都会提到该单片机需要的复位信号的要求。一般复位信号的宽度应为。复位电平的宽度和幅度都应满足芯片的要求,并且要求保持稳定。还有特别重要的一点就是复位电平应与电源上电在同一时刻发生,即芯片一上电,复位信号就已产生。
不然,由于没有经过复位,单片机中的寄存器的值为随机值,上电时就会按PC寄存器中的随机内容开始运行程序,这样很容易进行误操作或进入死机状态。