一、PWM功能说明

1.PWM框图

2.PWM通道时钟

总共有PWM0和PWM1两个PWM模块,每个模块有4个PWM通道,每两个通道共用一个预分频器,每个通道单独使用一个时钟选择器。

PCLK(通常为150MHz)经过通道预分频器分频,再经过通道时钟选择器,最后生成PWM计数时钟。

3.PWM周期和占空比

每个PWM通道分别有个周期值寄存器PWM_CNR,PWM周期=CNR+1。

每个PWM通道分别有个比较值寄存器PWM_CMR,用于设置PWM占空比,PWM output high for (CMR + 1) unit。

每个PWM通道分别有个计数寄存器PWM_PDR,PDR为递减计数器,递减到0时重载CNR寄存器中的值。

二、功能开发

目标:开启PWM00(PF5)生成频率1KHz,占空比50%的PWM波,不开启中断。

时钟分频:假设PCLK为150MHz,将PCLK150分频,然后时钟分频器选择1,这样PWM计数时钟为1MHz。

周期和占空比:周期值寄存器设置1000-1,那么一个周期就是1ms,比较器寄存器设置为500-1,那么占空比为50%。

三、PWM开启过程

1. 设置时钟选择器 CLKSEL0 (PWM_CSR[2:0])

2. 设置预分频器 PRESCALE (PWM_PPR[7:0])

3. 设置 CH0INV (PWM_PCR[2]) , 控制输出反转打开或是关闭关闭

4. 设置 DZEN01 (PWM_PCR[4]) 控制死区发生器打开/关闭, 若是死区功能开启, 设置死区间隔 DZL01 (PWM_PPR[23:16])

5. 设置 CH0MOD (PWM_PCR[3]), 选择工作模式是自动重载或是单次模式.

6. 设置相应管脚为 PWM 功能

7. 设置 PWMx_CMR 寄存器的和 PWMx_CNR 寄存器位域来设定 PWM占空比

8. 将 CH0EN((PWM_PCR[0])) 置 1. 使能 PWM下数型计数器开始运行

可以不按照上述的顺序设置。

四、调用驱动函数开启PWM

pwm.c和pwm.h为PWM驱动函数,对外提供一下函数:

// function definition
INT pwmInit(const INT nTimerIdentity);
INT pwmExit(void);
INT pwmOpen(const INT nTimerIdentity);
INT pwmClose(const INT nTimerIdentity);
INT pwmRead(const INT nTimerIdentity, PUCHAR pucStatusValue, const UINT uLength);
INT pwmWrite(const INT nTimerIdentity, PUCHAR pucCNRCMRValue, const UINT uLength);
INT pwmIoctl(const INT nTimerIdentity, const UINT uCommand, const UINT uIndication, UINT uValue);

正常操作应该先调用pwmInit()、pwmOpen(),但是这两个函数会直接开启PWM中断,并注册默认的中断函数,而如果应用中不准备开启中断,那么不能调用这两个函数,或者需要修改下这两个函数。

我的应用中没调用pwmInit()、pwmOpen()这两个函数,而是给bPWMTimerOpenStatus[PWM_TIMER_NUM]增加了一个初始化值,将PWM0_TIMER0的OpenStatus默认为TRUE,这样可以调用pwmIoctl(),pwmWrite()函数设置寄存器。

static BOOL bPWMTimerOpenStatus[PWM_TIMER_NUM] = {TRUE};

调用驱动函数初始化过程如下:

void IrLedLightAdjInit( void )
{typePWMVALUE pwmvalue;outpw(REG_CLK_PCLKEN1, inpw(REG_CLK_PCLKEN1) | (1 << 26)); // Enable PWM0 engine clockpwmIoctl( PWM0_TIMER0, ENABLE_PWMGPIOOUTPUT, 0, PWM00_GPF5 );pwmIoctl( PWM0_TIMER0, SET_CSR, 0, CSRD1 );pwmIoctl( PWM0_TIMER0, SET_CP, 0, 150 - 1 );pwmIoctl( PWM0_TIMER0, SET_INVERTER, 0, PWM_INVOFF );pwmIoctl( PWM0_TIMER0, DISABLE_DZ_GENERATOR, 0, PWM_INVOFF );pwmIoctl( PWM0_TIMER0, SET_MODE, 0, PWM_TOGGLE );pwmvalue.field.cnr = 1000-1;                 //period.pwmvalue.field.cmr = 500-1;                   //duty.pwmWrite(PWM0_TIMER0, (PUCHAR)(&pwmvalue), sizeof(pwmvalue));pwmIoctl( PWM0_TIMER0, START_PWMTIMER, 0, 0 );
}

