欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

2020广东省物理大赛竞赛 设计一个可悬浮的声波悬浮装置程序设计

程序员文章站 2022-03-16 11:13:20
程序设计方案我们采用的是STM32F103RCT6芯片来产生超声波信号超声波信号 为STM32F103RCT6芯片产生的PWM方波频率为40KHZ 占空比为50%STM32F103RCT6内部定时器■ 多达11个定时器− 多达4个16位定时器,每个定时器有多达4个 用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入− 2 个16位带死区控制和紧急刹车,用于电机 控制的PWM高级控制定时器− 2个看门狗定时器(独立的和窗口型的) − 系统时间定时器:24位自减型计数器− 2 个1...

程序设计方案

我们采用的是STM32F103RCT6芯片来产生超声波信号
超声波信号 为STM32F103RCT6芯片产生的PWM方波
频率为40KHZ 占空比为50%
STM32F103RCT6内部定时器
■ 多达11个定时器
− 多达4个16位定时器,每个定时器有多达4个 用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入
− 2 个16位带死区控制和紧急刹车,用于电机 控制的PWM高级控制定时器
− 2个看门狗定时器(独立的和窗口型的) − 系统时间定时器:24位自减型计数器
− 2 个16位基本定时器用于驱动DAC

PWM的产生方式
2020广东省物理大赛竞赛 设计一个可悬浮的声波悬浮装置程序设计
PWM配置模式
2020广东省物理大赛竞赛 设计一个可悬浮的声波悬浮装置程序设计
2020广东省物理大赛竞赛 设计一个可悬浮的声波悬浮装置程序设计
2020广东省物理大赛竞赛 设计一个可悬浮的声波悬浮装置程序设计

利用STM32 CCR寄存器和ARR寄存器产生PWM
2020广东省物理大赛竞赛 设计一个可悬浮的声波悬浮装置程序设计
2020广东省物理大赛竞赛 设计一个可悬浮的声波悬浮装置程序设计
PWM的输出引脚

信号输出引脚1 PA1 TIM2_CH2
2020广东省物理大赛竞赛 设计一个可悬浮的声波悬浮装置程序设计
信号输出引脚2 PA7 TIM3_CH2
2020广东省物理大赛竞赛 设计一个可悬浮的声波悬浮装置程序设计
程序设计
信号输出引脚1 PA1 配置过程

void TIM3_PWM_Init(void)
{
		uint16_t PrescalerValue = 0;
		TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
		TIM_OCInitTypeDef  TIM_OCInitStructure;
		GPIO_InitTypeDef GPIO_InitStructure; 
	
		RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
	
		GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
		GPIO_Init(GPIOA, &GPIO_InitStructure);

		PrescalerValue = (uint16_t) (72000000 / 24000000) - 1;

		TIM_TimeBaseStructure.TIM_Period = 600-1;
		TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
		TIM_TimeBaseStructure.TIM_ClockDivision = 0;
		TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
		TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

		TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
		TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
		TIM_OCInitStructure.TIM_Pulse = 300;
		TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
		TIM_OC2Init(TIM3, &TIM_OCInitStructure);

		TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
		TIM_ARRPreloadConfig(TIM3, ENABLE);
		TIM_Cmd(TIM3, ENABLE);
}

信号输出引脚2 PA7 配置过程

void TIM2_PWM_Init(void)
{
		uint16_t PrescalerValue = 0;
		TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
		TIM_OCInitTypeDef  TIM_OCInitStructure;
		GPIO_InitTypeDef GPIO_InitStructure;   
		RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);

		GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_1;
		GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
		GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
		GPIO_Init(GPIOA, &GPIO_InitStructure);

		PrescalerValue = (uint16_t) (72000000 / 24000000) - 1;

		TIM_TimeBaseStructure.TIM_Period = 600-1;
		TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
		TIM_TimeBaseStructure.TIM_ClockDivision = 0;
		TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
		TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);

		TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
		TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
		TIM_OCInitStructure.TIM_Pulse = 300;
		TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
		TIM_OC2Init(TIM2, &TIM_OCInitStructure);

		TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);
		TIM_ARRPreloadConfig(TIM2, ENABLE);
		TIM_Cmd(TIM2, ENABLE);

}

本文地址:https://blog.csdn.net/m0_46179894/article/details/109012160