第九章 PWM输出试验 脉冲宽度调制(PWM),是英文“Pulse Width Modulation” 的缩写,他是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单一点,就是对脉冲宽度的控制。 PWM 有开始/停止寄存器。它控制PWM定时器的开始/停止。一旦设置了此位,定时器开始运行。如果将此位复位,定时器就立即停止。当 PWM 的定时器被停止或暂停时,才可以更新PWM的寄存器,如图9.1.1所示: 重复模式 在周期模式中,PWM的定时器到达了边界寄存器设定值时就会重新开始计数,如图9.1.3所示,可以看出这里设置的边界寄存器的值为12: 在单次触发模式中,当PWM的定时器到达边界寄存器设定值时,定时器重置为初始值并停止-计数,如图9.1.4所示: 预分频寄存器描述 图9.1.5 W7500 PWM预分频寄存器 图9.1.6 PWM定时器达到匹配寄存器时 图9.1.7 PWM定时器达到边界寄存器时 这里用PWM的定时器模式来输出。可以调用W7500固件函数库的PWM_TimerModeInit函数来进行初始化: - void PWM_TimerModeInit(PWM_CHn_TypeDef* PWM_CHn, PWM_TimerModeInitTypeDef* PWM_TimerModeInitStruct);
复制代码这里讲解一下与PWM相关的几个成员变量: 针对 PWM通道5 初始化范例代码格式: - PWM_TimerModeInitStruct.PWM_CHn_PR = 50;
- PWM_TimerModeInitStruct.PWM_CHn_MR = 0;
- PWM_TimerModeInitStruct.PWM_CHn_LR = 1000;
- PWM_TimerModeInitStruct.PWM_CHn_UDMR = PWM_CHn_UDMR_UpCount;
- PWM_TimerModeInitStruct.PWM_CHn_PDMR = PWM_CHn_PDMR_Periodic;
- PWM_TimerModeInit(PWM_CH5, &PWM_TimerModeInitStruct);
复制代码这个函数的第二个传参是用来选择PWM的输出模式的,有三种模式:PWM_CHn_PEEER_Disable(PWM 输出禁止及外部输入禁止);PWM_CHn_PEEER_ExtEnable(PWM 输出禁止及外部输入禁止);PWM_CHn_PEEER_PWMEnable(PWM 输出使能及外部输入禁止),这里使用PWM的输出使能及外部输入禁止模式。 - PWM_CHn_SetPEEER(PWM_CH5, PWM_CHn_PEEER_PWMEnable);
复制代码可以调用PWM_CHn_Stop函数来停止PWM的定时器。 - void PWM_CHn_Start(PWM_CHn_TypeDef* PWM_CHn);
复制代码前面也有讲过PWM的定时器有开始/停止寄存器,设置完了之后需要开启定时器才能让PWM的定时器跑起来。可以调用PWM_CHn_Start函数来开启定时器。 - void PWM_CHn_Start(PWM_CHn_TypeDef* PWM_CHn);
复制代码 9.2 硬件设计在W7500EVB PWM output中可以看到工程中的 user 下面比以前多了pwm.c 文件和头文件pwm.h。 同时还引入了相关的固件库函数文件 W7500x_pwm.c 和头文件W7500x_pwm.h。 在完成软件设计之后,将编译好的文件下载到W7500EVB 开发板上,观看其运行结果是否与我们编写的一致。如果没有错误,将看 RGB LED 在由暗变到亮,又从亮变到暗,如图9.4.1所示: 图9.4.1 PWM输出试验结果
|