STC8H系列—14.16位高级PWM定时器实例呼吸灯教程

一、概述:

   STC8H系列单片机的16位高级PWM定时器是STC各类单片机PWM控制功能最强的系列之一,当然也是控制最复杂的单片机系列。通过控制内部16位定时器和时钟系统可以对外输出任意频率和占空比的PWM波,以下的呼吸灯就是一个PWM波输出案例,高速输出的PWM波通过改变波形的占空比,实现LED灯不同亮度的显示。高级PWM的PWMA组可以输出互补/对称/带死区控制的PWM波,这一项功能是特别针对无刷电机控制定制的功能,通过对称输出实现H桥的控制达到变频输出的目的。此外还可捕获上升、下降沿,测量波形的周期、占空比值,及脉冲宽度等等。

二、知识链接:

   1、时基单元:

CK_PSC为时钟源,过分频器后得到CK_CNT用来计数,PWMA_ARR用来控制脉冲的周期,PWMA_CNTR用来计数。

当计数器的值到达PWMA_ARR时,计数器的值清零,又重新开始计数。

关于时钟源CK_PSC的来源有4种来源,通过PWMA_SMCR的SMS位控制,其中ECE为外部时钟使能,当使用外部时钟模式时即必须将ECE置1。

2、PWM模式:

当PWMA_CR寄存器中的DIR=0时,执行向上计数。

当PWMA_CNT< PWMA_CCR1时,PWM输出高电平,否则输出低电平。

3、高级PWM功能脚的切换:

以下的实例开启P1.0与P1.1作为PWMA通道1输出端

4、输出使能端:

开启EON1P位置1(P1.1)与开启EON1N位置1(P1.2)

5、捕获比较使能寄存器:

开启CCINE=1和CC1E=1使能PWMA通道1比较器工作。

6、捕获比较模式寄存器:

选择OC1M=110为PWM模式1,OC1PE=1开启PWM的预装功能:

7、频率计算:

例如:当SYSclk=12M=12000000Hz时,求占求比为1/2,50Hz的PWM频率输出,计算各寄存器的配置能数PWMA_PSCR分频值,PWMA_ARR周期值,PWMA_CRR的占空比值。

解:

1、求出分频倍数

12000000/50=240000

2、求出组合分频:

(PWMA_PSCR+1)*( PWMA_ARR+1)=(3+1)*(59999+1)

PWMA_PSCR=0x0003

PWMA_ARR=0xEA5F

3、求出占空比的值:

PWMA_CRR=1/2*59999=0x752F

三、实验平台搭建:

   1、MCU:STC-打狗棒系列核心实验板 V2.3

   2、实验板平台:德飞莱LY-51s 

   3、硬件连接表:

         P10---------->LED1

         P11---------->LED2

四、测试源代码:

#include <STC8H.h>

#include "intrins.h"

void Delay1ms(unsigned char x);//当主时钟频率为12M,1ms延时为基准

void init_IO();//初始化IO

void init_PWM();

void main()

{

    unsigned char i=0;

   P_SW2 |= 0x80;  //扩展寄存器XFR访问使能

      init_IO();

      init_PWM();

   while(1)

    {

        i=0;

        //LED由亮到暗

       for(i=0;i<=254;i++)

        {

         Delay1ms(20);

         PWMA_CCR1L = i;

        }

        //LED由暗到亮

        for(i=254;i>0;i--)

        {

         Delay1ms(20);

         PWMA_CCR1L = i;

        }

      }

}

void init_IO()

{

   RSTCFG=0x50;  //开启RST键进入ISP模式

   P0M1 = 0x00;   P0M0 = 0x00;   //设置P0口为准双向口

   P1M1 = 0x00;   P1M0 = 0x00;   //设置P1口为准双向口

   P5M1 = 0x00;   P5M0 = 0x00;   //设置P5口为准双向口

}

void init_PWM()

