你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32G4之方波和PWM波输出

[复制链接]
STMCU小助手 发布时间:2022-7-5 19:28
前言

方波是指占空比一般为50%,PWM波是指可以调节占空比的

一、方波输出
1. 原理

利用引脚PA11和PA12对应的定时器4通道1/2输出波形

_[789MH)FKQF5YNX}M{O0S7.png

输出比较原理图
VM~8AGY${9P~E{$RLB}Q0N0.png

输出通道有8中模式,这里采用的是比较输出模式(2),即电平翻转模式。当匹配时,引脚状态翻转。步进电机控制常用的模式

假设CCR寄存器里面的值设定为100,那么计数器从0开始计数,每隔100次,电平将会翻转一次,这样就通过设定CCR寄存器里面的值就可以输出不同频率的方波

假设1M作为计数时钟,计一个数需要t=1e-6s, 波的频率 1/[2*( 100*t)] =5khz

2.STM32CubeMX配置
(1)配置定时器4的模式和通道

C{[L4ULN64RY5RJ9[][99@N.png

(2)配置定时器4计数器的参数和输出比较通道参数,通道模式设置的是电平翻转,比较值设定的是100,每隔100计数,电平翻转一次

W3N]1TOW15XK@8N0XWMAT~L.png

(3)配置定时器的输出引脚,输出速率设置为高

CXVCM@)T[KYI[VG8RWCG_JD.png

(4)配置定时器的中断优先级

H%AQ%
XK4OHMRLYTY4RK3.png

3.部分源码
  1. //  方波输出中断
  2. void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
  3. {
  4.         if(htim->Instance == TIM4)   // 定时器判断
  5.         {
  6.                 if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)  // 通道1
  7.                 {
  8.                         // 每次中断计数器的值加100
  9.                         __HAL_TIM_SET_COMPARE(htim, TIM_CHANNEL_1, (__HAL_TIM_GetCounter(htim)+100)); // 5khz
  10.                         
  11.                 }
  12.                 else if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2)   // 通道2
  13.                 {
  14.                         // 每次中断计数器的值加500
  15.                         __HAL_TIM_SET_COMPARE(htim, TIM_CHANNEL_2, (__HAL_TIM_GetCounter(htim)+500));
  16.                 }        
  17.         }
  18. }
复制代码

二、PWM波输出
1.原理

生成PWM波采用的是定时器15的通道1和通道2对应引脚为PA2和PA3

QZYZC0@SOJ1%EIF4%C)$_$E.png

输出比较模式选择PWM模式,PWM(脉冲宽度调制)模式可以产生一个由TIMx_ARR寄存器确定频率(周期)、由TIMx_CCRx寄存器确定占空比的PWM信号

PWM模式分为PWM1互为PWM2

L7O1RT63Y7WC00`4UPDU{W2.png

在递增计数模式下,计数器从 0 计数到自动重载值( TIMx_ARR 寄存器的内容),然后重新从 0 开始计数并生成计数器上溢事,在中, ARR=999, CCR=300, CNT 从 0 开始计数,当 CNT<CCR 的值 时 , OCxREF 为 有效的 电平 , 比 较中 断寄 存器 CCxIF 置 位 。 当CCR=<CNT<=ARR 时, OCxREF 为无效的电平。然后 CNT 又从 0 开始计数并生成计数器上溢事件,以此循环往复,生成PWM,设置不同的CCR可以调节不同的占空比,设置ARR值可调节周期

若计数时钟为1M,则PWM的频率 = 1 / (1e-3) = 1000hz, 占空比为30%

2.STM32CubeMX配置
(1)配置定时器15的模式和通道选择

@$VT1HK4(TBABFGQ6K5`F2L.png

(2)配置计数器,pwm生成通道1/2的参数

5N68B9CKO7)K]_1OUM0[8L9.png

(3)配置定时器15输出引脚,输出频率高即可

8ZB61CX28]FAH4Z@S@4Q{XK.png

注:PWM的输出不用中断,所以不用配置中断。

3.部分源码
  1. // 初始化定时器15
  2.         TIM15_PWM_Init();
  3.         // 开启PWM通道
  4.         HAL_TIM_PWM_Start(&htim15,TIM_CHANNEL_1);
  5.         HAL_TIM_PWM_Start(&htim15,TIM_CHANNEL_2);
复制代码

在while循环前添加这几句即可生成PWM波



收藏 评论0 发布时间:2022-7-5 19:28

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版