第6课:PWM定时器

发布者:等放假的Lwj最新更新时间:2016-08-06 来源: eefocus关键字:PWM  定时器 手机看文章 扫描二维码
随时随地手机看文章
PWM是定时器全名叫脉宽调制定时器。

主要有2个功能:

1定时

2计时

在我们开发板上有5个pwm定时器。TIMER0到TIMER4。

其中TIMER4是没有输出的,作为内部时钟使用。而其他四个是GPB0~3的复用引脚功能。

四个中TIMER0还有个叫死区发生器的东西,用来对大功率的外设来限流的。

再提一个概念。叫占空比。即一个周期内高电平占总的电平时间的比率。这个就是我们说的脉宽调制。

现在来分析内部结构。

定时器用的是PCLK的时钟,我们的开发板PCLK是50Mhz。这个频率太高了,速度太快了,不方便我们计时。所以我们内部有2个分平器。

第一个分屏器是Timer0和1共享的。另外一个是3,4,5共享。可以分成1/2~1/16 。第2个分屏器是8位。每个定时器都有单独的。

之后。

再来介绍下内部的计数方法。内部有两个寄存器,TCNT 是计数递减的 减到0会重新reload TCNTB中的值 TCMP是当TCNT中的值与TCMP的值相同时,高低电平要颠倒。这个就是调节占空比的方法。而TCNT到0的时候 TCMP也会去reload 不过load的是TCMPB中的值。

计算时间的公式:例如我们要算0.5s

0.5*( PCLK / (prescale*devide) ) = TCNTB

注意在第一次开始计数的时候,需要手动导入TCNT的值。

步骤如下:

1设置数值到TCNTB

2打开手动更新位

3打开自动更新为和使能PWM位。

 

以下写个程序:

用PWM的实现小灯0.5秒闪,0.5秒暗。分屏1是1/4 分屏2是100 计数是0xffff。

以下是pwm.c

#include"s3c2440.h"
void init_led()
{
        rGPECON = GPE12_out|GPE13_out;
}

void init_timer0()
{
 rTCFG0 = 0x63;
 rTCFG1 = 0x1;
 rTCNTB0 = 0xFFFF;
 rTCON = 0xa;                             //手动载入
 rTCON = 0x9;                             //自动载入
}

void init_irq()
{
        rINTMOD = 0;
        rINTMSK = ~(1<<10);          //设置了计数器TIMER0的屏蔽位打开。
}

int main()
{
 init_led();
 init_irq();
 init_timer0();
 while(1);
}

以下是中断服务程序:

#include"s3c2440.h"

void ISR_Handle()
{
 rGPEDAT ^= (3<<12);                    //用异或的方式可以实现执行一次点亮再执行一次灭灯
 rSRCPND = 1<<10;                       //清中断
 rINTPND = 1<<10;
}

其他makefile crt0.s pwm.lds s3c2440.h 文件省略。

整个程序还是比较简单的。

但是我们并没有利用到它的PWM功能。因为我们的引脚并没有连接到其他外设上,而是在GPB0~3复用的位置。所以要利用PWM,我们只能采用模拟的方法。例如下面写了一个利用小灯交替闪烁的方法,制造出小灯渐渐变亮和小灯渐渐变暗的视觉。

#include"s3c2440.h"

void init_led()
{
 rGPECON = 5<<24;
}

void delay()
{
 long i=200;
 do{
  i--;
 }
 while(i>0);
}