{

      PWMA_CCMR1 = 0x68;

     PWMA_CCER1 = 0x55;

   PWMA_PSCRH=0x00;

   PWMA_PSCRL=0xB7;

  

      PWMA_ARRH = 0x00; //设置周期时间

    PWMA_ARRL = 0xff;

//    PWMA_ARRH = 0xFF; //设置周期时间

//    PWMA_ARRL = 0xFF;

     

     PWMA_ENO |= 0x01; //使能输出

     PWMA_ENO |= 0x02; //使能输出

     PWMA_PS = 0x00;  //高级 PWM 通道输出脚选择位

     

     PWMA_BKR = 0x80; //使能主输出

    PWMA_CR1 |= 0x01; //开始计时

  

      PWMA_CCR1H = 0x00; //设置占空比时间

    PWMA_CCR1L = 0x00;

// PWMA_CCR1H = 0x3F; //设置占空比时间

//   PWMA_CCR1L = 0xFF;

}

void Delay1ms(unsigned char x)    //@12.000MHz

{

   unsigned char i, j;

   while(x--)

   {

      i = 16;

     j = 147;

      do

      {

        while (--j);

      } while (--i);

   } 

}

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STC8H1K是一种16高级PWM控制器,具有强大的功能和灵活性。 首先,16表示该PWM控制器的计数器宽度是16,可以提供更大的计数范围和更精确的控制。这意味着它可以提供更高的分辨率和更平滑的PWM输出高级PWM代表该控制器具有许多高级功能,可以进行更复杂的PWM控制。它支持多种PWM波形,如方波、锯齿波和三角波,并且可以自定义波形形状。 此外,STC8H1K还具有多个PWM输出通道,可以同时控制多个PWM信号。这对于需要同时控制多个设备或执行多个任务的应用非常有用。 该控制器还具有多种PWM控制模式,例如定时器模式和逻辑比较模式。这些模式使得用户可以根据具体需求进行灵活的PWM控制设置。 STC8H1K还具有可编程的脉宽调制频率和占空比,用户可以自定义PWM信号的频率和占空比。这使得它可以适应不同的应用需求。 此外,STC8H1K具有丰富的外部接口和中断功能,可以与其他外部设备进行通信和控制。这极大地增强了其可扩展性和适应性。 总之,STC8H1K是一种功能强大、灵活多样的16高级PWM控制器,适用于广泛的应用领域,包括机器人技术、电机驱动、照明控制等。 ### 回答2: STC8H1K是一款16高级PWM控制器。PWM即脉宽调制,是一种通过调节信号的脉宽来控制电路输出功率的技术。16表示这款控制器可以处理的脉宽的数为16,这意味着可以精确调节脉宽的范围更大,使得控制器能够更精确地控制输出电路的功率。 STC8H1K作为一款高级PWM控制器,具有多种功能和特点。首先,它具有高控制精度,可以实现更精确的电路功率调节。其次,它支持多种PWM输出模式,可以根据不同的应用场景选择合适的模式。同时,它还具有多通道输出功能,可以控制多个输出通道的脉宽。 另外,STC8H1K还具有丰富的外围设备和接口功能。它支持多种输入信号源,包括模拟信号和数字信号,可以接收不同类型的输入信号来控制脉宽。此外,它还具有丰富的通信接口,如UART、SPI、I2C等,可以与其他设备进行数据交互。 在应用方面,STC8H1K广泛应用于工业控制、电机驱动、电源控制等领域。它可以通过调节脉宽来控制电机的速度、灯光的亮度等,实现精确控制。同时,它还支持硬件和软件相结合的PWM调节方式,通过调节控制器内部的寄存器和外部引脚来实现不同的控制模式。 综上所述,STC8H1K是一款功能丰富的16高级PWM控制器,具有高控制精度、多种输出模式和通道以及丰富的外围设备和接口功能。在工业控制、电机驱动和电源控制等领域有着广泛的应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值