STC15系列增强型PWM学习记录
之前学习使用51特殊寄存器配置成PWM去驱动舵机和电机还有呼吸灯,总结一下的知识点。
一、相关介绍(见上图标志处)
见左侧图可加深对上图文字理解,配置PWM时钟选择寄存器(PWMCKS),选择系统分频还是定时器溢出值提高时钟;配置控制寄存器(PWMCR)对IO口设定为PWM输出口;通过控制寄存器(PWMxCR)来切换引脚输出PWM波形;通过配置寄存器(PWMCFR)可单独设定初始化每一路的输出电平;通过对翻转计数器(PWMxT1和PWMxT2)配置,设定PWMx的第一次和第二次翻转的计数值。
二、程序编写流程说明
可见如下流程图,分别有查询法和中断法。
查询法:就是在不开启PWM中断的过程中,IO口持续向外输出PWM波形;
中断法:就是设置PWMxCR寄存器,使PWM在第一次翻转值或者第二次翻转值产生中断,进入pwm中断后在回到主程序继续执行。(此时PWM中断程序中不宜写太多处理程序,一般都是修改翻转值,否则影响PWM波的持续输出)。
三、部分配置寄存器说明
(1)周期CYCLE:PWM周期主要由PWM的时钟源和定时器溢出脉冲决定。
- 通过系统分频调节PWM具体周期为CYCLE=(PWM计数值)\(PWM时钟源)。简而言之就是:例如我的单片机为系统时钟为12MHZ,通过寄存器配置设置为12(11+1)分频,此时的PWM时钟为1MHZ,相当于1s计数1M个数,所以我通过设置计数值为20000,则输出频率为50HZ,从而达到调节PWM周期的效果。
- 若采用定时器调节PWM周期,通过溢出脉冲来确定分频值,具体计算方式如下:
CYCLE=(系统时钟)/(溢出脉冲)
例如:晶振频率为11.0592MHz,11059200/256000=43.2(分频基数);
65536-43=65493(0xFFD5),则TH0=0xFF,TL0=0xD5。
(2)占空比DUTY:DUTY=(PWMxT2-PWMxT1)/CYCLE*100%,如PWMxT1固定位0x0000,则只需修改PWMxT2就可改变占空比。
四、程序展示于部分说明(查询法)
1.PWM初始化函数
2.PWM波输出配置
3.PWM翻转值修改函数
(通过此程序配置可以调节PWM波形的输出和使用)
五、配置pwm寄存器需要注意事项(踩过的坑!!!)
- 配置完每一路的PWM。如果单独用的话,都可正常使用,但是一旦合在一起使用就会出现只有第一个配置的PWM路可以正常修改初始化电平,其余都修改不了或者说完全混乱了,之后借鉴了这位老哥的文章(http://bbs.21ic.com/icview-1057074-1-4.html)恍然大悟,原来是因为我首先配置的是PWM2路,然后再分别配置其他路,但一旦配置完PWM2路,PWM的计时器就会开始启动,导致其他还未配置的PWM路无法控制输出的初始化电平。所以解决办法就是再PWM初始化配置将所有的PWMxT1和PWMxT2,将其设置位一个周期,这样问题就迎刃而解了(具体可看上面代码)。
- 如下图这是手册里的一段话,十分重要,如果配置时忘记了,会导致输出不了波形或者混乱波形的情况。
(望此文章能帮助正在学习的同学,如文章有错误,请各位帮忙及时指正,谢谢!)
STC15系列增强型PWM学习记录相关推荐
- STC15系列CCP/PWM/PCA介绍
STC15系列CCP/PWM/PCA介绍 CCP:是英文单词的缩写Capture(捕获),Compare(比较),PWM(脉宽调制) STC15系列部分单片机集成了3路可编程计数器阵列(CCP/PCA ...
- STC15系列单片机-PWM模块
STC15W内部集成了一个15位的PWM模块, 可以6路独立输出. 此外PWM模块每一路都有两个用于控制波形翻转的计数器T1和T2, 可以灵活地控制每路PWM的高低电平宽度, 从而实现对PWM占空比的 ...
- stc15系列c语言pwm编程,STC单片机C语言程序设计 第25章 STC单片机增强型PWM原理及实现.docx...
STC单片机C语言程序设计 第25章 STC单片机增强型PWM原理及实现 STC单片机增强型PWM发生器原理及应用主 讲:何宾Email:hebin@mail.buct.edu.cn2016.03增强 ...
- Harmony OS 设备开发学习记录(六)-- 通过PWM模块播放音乐
Harmony OS 设备开发学习记录(六)-- 通过PWM模块播放音乐 基于hispark wifi套件采用harmony os 2.0全量代码 一.看原理图确定硬件电路 本例采用红绿灯扩展版上的蜂 ...
- STC15系列PWM中断控制寄存器介绍以及PWM相关示例
STC15系列PWM中断控制寄存器介绍以及PWM呼吸灯代码实现
- STC15系列PWM相关功能寄存器介绍
STC15系列PWM相关功能寄存器介绍 ✨以下数据来源于stc15手册.
- 【学习记录】Simulink仿真学习:直流电机的VM调速系统与PWM调速系统搭建
最近需要复现一下论文中的电机仿真环节,于是又在网上找寻了各种教程.这篇文章总结了我学习直流电机仿真的一些记录和一些知识点文章等. 由于本人电力电子技术等知识的欠缺,故这篇文章适用于为理解或者搭建简单的 ...
- 关于STC8A8K64S4A12(STC15系列升级版)例程中程序出现 'xxx' undefined identifier的问题解决办法
关于STC8A8K64S4A12(STC15系列升级版)例程中程序出现 'xxx' undefined identifier的问题解决办法 最近上网买了一款STC8A8K64S4A12最小系统版学习, ...
- Arduino小白的学习记录:RGB-LED传感器实验
在上一个实验中我们介绍了双色LED灯的实验,但如果仅有两种颜色是不是觉得有些单调呢,接下来就让我们通过这个实验来组合出更多的颜色吧! 一.介绍 RGB-LED模块可以发出各种颜色的光.红色.绿色和蓝色 ...
最新文章
- Delphi 的运算符重载(2) - 可重载运算符列表
- Android 创建与解析XML(一)—— 概述
- matlab conv2
- 罗永浩直播又翻车?网友吐槽半价车是黑幕,本人回应
- C#—Dev XtraTabControl操作总结如动态增加Tab和关闭选项卡方法等
- layey图片内容不居中
- vue更新路由router-view复用组件内容不刷新
- mysql 主从库_MySQL数据库之mysql 主库有数据通过锁库做主从
- 彻底搞懂git rebase命令
- 单片机实验(流水灯)(c语言程序),51单片机c语言_单片机流水灯c语言程序_单片机c语言入门...
- PCI-E 1x, 4x, 8x, 16x 接口定义
- skimage.exposure.rescale_intensity
- Lumion和Enscape渲染器有什么区别?哪个适合你
- 测试用例需要包含哪些内容
- Android DocumentFile基本使用
- Matlab编程实现图像放大
- 辐射4 Hello World
- 英语听力网站推荐-非常不错
- 印象笔记,为知笔记和 Effie 哪个适合学生呢?
- window.showModalDialog 简介