PWM----脉冲宽度调制
在具有惯性的系统,可以通过对一系列脉冲的宽度进行调制,来等效的获取所需要的模拟参量,常应用于电机控速等领域
PWM参数:
频率:1/Ts 占空比=Tno/Ts 分辨率=占空比变化步距
代码部分
第一步:RCC开启时钟---TIM外设和GPIO外设的时钟打开
第二步:配置时基单元,包括时钟源选择,时基单元配置
第三步:配置输出比较单元CCR,包括CCR的值,输出比较模式,极性选择,输出使能这些参数,结构体统一配置
第四步:配置GPIO,把PWM对应的IO口,初始化为复用推挽输出的配置
第五步:运行配置,启动计数器
- void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
- void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
- void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
- void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
配置输出引脚模块,对应第三步配置比较单元,一个函数配置一个单元
参数1:选择定时器 参数2:结构体,输出比较的参数
- void TIM_OCStructInit(TIM_OCInitTypeDef* TIM_OCInitStruct)
给输出比较结构体配置默认值
- void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1);
- void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);
- void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3);
- void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4);
单独更改CCR寄存器值的函数比较重要,更改占空比就要用到这个
- void TIM_ForcedOC1Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
- void TIM_ForcedOC2Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
- void TIM_ForcedOC3Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
- void TIM_ForcedOC4Config(TIM_TypeDef* TIMx, uint16_t TIM_ForcedAction);
配置强制输出模式,运行中暂停输出波形并且强制输出高或者低电平
- void TIM_OC1PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
- void TIM_OC2PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
- void TIM_OC3PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
- void TIM_OC4PreloadConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPreload);
配置CCR寄存器预装功能,就是影子寄存器,写入的值不会立即生效,而是在更新事件才会生效
- void TIM_OC1FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
- void TIM_OC2FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
- void TIM_OC3FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
- void TIM_OC4FastConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCFast);
配置快速使能
- void TIM_ClearOC1Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
- void TIM_ClearOC2Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
- void TIM_ClearOC3Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
- void TIM_ClearOC4Ref(TIM_TypeDef* TIMx, uint16_t TIM_OCClear);
外部事件清楚REF信号
- void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
- void TIM_OC1NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);
- void TIM_OC2PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
- void TIM_OC2NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);
- void TIM_OC3PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
- void TIM_OC3NPolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCNPolarity);
- void TIM_OC4PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);
单独设置输出比较的极性
带N的是高级定时器互补通道的配置
在结构体初始化函数也可以设置极性,作用一样
- void TIM_CCxCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCx);
- void TIM_CCxNCmd(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_CCxN);
单独修改输出使能参数
- void TIM_SelectOCxM(TIM_TypeDef* TIMx, uint16_t TIM_Channel, uint16_t TIM_OCMode);
选择输出比较模式,单独更改输出比较模式函数