如何用51单片机来产生pwm波来驱动5v的小电机
8050,因为它是NPN管,必须由单片机输出高电平,并为其提供基极电流。
为此,必须加上上拉电阻,否则基极电流不足。
所以,这种电路不合理。
应该采用PNP的8550。接法如下:
单片机引脚经过2K电阻接8550 B极,E极接5V+,C极接电机正极,电机负极接地。
这种接法,单片机输出低电平,为其提供基极电流。不用加上拉电阻。
51单片机产生PWM波,再通过三极管驱动放大即可。
至于51单片机如何实现PWM,推荐一篇文章自己看看,也可自己百度一下“51 PWM”,有很多现成的文章,其中包含有源程序的。
调速程序可以用定时器做,首先设置两个定时用的全局变量,一个代表高电平时间一个代表低电平时间。
先给定时器初值(既那两个全局变量中的一个),溢出后触发中断,在中断里设置另另一个初值并且取反PWM的输出端口,两个初值轮流给定时器,就可以任意调整占空比,占空比取决于两个初值。
PWM输出后,驱动三极管,后面接上电机就是了。
按键调速也不难,看你具体的按键处理程序了,通过获得的键值控制上面说的两个全局变量就可以了。
测速可以用计数器做,得到计数值处理一下即可。
如果是自动调速,那需要做点简单的算法程序。
反正51有那么多I/O口,再来一个转速显示什么的也可以。
1 软件延时法
利用软件延时函数,控制电平持续的时间,达到模拟pwm的效果。
程序如下:
#include<reg52.h>
sbit pwm=P1^0;
main()
{
while(1)
{
pwm=1;
delayus(60);//置高电平后延时60us,占空比60%
pwm=0;
delayus(40);
}
}
void delayus(uint x)
{
while(x--);
}
可见,用这种延时函数的方法就能简单地模拟出pwm输出。但是这种方法的缺点也相当明显。当程序除了要输出pwm波还要执行其他操作比如键盘扫描、显示等操作时,需要占用CPU一定的机器周期,这样就会影响pwm的准确度。现在很少会用到这种方法,接下来要介绍的是比较常用的方法。
2 定时器产生pwm
这种方法利用了定时器溢出中断,在中断服务程序改变电平的高低,在程序较复杂、多操作时仍能输出较准确的pwm波形。
2.1 注意事项
2.2.1中断服务程序的内容。
一般来说中断服务程序只完成改变标志位、转换高低电平的功能,如果中断服务程序中有太多的操作会影响pwm波的输出,尤其是除法、取余、浮点数运算会占用大量的机器周期,应在中断外完成运算。
2.2.2定时器装入初值的问题。
装入初值不能太接近于定时器的溢出值。如我们使用定时器方式1,最多能计65536个数,假设我们转入的初值为65534,那么定时器计两个数就会进入中断,这样会使程序紊乱而其他功能无法正常地执行,所以一般要留50-100个数的裕量。
2.2 定时器工作方式
在定时器工作方式的选择上,可以选择定时器的工作方式0、1、2都可以,本文采用的是工作方式1,即16位定时器,这样可以获得较宽的调频范围。
2.3 定时器初值的计算
设占空比为α,频率为f
产生高电平时装入定时器高8位的值应为
产生高电平时装入定时器低8位的值应为
显然,产生低电平时的公式只要把α换成(1-α)就行了。
然而在51单片机中,浮点数运算需要消耗cpu很长的时间,为了提高程序效率,通常用100倍的占空比来计算。同时,要注意数据类型,避免超出范围,影响计算结果。
修改后的公式如下:
a为100倍占空比,fr为0.01倍频率
TH0 = (65535-a*100/fr)/256;//高位初值
TL0 = (65535-a*100/fr)%256;
同样,低电平的公式只需把a换成(100-a)即可。
注:T0_H , T0_L , T1_H , T1_L 均用于暂时存储初值,进入中断服务程序后直接给寄存器TH0、TL0赋值,避免了在中断中计算。
51没有硬件的PWM,得全靠软件模拟。调速程序可以用定时器做,首先设置两个定时用的全局变量,一个代表高电平时间一个代表低电平时间。
先给定时器初值(既那两个全局变量中的一个),溢出后触发中断,在中断里设置另另一个初值并且取反PWM的输出端口,两个初值轮流给定时器,就可以任意调整占空比,占空比取决于两个初值。
PWM输出后,驱动三极管,后面接上电机就是了。
按键调速也不难,看你具体的按键处理程序了,通过获得的键值控制上面说的两个全局变量就可以了。测速可以用计数器做,得到计数值处理一下即可。如果是自动调速,那需要做点简单的算法程序。
你可以利用定时器来实现。打个比方:以一秒为单位,定时器设为50MS,这样进中断20次为一秒;设置两个变量T和U,每进中断一次T自加一,变量U由按键控制,每按一次键U自加一;在中断里,T和U相比较,当T小于U时,就叫单片机PWM输出端口为低电平,当T大于U时就叫单片机PWM输出口为高电平;同时当T自加到21时就置为0,U也是如此。这样你就可以通过按键来改变PWM波的占空比,从而改变电机转速,同时也可以根据U的值换算成电机转速值。
驱动电机的话外围电路中应该要用到数模转换芯片就是D/A(毕竟直接用51在实际中是不好驱动电机的),此外还应该用到运放,你找本书看看,有一些关于电子小制作的书上面都有完整的原理图和程序,要是你要自己研究那么你需要下载一些关于数模芯片和运放的资料
给你个网站是专门下载芯片资料pdf的
www.alldatasheet.com是个国外的网站所以资料也全是英文的
国内的有21实际IC不过资料都是比较老的
求详细解释这个51单片机PWM波原理
这个程序每一条语句你肯定能看懂,给你加注释没有必要,给你讲讲PWM的原理,你再对照程序看就明白了 你要用51产生PWM去控制LED,首先你要确定PWM的周期T和占空比D,确定了这些以后,你可以用定时器产生一个时间基准t,比如定时器溢出n次的时间是PWM的高电平的时间,则D*T=n*t,类似的可以求出PWM...
怎么51单片机定时器来模拟PWM波?
PWM的意思是“脉冲宽度调制”PWM有两个最基本的参数:频率、占空比。频率就是每秒钟电平高低变化的次数,占空比是指高电平保持时间和整个脉冲周期中的比例关系。对于用定时器来模拟,最基本的方法就是使用一个IO口循环设置其输出值为高电平和低电平。那么定时器在这里起计时作用,而且需要两个时间:高电平...
用51单片机怎么产生占空比可调的pwm波 我在网上搜的有不少但频率不高...
如果你要的话我可以晚上给你写一个。你调节是通过按键增加减少还是通过旋钮改变,如果是旋钮改变的我有现成的,只要改下平率即可。如果是按键的,给我一个晚上的时间。
用51单片机同时实现四路PWM波,(C语言)
还有种方法,来改变第一个pwm的设定值。比如放数组里一共5个设定值,分别代表你设定的高电平时间,依次替换第一个定时器里面的中端时间即可。当然,前两种都差不多,还有一种方法供你扩展:就是用两个定时器,然后按照时间去匹配修改。当然,51单片机那精度就不说了,不太确信可以达标,一个定时器进...
怎样用AT80C51单片机编写汇编程序输出pwm 通过不同的占空比控制直流电机...
51的输出是没法直接驱动电机的,电机需要有驱动电路。只能用PWM控制驱动电路,进而控制电机转向和转速。比如用P1^1和P1^2输出两路PWM信号,正向转动时P1^1输出PWM信号,P1^2输出低电平。反向转动时则相反设置。而转速则是改变PWM的占空比,即脉冲宽度与所占周期的比例,占空比为0则制动,占空比为1则全速...
用51单片机控制3路舵机
用51单片机控制三路舵机,可以采用三个I\/O口,通过定时器0产生多路PWM波。每次中断时,给计数器赋下次中断的时间。具体代码如下:void T0_time() interrupt 1 { \/\/通过定时器0产生多路PWM,每次中断赋值下一次中断的时间,\/\/两个t[]一组,在20ms周期内分时启动各路PWM高电平,TH0 = (65536 - ...
51单片机如何用一个定时器产生20KHZ占空比可调的PWM波
20kHz周期是50us,可以把某个端口赋高电平延时Xus,然后赋低(50-X)us,占空比就是(x\/50)
请问如何用51单片机驱动5v,3A电流的电机?
如果用单片机产生PWM,最简单的办法是接个低沟道电阻的VMOS管,例如 IRF250
51单片机通过pwm波控制直流电机进行调速是一定需要电机驱动吗?如果没...
是的,通过PWM波控制直流电机进行调速时,不一定需要专门的电机驱动。在一些简单的应用中,可以直接使用微控制器(如51单片机)来生成PWM信号,并通过适当的接口电路驱动直流电机。然而,这种方法可能存在一些限制,例如电流大小和驱动能力。如果没有电机驱动,单纯向电机使能引脚输入PWM波,也可以控制电机的...
求解,51单片机如何输出可调占空比的pwm信号
另外,为了进一步优化PWM输出,可以考虑使用定时器中断来控制PWM的生成。通过合理配置定时器的工作模式和计数器初值,可以精确地生成所需的PWM信号。同时,使用预计算的值进行赋值操作,可以大幅减少中断处理时间,提高系统的响应速度。总结来说,在51单片机中生成可调占空比的PWM信号时,应尽量避免在中断程序中...