C51单片机定时器功能的定时器T0能实现下面的功能吗?即让它定时五秒,又让它发出PWM信号。

本文使用单片机定时器功能T2定时器这个定时器大多数人很少使用它,而却不知道它有一个非常优秀的功能就是定时自动重载功能利用这个功能能够更为精确的对定时器进行设定,可控制精度在1个机器周期(12M晶振下就是1us),T0、T1都需要手动重载,其精度无法很好的控制 /*------------------------------ 硬件需求: 12T系列单片机定时器功能(8051内核) 拥有T2定时器 12M时钟晶振 P2_0输出控制 舵机角度范围在

我想实现的是在一段时间里由定時器控制pwm改变占空比实现电动机自动多段调速我试了一下匀速两段调速可以实现再多了就实现不了了求大神指点在线等挺急的下面是程序峩没有财富值TT#/usercenter?uid=8bba05e79c815&teamType=1">jz100001

用一个定时器生成最小时间基准软件中用在定时器中断程序里用多个寄存器对这个时间基准进行不同周期的计数,就可以實现多个计数器的功能进而实现多段PWM的应用

PWM这个功能在飞思卡尔、STM32等高档的單片机定时器功能内部有专用的模块用此类芯片实现PWM功能时只需要通过设置相应的寄存器就可实现周期和占空比的控制。但是如果要用51單片机定时器功能的话也是可以的,但是比较的麻烦此时需要用到内部定时器来实现,可用两个定时器实现也可以用一个定时器实現。

用两个定时器的方法是用定时器T0来控制频率定时器T1来控制占空比。大致的的编程思路是这样的:T0定时器中断让一个I0口输出高电平茬这个定时器T0的中断当中起动定时器T1,而这个T1是让IO口输出低电平这样改变定时器T0的初值就可以改变频率,改变定时器T1的初值就可以改变占空比

下面重点介绍用一个定时器的实现PWM的方法。因为市面上的智能小车所采用的电机大多数为TT减速电机通过反复的实验,此电机最佳的工作频率为1000HZ(太高容易发生哨叫太低电机容易发生抖动),所以下面以周期为1ms(1000HZ)进行举例要产生其它频率的PWM波,程序中只需作簡单修改即可

用一个定时器时(如定时器T0),首先你要确定PWM的周期T和占空比D确定了这些以后,你可以用定时器产生一个时间基准t比洳定时器溢出n次的时间是PWM的高电平的时间,则D*T=n*t类似的可以求出PWM低电平时间需要多少个时间基准n。

因为这里我们是产生周期为1ms(1000HZ)的PWM所鉯可设置中断的时间间隔为0.01ms,然后中断100次即为1ms。在中断子程序内可设置一个变量如me,在中断子程序内有三条重要的语句:1、当me>=100时,me清零(此语句保证频率为1000HZ)2、当me>n时(n应该在0-100之间变化开),让单片相应的I/O口输出高电平当 time<n 时,让单片相应的 I/O 口输出低电平 此时占涳比就为%n。

2、程序1使单片机定时器功能的I/O口输出固定频率的PWM波

下面按上面的思路给出一个具体程序:

/*程序名:单片机定时器功能输出固萣频率的PWM波*/

TR0=0;//赋初值时,关闭定时器

2、关于占空比的确定:此时我们将来time的值从0-100之间进行改变就可以将占空比从%0-%100之间进行变化,上面程序中time《=20时PWM1=0; else PWM1=1;意思就是%20的时间输出低电平%80的时间输出高电平,即占空比为%80如需得到其它占空比,如%60只需将time的值改为40即可。(程序为if(time《=40) PWM1=0;else

当然编写程序时也可以定义一个标志位如flag根据flag的状态决定输出高平还是低电平,假设定义flag=1的时候输出高电平用一个变量去记录定時器中断的次数,每次中断就让记录中断次数的变量+1在中断程序里面判断这个变量的值是否到了n,如果到了说明高电平的时间够了那麼就改变flag为0,输出低电平同时记录中断变量的值清零,每次中断的时候依旧+1根据flag=0的情况跳去判断记录变量的值是否到了n如果到了,说奣PWM的低电平时间够了那么就改flag=1,输出改高电平同时记录次数变量清零,重新开始如此循环便可得到你想要的PWM波形,这种方法我们这裏不在举例请自己去试着书写。

3、程序2使用单片机定时器功能I/O口输出PWM波,并能通过按键控制正反转

在程序中我们通常需要控制电机的囸反转如通过一个按键控制正反转,此时我们也可以设置一个标志位如flag在主程序中当按键每次被按下时,flag相应取反然后在子程序中當flag为1时,进行正转程序当flag为0时执行反转程序。下面的程序功能为单片机定时器功能I/O口P2^0、P2^1输出1000HZ占空比为%50,并能过P3^7按键控制正电机的正反轉

/*程序名:PWM直流电机调速*/

/*功能:直流电机的PWM波控制,可以通过按键控制正反转*/

delayxms(2);//此处时间不能太长否者会的中断产生冲突

TR0=0;//设置定时器初值期间,关闭定时器

4、程序4、使单片机定时器功能输出PWM并能控制正反转和实现调速

为了使大家彻底掌握此方面,下面再给出一个复雜一点的程序实现的功能为通过一个按键控制正反转并通过另外两个按键使之可以在0到20级之间调速的程序。

/*程序名:PWM直流电机调速*/

/*直流電机的PWM波控制可以通过按键控制正反转并在0到20级之间调速*/

delayxms(2);//此处时间不能太长,否者会的中断产生冲突

delayxms(2);//此处时间不能太长否者會的中断产生冲突

delayxms(2);//此处时间不能太长,否者会的中断产生冲突

TR0=0;//设置定时器初值期间关闭定时器

5、利用单片机定时器功能输出PWM简单控淛小车直行

相信通过上面的讲解,大家已经能够很好的撑握如何利用51单片机定时器功能产生PWM波下面给出一个程序通过单片机定时器功能兩个I/O口输出PWM波,让小车直行

TR0=0;//赋初值时,关闭定时器

我要回帖

更多关于 单片机定时器功能 的文章

 

随机推荐