1.分析原理图
如图我们可以看出测量信号管脚为PB4与PA15,这边使用XL555芯片。XL555信号发生器来生成PWM波,采集引脚为PA15与PB4。
2.使用STM32CubeMX软件生成keil工程文件
1.创建新工程
2.输入与选择正确的芯片
3.配置RCC,可勾选一个高速时钟,也可两个都勾选
4.设置调试模式,这边选择SW调试模式
5.配置定时器TIM:文字说明配置(PA15与PB4操作一样)
1. 手动打开PB4,将其设置为TIM3_ch1,将Slave mode设置为Rreset Mode,T....s....设置为TI1FP1,C...为internal clock,channel为input capture direct mode,channe2为input capture indirect mode
2. 79,65535,cha2设置为falling edge, 中断使能勾上
3. 去NVIC修改中断优先级,改为3
6.设置时钟树,修改下图带框的地方
7.设置好配置,最后电机GENERATE CODE
3.代码
说明:建议不要去重新创建.C与.h文件,比较浪费时间,比赛还是得抓紧时间去编写程序代码,所有代码都在main.c中编写。这边建议在第151行与153行之间编写程序代码。
定义:
//*pwm相关变量
uint16_t PWM1_T_Count;
uint16_t PWM2_T_Count;
uint16_t PWM1_D_Count;
uint16_t PWM2_D_Count;
float PWM1_Duty;
float PWM2_Duty;
放初始化之后:
//放初始化之后
HAL_TIM_Base_Start(&htim2);
/* 启动定时器通道输入捕获并开启中断 */
HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_1);
HAL_TIM_IC_Start_IT(&htim2,TIM_CHANNEL_2);
// HAL_TIM_Base_Start_IT(&htim3);
HAL_TIM_Base_Start(&htim3);
/* 启动定时器通道输入捕获并开启中断 */
HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_1);
HAL_TIM_IC_Start_IT(&htim3,TIM_CHANNEL_2);
LCD显示程序:
//LCD显示代码:
sprintf((char *)Lcd_Disp_String, "PWM1:%05dHz,%4.1f%%",(unsigned int)(1000000/PWM1_T_Count),PWM1_Duty*100);
LCD_DisplayStringLine(Line8, Lcd_Disp_String);
sprintf((char *)Lcd_Disp_String, "PWM2:%05dHz,%4.1f%%",(unsigned int)(1000000/PWM2_T_Count),PWM2_Duty*100);
LCD_DisplayStringLine(Line9, Lcd_Disp_String);
中断回调函数
//输入捕获中断回调函数
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM2)
{
if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
{
PWM2_T_Count = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1)+1;
PWM2_Duty = (float)PWM2_D_Count/PWM2_T_Count;
}
else if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2)
{
PWM2_D_Count = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_2)+1;
}
}
if(htim->Instance==TIM3)
{
if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)
{
PWM1_T_Count = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_1)+1;
PWM1_Duty = (float)PWM1_D_Count/PWM1_T_Count;
}
else if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2)
{
PWM1_D_Count = HAL_TIM_ReadCapturedValue(htim,TIM_CHANNEL_2)+1;
}
}
}
4.总结
本文主要讲述了蓝桥杯(嵌入式)——输入捕获的实现,如有错误等问题,请及时联系我,谢谢!