NUC980 PWM相关推荐

  1. NUC980 PWM驱动配置与测试

    一.查看电路PWM引脚 分别是PF7与PF8引脚 再查手册,PF7与PF8都属于PWM0下PWM02与PWM03 二.内核配置 1.→ Device Drivers使能PWM驱动 2.→ Device ...

  2. RTT设备与驱动之PWM

    这里将PWM当成一个设备:PWM简介 上图是一个简单的 PWM 原理示意图,假定定时器工作模式为向上计数,当计数值小于阈值时,则输出一种电平状态,比如高电平,当计数值大于阈值时则输出相反的电平状态,比 ...

  3. 51单片机 小车 L298N pwm调速 串口控制 按键控制

    难点:1.串口定时器T1,和T0定时器优先级 2.pwm频率与占空比的设置 按键控制 按键1--前进 按键2--后退 按键3--加速 按键4--减速 (板子上只有四个按键) 串口控制 '1'--前进 ...

  4. 【转载】 stm32之PWM

    发现这位博主的博客被大量的转发,我也转载一篇,谁叫人家写的好呢. 原文地址:http://blog.sina.com.cn/s/blog_49cb42490100s6uh.html 脉冲宽度调制(PW ...

  5. 开关电源三种控制模式:PWM/PFM/PSM

    1. PWM/PFM/PSM 三种控制模式的定义 通常来说﹐开关电源(DC-DC)有三种最常见的调制方式分别为: 脉冲宽度调制(PWM) 脉冲频率调制(PFM) 脉冲跨周期调制(PSM) 在功率集成电 ...

  6. 使用 RPI.GPIO 模块的脉宽调制(PWM)功能

    脉宽调制(PWM)是指用微处理器的数字输出来对模拟电路进行控制,是一种对模拟信号电平进行数字编码的方法.在树莓派上,可以通过对GPIO的编程来实现PWM. 创建一个 PWM 实例: p = GPIO. ...

  7. 树莓派c语言输出pwm波,树莓派硬件PWM输出程序

    一:实验现象 对于树莓派硬件PWM只有1号引脚(wiringPi),单独测试该引脚时,可以输出不同占空比控制led灯成呼吸灯的效果 二:程序步骤 1,初始化wiringPi的库函数; 2,设置对应的P ...

  8. linux pwm控制蜂鸣器 滴滴_兴安盟KOBISHI电磁蜂鸣器BZ-21BLAC24V保证

    兴安盟KOBISHI电磁蜂鸣器BZ-21BLAC24V保证日本KOBISHI蜂鸣器.jjb器 .蜂鸣器BZ-35VR DC24V.济南千斗工业出售,货期短.价格低.保证 这里只对必须用1/2duty的 ...

  9. 全程pwm调光_dc调光的手机有哪些

    dc调光的手机有哪些?目前已经发布的黑鲨游戏手机2.黑鲨游戏手机Helo均为全程DC调光,魅族16系列手机,OPPO的Reno,一加7等手机已经是支持DC调光. dc调光的手机有哪些 1.据悉,目前已 ...

  10. cubemx pwm dma_红米K30S至尊纪念版翻车?被曝虽是LDC屏,却是PWM调光

    ↑↑↑击上方"蓝字"关注,每天推送最新科技新闻 红米发布了自家新款性价比机型红米K30S至尊纪念版,这款产品搭载了高通骁龙865处理器,同时价格仅需2299元,而且还搭载的是LCD ...

最新文章

  1. hbase put 异步 java_java – HBase BufferedMutator vs PutList性能
  2. C++设计模式:Template Method
  3. Windows:系统环境变量配置提示系统环境变量太大的问题三种解决方案亲测可用
  4. 如何通过httpd和DVD ISO在RHEL上配置yum本地源
  5. xcode 连接 github 进行代码版本控制
  6. Java中的Map List Set等集合类
  7. docker--删除container和image
  8. 算法笔记_面试题_12.二叉搜索树的最近公共祖先
  9. go-channel
  10. 读书行动笔记2013第2本:《整理的艺术》
  11. R/BioC序列处理之四:BSgenome简介
  12. 【话题:工作生活】2021年工作总结--这些人,那些事。
  13. 同济大学Python程序设计基础 实验七:文件
  14. WhatsApp中的小标记是什么意思?
  15. Android签名 - APK签名系统SignApk.jar
  16. chrome浏览器解除网页右键点击屏蔽方法
  17. [转贴]linux下解压有密码的rar压缩包
  18. 微信域名网址强制跳转至浏览器打开指定app网页
  19. IT相关大学生工作岗位
  20. ai怎么画路线_AI入门教程!怎样画出专业又艺术的几何线条图案

热门文章

  1. PHP 手机验证码登录
  2. sicp2.4消息传递总结
  3. Angel 相关学习
  4. IDEA+Gradle搭建Spring Boot项目
  5. [计算机组成原理] 02 数据的表示和运算(2)
  6. govendor使用及错误处理
  7. OpenHarmony hdc_std无反应的解决办法
  8. 《孙子兵法》十三篇注译(5--形篇)
  9. leetcode_石头游戏合集
  10. 微型计算机中backspace键是什么键,backspace是哪个键?最实用按键的大揭秘