MC9S12XS128 PWM输出配置
文章目录
- MC9S12XS128 PWM输出配置
- 一、PWM资源介绍
- 1.1 MC9S12 PWM特性
- 1.2 PWM 8通道8位引脚
- 二、PWM寄存器介绍
- 2.1 时钟选择寄存器
- 2.2 定时器通道寄存器
- 2.3 PWM 极性选择寄存器
- 2.4 PWM 使能/禁止寄存器
- 2.5 PWM 输出对齐寄存器
- 2.6 PWM 级联寄存器
- 三、PWM配置实例
MC9S12XS128 PWM输出配置
一、PWM资源介绍
1.1 MC9S12 PWM特性
- 8个具有可编程周期和占空比的独立PWM通道
- 4个时钟源
- 每个PWM通道具有专用计数器
- 每个通道可以选择有效电平极性
- 每个PWM通道可以使能 / 禁止
- 每个通道可选择输出波形的对齐方式
- 分辨率:8位(8通道);16位(4通道)
1.2 PWM 8通道8位引脚
芯片引脚分布如下:
二、PWM寄存器介绍
介绍寄存器前先看一下,PWM 的模块框图
从框图可以看到 PWM 的配置主要分为:时钟选择、使能、极性、对齐、PWM 通道等多个方面进行控制,下面一次介绍各个寄存器
2.1 时钟选择寄存器
2.1.1 时钟源
PWM 有四种时钟源,时钟源如下:
- Clock A (Ch 0, Ch 1, Ch 4, Ch 5)
- Clock SA (Scaled A; Ch 0, Ch 1, Ch 4, Ch 5)
- Clock B (Ch 2, Ch 3, Ch 6, Ch 7)
- Clock SB (Scaled B; Ch 2, Ch 3, Ch 6, Ch 7)
时钟源的选择通过 PWMCLK 寄存器来控制,寄存器位如下:
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
---|---|---|---|---|---|---|---|---|
Read: Write: | PCLK7 | PCLK6 | PCLK5 | PCLK4 | PCLK3 | PCLK2 | PCLK1 | PCLK0 |
Reset: | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
寄存器各个位功能
寄存器位 | 功能 |
---|---|
PCLK7、6、3、2 — PWM通道 7、6、3、2 时钟选择 |
1 = 选择Clock SB 为PWM通道 7、6、3、2 的时钟源。 0 = 选择Clock B 为PWM通道 7、6、3、2 的时钟源。 |
PCLK5、4、1、0 — PWM通道 5、4、1、0 时钟选择 |
1 = 选择Clock SA 为PWM通道 5、4、1、0 的时钟源。 0 = 选择Clock A 为PWM通道 5、4、1、0 的时钟源。 |
2.1.2 分频器
时钟频率不能直接作为 PWM 定时器的时钟频率的,一般要经过分频才能使用,总线时钟到定时器时钟经过的分频器如下:
PWMPRCLK 寄存器用于独立选择时钟源A、B的预分频系数,寄存器结构如下:
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
---|---|---|---|---|---|---|---|---|
R\W: | 0 | PCKB2 | PCKB1 | PCKB0 | 0 | PCKA2 | PCKA1 | PCKA0 |
Reset: | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
分频值与寄存器位的关系表为:
PCKx2 | PCKx1 | PCKx0 | Value of Clock x |
---|---|---|---|
0 | 0 | 0 | Bus Clock |
0 | 0 | 1 | Bus Clock / 2 |
0 | 1 | 0 | Bus Clock / 4 |
0 | 1 | 1 | Bus Clock / 8 |
1 | 0 | 0 | Bus Clock / 16 |
1 | 0 | 1 | Bus Clock / 32 |
1 | 1 | 0 | Bus Clock / 64 |
1 | 1 | 1 | Bus Clock / 128 |
PWMSCLA 和 PWMSCLB对应的 A、B的定时器分频
PWMSCLA寄存器
Read: Write: | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|---|
Reset: | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
PWMSCLB寄存器
Read: Write: | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|---|
Reset: | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
定时器频率计算公式:
当 PWM 全为 0 时,分频值为 255 ;其他给多少值,分频多少
2.2 定时器通道寄存器
控制 PWM 输出波形占空比的寄存器主要有三个,
PWM Channel Counter Registers (PWMCNTx):定时计数器,按照设定的时钟频率自加,写0复位
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
---|---|---|---|---|---|---|---|---|
Read: | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
Write: | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Reset: | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
该寄存器任何时刻可以读写,但向计数器中写入任何值会引起计数器复位到$00,且计数器方向被设置为向上计数
PWM Channel Period Registers (PWMPERx):周期寄存器,设定 PWM 的占空比周期,写255复位
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
---|---|---|---|---|---|---|---|---|
Read: Write: | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
Reset: | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
PWM Channel Duty Registers (PWMDTYx):占空比寄存器,设定 PWM 的占空比,写255复位
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
---|---|---|---|---|---|---|---|---|
Read: Write: | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
Reset: | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
2.3 PWM 极性选择寄存器
PWM Polarity Register (PWMPOL)
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
---|---|---|---|---|---|---|---|---|
Read: Write: | PPOL7 | PPOL6 | PPOL5 | PPOL4 | PPOL3 | PPOL2 | PPOL1 | PPOL0 |
Reset: | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
PPOLx——Pulse Width Channel x Polarity
- 1 = PWM 通道x 周期起始时输出为高电平,当到达占空比寄存器设定值时变为低电平。
- 0 = PWM 通道x 周期起始时输出为低电平,当到达占空比寄存器设定值时变为高电平。
补充 PWMDTYx 、PWMPERx、PPOLx 三个寄存器在临界条件下,PWM 的输出情况
PWMDTYx | PWMPERx | PPOLx | PWMx 输出 |
---|---|---|---|
$00 | > $00 | 1 | 低电平 |
$00 | > $00 | 0 | 高电平 |
xx | $00 | 1 | 高电平 |
xx | $00 | 0 | 低电平 |
>= PWMPERx | xx | 1 | 高电平 |
>= PWMPERx | xx | 0 | 低电平 |
2.4 PWM 使能/禁止寄存器
PWM Enable Register (PWME)
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
---|---|---|---|---|---|---|---|---|
Read: Write: | PWME7 | PWME6 | PWME5 | PWME4 | PWME3 | PWME2 | PWME1 | PWME0 |
Reset: | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Channel x Enable
- 1 = PWM 通道x 使能。
- 0 = PWM 通道x 禁止。
2.5 PWM 输出对齐寄存器
MC9S12 的 PWM 输出有两者对齐方式,左对齐和中央对齐
左对齐
在左对齐模式中,8位计数器配置为向上累加计数器,它和占空比寄存器和周期寄存器两个寄存器比较。当PWM 计数器和占空比计数器中的值相等,输出翻转,PWM 计数器和周期寄存器的值匹配时复位计数器并同时从双缓冲器中载入周期和占空比计数器值。计数器从0计数,到周期寄存器-1结束
中央对齐
这种模式下8位计数器作为一个向上&向下计数器,当计数器值为0时,向上计数。计数器和占空比寄存器及周期寄存器比较,当PWM 计数器和占空比寄存器值相匹配时,输出翻转,PWM 计数器和周期寄存器匹配改变计数器方向,从向上计数变为向下计数,当PWM计数器递减,和占空比计数器再次匹配时,输出再次改变。当PWM计数器递减到0,计数方向从向下计数变为向上计数,并从双缓冲器中载入周期寄存器和占空比寄存器值。计数器从0加到周期寄存器中的值并减回0,因此有效周期为PWMPERx*2
PWM Center Align Enable Register (PWMCAE)
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
---|---|---|---|---|---|---|---|---|
Read: Write: | CAE7 | CAE6 | CAE5 | CAE4 | CAE3 | CAE2 | CAE1 | CAE0 |
Reset: | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
CAEx — Center Aligned Output Mode on channel x
- 1 = 通道x 以中央对齐输出方式工作。
- 0 = 通道x 以左对齐输出方式工作。
2.6 PWM 级联寄存器
2个8位PWM 通道可以被连接成一个16位 PWM通道,如下图
级联后的 PWM 通道数以及对应寄存器如下
CONxx | PWMEx | PPOLx | PCLKx | CAEx | PWMx OUTPUT |
---|---|---|---|---|---|
CON67 | PWME7 | PPOL7 | PCLK7 | CAE7 | PWM7 |
CON45 | PWME5 | PPOL5 | PCLK5 | CAE5 | PWM5 |
CON23 | PWME3 | PPOL3 | PCLK3 | CAE3 | PWM3 |
CON01 | PWME1 | PPOL1 | PCLK1 | CAE1 | PWM1 |
PWM Control Register (PWMCTL) 级联控制寄存器
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
---|---|---|---|---|---|---|---|
CON67 | CON45 | CON23 | CON01 | PSWAI | PFRZ | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
CONxy——Concatenate channels x and y
- 1 = 通道x和y被连接成一个16位PWM通道。
- 0 = 通道x和y为两个独立的8位PWM。
三、PWM配置实例
配置 PWM 一般按照下面6步骤配置()内是相关的寄存器
- 禁止PWM (PWME)
- 选择PWM时钟,预分频和分频 (PWMPRCLK, PWMSCLA, PWMSCLB, PWMCLK)
- 选择极性(PWMPOL)
- 选择对齐方式 (PWMCAE)
- 编程占空比和周期 (PWMDTYx, PWMPERx)
- 使能PWM (PWME)
初始化子程序示例
void PWM_Init(void){PWME = 0x00; //禁止PWM模块PWMPRCLK = 0x06; //CLOCKA的预分频设置为6PWMSCLA = 125; //SA的分频因子设置为125PWMCLK = 0x01; //通道0选择SA作为PWM时钟PWMPER0 = 200; //通道0周期寄存器设置为200PWMDTY0 = 0; //通道0占空比寄存器设置PWMPOL = 0x01; //PWM输出先为高电平,之后变为低电平PWMCAE = 0x00; //左对齐输出PWMCTL = 0x00; //不级联PWME = 0x01; //使能PWM通道0}
MC9S12XS128 PWM输出配置相关推荐
- 合泰HT66F2350 PWM输出配置
试验目的: 使用HT66F2350合泰8位单片机,使用PC2进行输出38K,占空比33%的PWM. 步骤: 1.配置时钟 2.对PC2口进行配置 3.对定时器进行配置PWM输出功能 一.配置时钟 ID ...
- STM32f103,TIM1,TIM2,TIM3,TIM4,TIM5,TIM8,4路PWM输出配置(保姆级)
没什么可说的,想说的都写在注释里了,重要的事情说三遍:看注释,看注释,看注释 定时器的.c文件: /************************************************** ...
- STM32 PWM输出实验
定时器用来产生PWM输出: STM32 的定时器除了 TIM6 和 7.其他的定时器都可以用来产生 PWM 输出.其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出.而通 ...
- 13. GD32F103C8T6入门教程-定时器-3路pwm输出-刹车死区保护
1.gpio初始化 void gpio_config(void) {/*使能GPIOA GPIOB 时钟*/rcu_periph_clock_enable(RCU_GPIOA);rcu_periph_ ...
- 12. GD32F103C8T6入门教程-定时器-3路pwm输出
1.gpio初始化 void gpio_config(void) {/*使能GPIOA GPIOB 时钟*/rcu_periph_clock_enable(RCU_GPIOA);rcu_periph_ ...
- STM32学习笔记(五 定时器及应用 3 PWM输出实验 )
一.PWM 简介 脉冲宽度调制(PWM) Pulse Width Modulation (调制) 简单来说就是对脉冲宽度的控制. 高级定时器 TIM1 和 TIM8: 可以同时产生多达 7 路的 PW ...
- STM32F103C8 TIM1 CHN PWM输出代码
STM32F103高级定时器TIM1输出PWM波程序 /** 配置PB13输出,即全使能TIM1_CH1N通道,禁用TIM1_CH1通道,禁用更新中断* 其它参数看着修改*/ void Timer1I ...
- 【学习记录】 STM32 PWM输出实验
STM32 PWM工作过程 以通道1为例: CCR1:捕获比较(值)寄存器(x=1,2,3,4):设置比较值. CCMR1: OC1M[2:0]位: 对于PWM方式下,用于设置PWM模式1[110]或 ...
- pwm一个时间单位_详解STM32的PWM输出及频率和脉宽(占空比)的计算——寄存器配置六步曲!...
一.stm32的pwm输出引脚是使用的IO口的复用功能. 二.T2~T5这4个通用定时器均可输出4路PWM--CH1~CH4. 三.我们以tim3的CH1路pwm输出为例来进行图文讲解(其它类似),并 ...
最新文章
- mysql经纬度转距离_Mysql 拿指定经纬度与数据库多条经纬度进行距离计算 (转)
- springmvc二十五:springmvc支持ajax
- daemon.json无法启动docker_devops一键部署|详解如何搭建git+maven+jenkins+docker
- 跨界创立PayPal、特斯拉、SpaceX……,埃隆·马斯克是这样“掌控”知识的
- vue-element-admin台前端解决方案: 基于 vue 和 element-ui实现
- sql server 中将datetime类型转换为date,或者time
- c语言开发 .c .h,求助C语言大佬 , 只会写到一个.c文件里 ,不会用.h头文件
- PHP在线无人值守源码交易网站源码,集成支付宝微信接口
- 对象序列化时候无法创建类似如此(king:astar)的元素名
- echarts自定义y轴刻度信息
- 计算机编程及常用术语英语词汇大全
- springboot毕设项目北理珠青协志愿素拓系统eaa9n(java+VUE+Mybatis+Maven+Mysql)
- 【原创】Structure from Motion (SfM)算法测试---3D重建简介
- 成都理工大学乐千桤java考试,成都理工大学方案.PDF
- “磁碟机”病毒分析报告
- 企业微信网页应用开发 - 异步请求
- Android Gradle Plugins系列-02-Maven Publish 插件踩坑指南
- 苹果电脑各型号支持的macOS版本列表
- 详解Dell EMC发布的PowerMax存储和R系列计算系统
- vb.net 实现图片圆形渐变模糊
热门文章
- 5年18家私有化 这些港股公司主动退市为哪般?
- 我的世界服务器显示标指令,我的世界服务器指令|我的世界服务器指令大全
- ESP-Drone四旋翼无人机控制板上的MPU6050陀螺仪芯片I2C总线测试
- Servlet学习记录
- 这台计算机没有安装并配置网络适配器,win10设备管理器里没有网络适配器的解决方法 - 系统家园...
- [转贴]解决国内不能正常访问Gmail的方法
- 科学计数法转换浮点数【golang】
- Mac 解析腾讯不加密 .xlog 文件
- [java]关于Session关于Token关于JWT
- [通讯录导入工具] [iPhone+安卓]如何将.CSV通讯录导入安卓手机和苹果手机,下面教你方法