void pwm_like(int duty)
{
 int i,j;
 rGPEDAT = 0; 
 for(i=0;i

  delay();
 rGPEDAT = 3<<12;
 for(j=0;j<100-duty;j++)
  delay();

int main()
{
 init_led();
 while(1){
  int duty1=0;
  int duty2=100;
  while(duty1<=100){
   pwm_like(duty1);                           //这边是控制占空比从0到100
   duty1++;       
  }
  while(duty2>=0){
   pwm_like(duty2);
   duty2--;
  }
 }
 return 0;
}  

关键字:PWM  定时器 引用地址:第6课:PWM定时器

上一篇:第5课:ARM的中断
下一篇:第7课:DMA

推荐阅读最新更新时间:2024-03-16 15:03

stm8s定时器tim4使用方法解析
  stm8s定时器TIm4概述   该定时器由的8可位自动重载的向上计数器所组成,它可以用来作为时基发生器,具有溢出中断功能。   TIM6同时钟信号控制器用于定时器同步和级联。   STM8通用定时器TIM4的主要功能   TIM4功能包括:   1、8位向上计数的自动重载计数器;   2、3位可编程的预分配器(可在运行中修改),提供1,2,4,8,16,32,64和128这8种分频比例。   3、中断产生   –在计数器更新时:计数器溢出   STM8通用定时器TIM4功能概述      (TIM4框图 )   中断   通用定时器包括2个中断源:   更新中断(溢出,计数器初始化);   触发信号输入(
[单片机]
stm8s<font color='red'>定时器</font>tim4使用方法解析
内核定时器用于按键处理
#include linux/module.h #include linux/kernel.h #include linux/fs.h #include linux/init.h #include linux/delay.h #include linux/device.h #include linux/irq.h #include linux/gpio.h #include linux/interrupt.h #include linux/sched.h #include linux/poll.h #include asm/uaccess.h #include asm/irq.h #include asm/io.h #includ
[单片机]
基于PWM控制直流电机调速的设计
实验现象:通过S2,S3按键,增加/减小PWM,控制LED灯组的亮灭,同时当高于或低于PWM时,蜂鸣器将工作。 #include reg52.h #define uchar unsigned char #define uint unsigned int sbit S2=P3^4;//PWM+ sbit S3=P3^5;//PWM- sbit fm=P2^3;//蜂鸣器 uchar pwm,num; void delay(uint ms)//延时 { uchar i; while(ms--) { for(i=0;i 120;i++); } } void bee()//蜂鸣器 {
[单片机]
【STM8L】STM8L之timer2产生PWM
一、简介 本文介绍STM8L系列如何使用timer2产生38K频率的PWM。 其中,本文使用的是timer2的第1通道(PB0)。 二、实验平台 编译软件:IAR for STM8 1.42.2 硬件平台:stm8l101f3p6开发板 仿真器:ST-LINK 库函数版本:STM8L_STMTouch_Lib_V1.1.0 三、版权声明 四、实验步骤 1、工程中添加自己写的定时器2的驱动 1)写一个驱动GUA_Timer2_PWM.c (存放在工程的USER文件夹中) //********************************************************
[单片机]
【STM8L】STM8L之timer2产生<font color='red'>PWM</font>
STM32CUBEIDE(11)----输出PWM及修改PWM频率与占空比
概述 本章STM32CUBEMX配置STM32F103输出PWM,并在示波器中查看效果。 需要样片的可以加Qun申请:615061293。 生成例程 使用STM32CUBEMX生成例程,这里使用NUCLEO-F103RB开发板 查看原理图,PA8设置为PWM输出管脚。 生成独立的文件。 工作过程 查看下面工作原理图可以得知,时钟可以由内部Internal clock产生或者外部ETR。 同时可以设置复位,使能,向上/向下,计数。 查看下列文档可以得知,定时器主要有TIMx_CNT、TIMx_PSC、TIMx_ARR、TIMx_RCR控制。 同时预分频器(TIMx_PSC)范围位1-65535。 查看TIMx
[单片机]
STM32CUBEIDE(11)----输出<font color='red'>PWM</font>及修改<font color='red'>PWM</font>频率与占空比
一种新颖的自适应PWM逆变电源
    摘要:详细介绍一种新颖的PWM逆变电源的数字控制方法——自适应重复控制。该方法的应用使系统具有自适应能力,能自动地消除由于未知的负载周期性扰动而产生的输出交流周期畸变,这为解决逆变电源在整流性负载下输出波形畸变较大的问题提供了一条良好的途径。     关键词:逆变电源  PWM  自适应                         A Novel Self-adaption PWM Inverter     Abstract: This paper describes a novel pulse width modulated(PWM) inverter based on digital c
[电源管理]
STM32之关于通用定时器的输出比较方式
1.简单介绍 对于STM32中通用定时器的应用,定时器可以测量输入信号的脉冲长度(输入采集)或者产生输出波形(输出比较和PWM)。 如果小伙伴对于STM32的PWM不满意,因为相位无法控制,只能改变占空比。所以如果想改变PWM的相位的话,我们就可以用到输出比较方式了。 2.知识的架构 1)输出比较:打开一个TIMx计数器,再打开TIMx的一路或几路输出比较器(共4路),都配置好以后,计数器开始计数,当计数器里的值和比较寄存器里的值相等时,产生输出比较中断,在中断中将计数器中的值读出,与翻转周期相加再写道比较寄存器中,使得和下一个事件有相同的翻转周期。 大致意思为打开计数器后,计数值不断增加,到增加到比较寄存器的值时,电平翻转,也会
[单片机]
STM32 使用TIM2_CH1(PA15) 输出10K PWM信号
PA15- TIM2 Remap CH1 1.apb_init() RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); 2.gpio_init() #define PWM_GPIO_IDX 8 //PA15 #define PWM_GRP GPIOA #define PWM_PIN GPIO_Pin_15
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved