当前位置: 首页 > news >正文

PWM输出(stm32)-非互补

文章目录

    • PWM输出关键点
    • 代码如下:
    • 逻辑分析仪测试结果:

PWM输出关键点

定时器输出PWM其实很简单,主要关注下面几件事情

  • 1.PWM频率设置:
    这个通过设置定时器的ARR寄存器即可,外部通过TIM_Period 来配置. TimerClk/TIM_Period 即为PWM频率.

  • 2.PWM占空比设置:
    这个需要设置对应通道的CCR寄存器,定时器工作时,会比较CCR的值,当计数器工作在递增模式时,当计数器的值小于CCR中的值时,输出TIM_OCPolarity配置的极性,反之输出相反的极性.

  • 3.PWM极性
    PWM的极性通过TIM_OCPolarity配置, 一般默认都是高电平.一般我们说占空比为20%,就是意为一个周期内高电平持续时间占一个周期时间的20%.
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;

代码如下:

uint16_tCCR1_Val=333;uint16_tCCR2_Val=249;uint16_tCCR3_Val=166;ntpwmout_main(void){/* 一些GPIO配置,不展示代码了*/TIM_Config();/* ----------------------------------------------------------------------- TIM1 Channel1 占空比 = (TIM1_CCR1/ TIM3_ARR)* 100 = 50% TIM1 Channel2 占空比 = (TIM1_CCR2/ TIM3_ARR)* 100 = 37.5% TIM1 Channel3 占空比 = (TIM1_CCR3/ TIM3_ARR)* 100 = 25% Note: 下面把定时器的时钟设置为21M, ----------------------------------------------------------------------- *//* TIM8 使用 APB2, 它的时钟是= 2 * PCLK2 = SystemCoreClock (168 MHz) */PrescalerValue=(uint16_t)((SystemCoreClock)/21000000)-1;/* Time base configuration */TIM_TimeBaseStructure.TIM_Period=665;//PWM频率为21000000/665 = 31.578KTIM_TimeBaseStructure.TIM_Prescaler=PrescalerValue;TIM_TimeBaseStructure.TIM_ClockDivision=0;TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数TIM_TimeBaseInit(TIM8,&TIM_TimeBaseStructure);/* PWM1 Mode configuration: Channel1 */TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse=CCR1_Val;//占空比为333/665=50.07%TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//占空比对应的是高电平.TIM_OC1Init(TIM8,&TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM8,TIM_OCPreload_Enable);/* PWM1 Mode configuration: Channel2 */TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse=CCR2_Val;//占空比=249/665=37.44%TIM_OC2Init(TIM8,&TIM_OCInitStructure);TIM_OC2PreloadConfig(TIM8,TIM_OCPreload_Enable);/* PWM1 Mode configuration: Channel3 */TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse=CCR3_Val;//占空比=166/665=24.96%TIM_OC3Init(TIM8,&TIM_OCInitStructure);TIM_OC3PreloadConfig(TIM8,TIM_OCPreload_Enable);TIM_ARRPreloadConfig(TIM8,ENABLE);/* 下面这句代码很重要,没有的话,PWM没有输出的*/TIM_CtrlPWMOutputs(TIM8,ENABLE);/* TIM8 enable counter */TIM_Cmd(TIM8,ENABLE);}

逻辑分析仪测试结果:

各个通道的PWM频率都是相同的,计算公式为PWM频率为21000000/665 = 31.578K.但是逻辑分析仪测出来的为31.45K,稍微有点出入(先不计较了)

  • 通道1测试结果
    占空比为333/665=50.07%, 符合预期
  • 通道2测试结果:
    占空比=249/665=37.44%
  • 通道3测试结果:
    占空比=166/665=24.96%
  • 其它测试
    特意将极性改为低电平,则占空比就变成了低电平占整个周期的比例.如下图
    通道3的高电平变的很长.
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
http://www.cnnetsun.cn/news/4048097.html

相关文章:

  • 【20260815】C# 类、对象和方法
  • 慕课网职场人必修课:高效沟通与自信表达
  • 绿色免安装拼图工具 PintuMaster 1.6 技术解析:不写注册表、不占 C 盘,如何实现 0 成本搞定证件照/发票拼图?
  • 手机双目虚化拍照课程目录:从零到落地
  • 以实战论 AI:诚邀一线工程师分享模型调优、工程落地真实案例
  • 098、LVGL LED样式与亮度控制
  • 电网建模基石:正序参数与等值电路原理、应用与工程实践
  • 面阵 vs 线阵,为什么高速产线非它不可?——线阵相机深度详解
  • Mockoon 实战指南:本地 Mock 数据方案与前后端高效协作
  • OneNote链接被组织策略阻止?注册表修复与协议关联排查指南
  • 机器人专业热浪下的冷真相:招得多,钱和门槛藏玄机
  • IMX927深度解析:索尼Pregius S背照式全局快门技术赋能1亿像素工业检测
  • 滑移反铁电MoS2中量子度规驱动的
  • MySQL系统表mysql.user缺失的深度解析与修复指南
  • 从Hello World到工程构建:g++编译器的核心原理与实战指南
  • FreeRTOS调度器:让多任务有条不紊的“大管家”
  • 2026年学校知网AI率要求20%?自查工具与检测口径详解!
  • 2026年8月合同销毁回收方式排行榜:哪种环保?看完这篇再决定
  • 学校指定知网检测完整攻略!低成本自查论文AI率是否达标!
  • Dravet综合征孩子的“救命药“:司替戊醇如何让80%患儿癫痫发作大幅减少
  • ReactOS 图形系统分析(25):多显示器/平移显示与杂项 — multidisp.c / pandisp.c / engmisc.c
  • 193、飞控中的无人机集群:未来趋势与挑战
  • 基于Springboot的小香葱种植管理系统源码+文档
  • Turnitin降AI英文怎么改,BunnyScholar最省心
  • 【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码
  • 云安全左移:解析默认防火墙与API开放对运维的影响
  • Hive存储格式深度解析:从TextFile到ORC/Parquet的性能调优实战
  • UML用例图实战指南:从需求沟通到系统设计的可视化建模
  • LaTeX表格加粗排版难题:原理剖析与四种稳健解决方案
  • PostgreSQL启动失败排查指南:从日志分析到六大常见原因解决