51单片机怎么利用两个定时器调制两路PWM波控制两个直流减速电机

作者&投稿:侯静 (若有异议请与网页底部的电邮联系)
用PWM怎么调节直流电机的速度 用两个定时器怎么 写程序?~

用PWM输出引脚驱动驱动晶体管或MOSFET, 以脉宽调制的方法实现直流电机工作电压调节,即调节了电机速度。 一般单片机都有PWM功能,不需要使用定时器,用定时器的方法产生PWM既耗费CPU资源,精确度差,速度慢. CPU忙得满头汗执行中断去产生PWM。 而芯片内部的PWM是硬件逻辑部件,你只需初始化好以后,给它一个数值(控制脉冲占空比)即可自动产生PWM波形。

可以,如wang17077869所述差不多。但对于你提的问题,可以作如下细化:
1.加减速问题。用PWM(直观点说就是一串连续的高低电平)可以做到,占空比越大,电压越高,速度越快。
2,独立问题。这个可以用一个定时器来做,其实,就是用这个定时器来产生两路独立的PWM,而这两路PWM信号分别给两个电机,这样两个电机就相互独立。
下面是我写的一个小程序,在protues中仿真过,相互独立。
下面是定时器的程序:
//两个电机的速度用参数G_pwm_num0,G_pwm_num1来控制,out1~out4分别接两个电机(具体对应关系你看一下就明了)。

#include#include
#define uchar unsigned char
#define uint unsigned int
sbit out1=P2^0;
sbit out2=P2^1;
sbit out3=P2^2;
sbit out4=P2^3;
bit pwm0;bit pwm1;
bit o1,o2,o3,o4;

uchar G_pwm_num0=50;//(占空比为50%),这两个参数的最大值为100,因为下面count<=100,可以改,但不要太小也不要太大,这为什么,希望你自己想一下。)
uchar G_pwm_num1=50;
uchar count;
void time_init()
{
TMOD=0x21;
EA=1;
TH1=156;
TL1=156;
TR1=1;
ET1=1;
ET0=1;
TH0=0;
TL0=0;
}
void time1() interrupt 3
{
count++;
if(count<G_pwm_num0)
pwm0=1;
else pwm0=0;
if(count<G_pwm_num1)
pwm1=1;
else pwm1=0;
if(count==100) //这里的占空比是这样算的(G_pwm_num0/100,G_pwm_num1/100)
{
count=0;

}
else _nop_();
out1=o1&&pwm0;//left+
out2=o2&&pwm0;

out3=o3&&pwm1;//right+
out4=o4&&pwm1;

}void main()
{
time_init();
G_pwm_num0=60;//占空比为60%,可自行定义大小 o1=1;
o2=0;//当两者都为0时,停止
G_pwm_num1=30; o3=1;
o4=0;
while(1);
}

说明:那程序怎么控制转向呢?
相信你也知道 ,电机的两个脚正接反接时转向是不一样的。
在上面的程序中,o1,o2是电机的转向控制参数。假如正转时o1=1,o2=0;那反转时就反过来,o1=0,o2=1;这样当你要转速时改变这两个参数的值就可以了。


希望对你有帮助,还有问题,我们可以相互探讨一下,呵呵。

下面是仿真图:






两张图的占空比不一样的,而且相互独立。




利用定时器到时间就会进入中断函数,这就可以判断是否到标志时间,这是就可以然输出pwm引脚的电平发生偏转

利用定时器到时间就会进入中断函数,这就可以判断是否到标志时间,这是就可以然输出pwm引脚的电平发生偏转

俩定时器模拟pwm输出,高级的mcu的定时器自带pwm输出

51单片机怎么开两个定时器中断???
答:将void timer1(void) interrupt3 这句改为 void timer1(void) interrupt 3 interrupt和3之间要有空格

51单片机同时使用两个计时器的问题
答:根据寄存器来,tmod=0x01如上图,把0x01装到tmod寄存器中,产生相应的工作方式。意思:定时器t0,工作方式1(16位定时器),有什么不懂的可以再问我。希望帮到你了。

如何利用51单片机输出PWM波30
答:用两个定时器的方法是用定时器T0来控制频率,定时器T1来控制占空比。大致的的编程思路是这样的:T0定时器中断让一个I0口输出高电平,在这个定时器T0的中断当中起动定时器T1,而这个T1是让IO口输出低电平,这样改变定时器T0的初值就可以改变频率,改变定时器T1的初值就可以改变占空比。用一个定时器时(...

51单片机T的两个计时器怎么同时使用?下面是我的代码,为什么实现不了...
答:是的,EA是用来开总中断的,如果EA=0则所有可用中断都无用。EA相当于使能信号。必须EA=1时中断才被打开。具体开那个还得看具体中断的使能信号,如定时的TR0,TR1信号。

51 单片机 2个定时器 同时工作
答:你的两个定时器的时间都设成一样的了,当两个定时器到了点后,单片机到底该进行处理那一个啊,所以要么你修改时间,要么你把IP优先寄存器设施下PT0或者PT1等于1,就行了。

51单片机可以同时使用两个timer0吗
答:该情况不可以。51单片机可以同时使用两个定时器,分别是timer0和timer1,但不可以使用两个timer0。定时器0和定时器1都有自己的寄存器,可以独立设置计时器的时钟源、计时模式和计时时间。同时使用两个定时器可以实现更复杂的计时功能,如同时计时两个不同的事件。

51单片机同时使用两个计时器的问题
答:但不知道,这是和谁学习的,数码管显示要用定时器定时,中断一次显示一次,这可是仿真,运行速度肯定比实物要慢,所以,就会有闪烁的。其实,你的主程序中有计算四位数的程序 TEMP[0]=NUMBER[num/1000];TEMP[1]=NUMBER[num/100%10];TEMP[2]=NUMBER[num/10%10];TEMP[3]=NUMBER[num%10];这是...

用51单片机来写pwm程序,用两个定时器中断,思路是怎样的?
答:一个定时器做总脉宽(可以做随意的频率,也可固定),一个定时器做变化脉宽就可以了,

怎样使用51单片机的定时器?
答:51单片机定时器的使用 51单片机定时器/计时器的使用 步骤:1、 打开中断允许位:对IE寄存器进行控制,IE寄存器各位的信息如下图所示:EA: 为0时关所有中断;为1时开所有中断 ET2:为0时关T2中断;为1时开T2中断,只有8032、8052、8752才有此中断 ES: 为0时关串口中断;为1时开串口中断 ET1:...

51单片机两个定时器能共用吗
答:可以。可以运行,在执行A中断程序时,来了B中断,A的中断优先级高于B,B的中断请求将不被得到响应,51单片机有两个定时器,这两个定时器可以工作,互不影响。