提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
各个厂家单片机现在都集成了PWM功能,出于成本原因和偶然间看到STC8H的高级PWM,决定分析下STC在低成本下的功能使用,并简单分析下代码和测试结果。
由于官方说STC8H系列,是目前 STC 功能最强的 PWM,可输出互补/对称/带死区的 PWM 波形。所以这里重点分析下SPWM。
提示:以下是本篇文章正文内容,下面案例可供参考
一、首先看下STC 目前有三种硬件 PWM
1,兼容传统 8051 的 PCA/CCP/PWM
可输出 PWM 波形、捕获外部输入信号以及输出高速脉冲。可对外输出 6 位/7 位/8 位/10 位的 PWM 波形。捕获外部输入信号,可捕获上升沿、下降沿或者同时捕获上升沿和下降沿。
2,STC8G 系列的 15 位增强型 PWM
只能对外输出 PWM 波形,无输入捕获功能。通过软件干预,可实现多路互补/对称/带死区的 PWM 波形。有外部异常检测功能以及实时触发 ADC 转换功能。
3,STC8H 系列的 16 位高级 PWM 定时器
是目前 STC 功能最强的 PWM,可对外输出任意频率以及任意占空比的 PWM 波形。
无需软件干预即可输出互补/对称/带死区的 PWM 波形。
能捕获外部输入信号,可捕获上升沿、下降沿或者同时捕获上升沿和下降沿,
测量外部波形时,可同时测量波形的周期值和占空比值。
有正交编码功能、外部异常检测功能以及实时触发 ADC 转换功能。
二、高级 PWM 代码分析
1.模式配置
初始化模式代码如下:
PWMA_CCER1 = 0x00; //写 CCMRx 前必须先清零 CCxE 关闭通道
PWMA_CCMR1 = 0x68; //模式寄存器,
PWMA_CCER1 = 0x05; //使能寄存器,配置通道输出使能和极性
1,PWMA_CCMR1 位(7,6,5)是OC1M[2:0],
当为110=PWM模式1
在向上计数时,当PWMn_CNT<PWMn_CCR1时,OCnREF输出高,否则OCnREF输出低
在向下计数时,当PWMn_CNT>PWMn_CCR1时,OCnREF输出低,否则OCnREF输出高
当为111=PWM模式2
在向上计数时,当PWMn_CNT<PWMn_CCR1时,OCnREF输出低,否则OCnREF输出高
在向下计数时,当PWMn_CNT>PWMn_CCR1时,OCnREF输出高,否则OCnREF输出低
所以初始化配置PWMA_CCMR1 为,PWM模式1,开启 PWM1_CCR1 寄存器的预装载功能。
2,PWMA_CCER1 (使能寄存器)位(2,0)是CC1NE,CC1E
PWM1_Duty = 600;
//PWMA_CCER1 = 0x01; CC1E -> p10-p11=2.9v-5.0v
//PWMA_CCER1 = 0x05; CC1NE -> p10-p11=5.0v-2.9v
//PWMA_CCER1 = 0x05; CC1NE+CC1E -> p10-p11=2.9v-2.1v
此处验证了互补/对称的功能
2.配置周期时间
PWMA_ARRH = (u8)(PWM_PERIOD >> 8); //设置周期时间
PWMA_ARRL = (u8)PWM_PERIOD;
3.配置PWMA_ENO输出使能寄存器
PWMA_ENO = 0x00; //输出使能寄存器
PWMA_ENO |= ENO1P; //使能输出
PWMA_ENO |= ENO1N; //使能输出
3.配置PWMA_PS高级 PWM 通道选择寄存器
PWMA_PS = 0x00; //高级 PWM 通道输出脚选择位
PWMA_PS |= PWM1_1; //选择 PWM1_1 通道
4.配置PWMA_BKR刹车寄存器
PWMA_BKR = 0x80; //刹车寄存器,使能主输出
PWMA_CR1 |= 0x01; //控制寄存器,开始计时,1:使能计数器。
总结
未完待续!