网站手机站怎么做的,京东商城网页设计分析,淘宝客网站名,wordpress移动端分享插件目录 概述
1 PWM 输入模式
1.1 原理介绍
1.2 应用实例
1.3 示例时序图
2 使用STM32Cube配置工程
2.1 软件环境
2.2 配置参数
2.3 生成项目文件
3 功能实现
3.1 PWM占空比函数
3.2 输入捕捉回调函数
4 功能测试
4.1 测试软件框架结构
4.2 实验实现
4.2.1 测试实…目录 概述
1 PWM 输入模式
1.1 原理介绍
1.2 应用实例
1.3 示例时序图
2 使用STM32Cube配置工程
2.1 软件环境
2.2 配置参数
2.3 生成项目文件
3 功能实现
3.1 PWM占空比函数
3.2 输入捕捉回调函数
4 功能测试
4.1 测试软件框架结构
4.2 实验实现
4.2.1 测试实验1
4.2.2 测试实验2 STM32高级控制定时器STM32F103PWM 输入模式测速pwm的占空比频率参数 源代码下载地址
STM32高级控制定时器STM32F103PWM输入模式资源-CSDN文库
概述
本文主要介绍STM32高级定时器的用法至输入捕获功能该功能可用于捕捉外部输入信号的频率并且计算出PWM的占空比。笔者通过详细的案例介绍这个功能包括理论知识实现原理以及如何使用STM32Cube配置基本的参数编写实用代码实现捕捉频率当的功能。
1 PWM 输入模式
1.1 原理介绍
这种模式是输入捕获模式的一种特殊情况。程序相同只是 1两个ICx信号映射在同一个TIx输入上 2这2个ICx信号在具有相反极性的边缘上是活动的 3选择两个TIxFP信号中的一个作为触发输入和从模式控制器在重置模式下配置。 1.2 应用实例
用户可以测量周期在TIMx_CCR1寄存器中和占空比在TIMx_CCR2寄存器使用以下程序取决于在CK_INT频率和预分频器值上 1选择TIMx_CCR1的激活输入将CC1S位写入TIMx_CCMR1中的01寄存器选择TI1。 2选择TI1FP1的有效极性用于TIMx_CCR1和计数器中的捕获清除将CC1P位写入“0”上升沿激活。 3选择TIMx_CCR2的激活输入将CC2S位写入TIMx_CCMR1中的10寄存器选择TI1。 4选择TI1FP2的有效极性用于TIMx_CCR2中的捕获写入CC2P位到“1”在下降沿上有效。 5) 选择有效的触发输入将TS位写入TIMx_SMCR寄存器中的101已选择TI1FP1。 6) 在重置模式下配置从属模式控制器将SMS位写入TIMx_SMCR寄存器。 7) 启用捕获将CC1E和CC2E位写入TIMx_CCER寄存器中的“1”。 1.3 示例时序图
PWM输入模式只能与TIMx_CH1/TIMx_CH2信号一起使用因为只有TI1FP1和TI2FP2连接到从模式控制器。 2 使用STM32Cube配置工程
2.1 软件环境
软件名称版本信息STM32CubeSTM32CubeMX 6.11STM32 HALSTM32Cube_FW_F1_V1.8.5
2.2 配置参数
1配置系统时钟72M Hz,Timer的工作时钟为72M Hz 2) 使用定时器1配置输入捕获功能 其对应的IO口配置 计数器时钟参数和捕获通道参数 3配置PWM相关参数
选择定时器8作为控制PWM的输出 PWM波对应的IO接口 Timer-8定时器相关参数 和PWM相关的参数配置 2.3 生成项目文件 使用STM32FCube完成项目配置后就可以生成工程文件。生成代码如下 3 功能实现
3.1 PWM占空比函数
在tim.c文件中实现配置输出PWM占空比函数函数代码如下 参数介绍 1Pluse 占空比 2Channel 输出通道号 void HAL_TIM_SetPWM_Pulse( uint32_t Pulse, uint32_t Channel)
{TIM_OC_InitTypeDef sConfigOC {0};sConfigOC.OCMode TIM_OCMODE_PWM1;sConfigOC.Pulse Pulse;sConfigOC.OCPolarity TIM_OCPOLARITY_HIGH;sConfigOC.OCNPolarity TIM_OCNPOLARITY_HIGH;sConfigOC.OCFastMode TIM_OCFAST_DISABLE;sConfigOC.OCIdleState TIM_OCIDLESTATE_RESET;sConfigOC.OCNIdleState TIM_OCNIDLESTATE_RESET;if (HAL_TIM_PWM_ConfigChannel(htim8, sConfigOC, Channel) ! HAL_OK){Error_Handler();}
}
3.2 输入捕捉回调函数
在input_capture.c实现输入捕捉回调函数。 函数功能介绍 1计算输入的PWM的频率 2计算输入的PWM的周期 3计算输入的PWM的占空比 void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{uint32_t uwIC2Value1 0;uint32_t uwIC2Value2 0;uint32_t cycle,pluse,freq;static uint32_t uwIC2Value2_list[2];static uint8_t count 0;float dutyfactor;if(htim-Instance TIM1) {if (htim-Channel HAL_TIM_ACTIVE_CHANNEL_1){/* Get the 1st Input Capture value */}else if (htim-Channel HAL_TIM_ACTIVE_CHANNEL_2){uwIC2Value1 HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);/* Get the 1st Input Capture value */uwIC2Value2 HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2);if( uwIC2Value2 uwIC2Value1){pluse uwIC2Value2- uwIC2Value1; uwIC2Value2_list[count] uwIC2Value1;count;if( count 2 ){count 0;if( uwIC2Value2_list[1] uwIC2Value2_list[0]){cycle uwIC2Value2_list[1]- uwIC2Value2_list[0];freq 1000000/cycle;dutyfactor (pluse*100)/cycle;printf(PWM cycle %d us, PWM freq %d Hz\r\n, cycle, freq);printf(PWM dutyfactor %d%s\r\n, (int)dutyfactor,%);}}}}}
}
4 功能测试 4.1 测试软件框架结构 4.2 实验实现
PWM的工作的使用频率为1us, 一个PWM的周期为10 000 us 通过调制Pulse的值就可以改变占空比其中每一个Plus表示1us举个例子 设置Pluse 500, 表示占空比为500/10000 *100 % 5% 4.2.1 测试实验1
1配置PWM参数输出频率为100Hz占空比为5% void pwm_ctrl_Init( void )
{HAL_TIM_Base_Start( htim8 );HAL_TIM_PWM_Start( htim8, TIM_CHANNEL_1); // PC6 HAL_TIM_PWM_Start( htim8, TIM_CHANNEL_2); // PC7HAL_TIM_SetPWM_Pulse( 500, TIM_CHANNEL_1);HAL_TIM_SetPWM_Pulse( 500, TIM_CHANNEL_2);
}
2配置输入捕捉电平信号触发类型
void Input_CaptureInit( void )
{set_captureMode(TIM_CHANNEL_2, TIM_INPUTCHANNELPOLARITY_FALLING);set_captureMode(TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING);
}
3) 编译代码下载到板卡运行结果如下
逻辑分析仪测试到的波形 调试终端打印的数据log 4.2.2 测试实验2
1配置PWM参数输出频率为100Hz占空比为50% void pwm_ctrl_Init( void )
{HAL_TIM_Base_Start( htim8 );HAL_TIM_PWM_Start( htim8, TIM_CHANNEL_1); // PC6 HAL_TIM_PWM_Start( htim8, TIM_CHANNEL_2); // PC7HAL_TIM_SetPWM_Pulse( 5000, TIM_CHANNEL_1);HAL_TIM_SetPWM_Pulse( 5000, TIM_CHANNEL_2);
}
2) 编译代码下载到板卡运行结果如下
逻辑分析仪测试到的波形 调试终端打印的数据log