- 所用工具:
1、proteus STM32F103C6xx
2、STM32CubeMx软件
3、IDE: STM32CubIDE
4、STM32F1xx HAL库
- 设计思路:
采用stm32f103C6为主控芯片,及led-green;时钟源为晶振为8M的系统内部时钟;使用的定时器为TIM1,并且使用PWM Generation CH1为PWM输出;
什么是PWM
脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
PWM工作原理
SMT32F1系列共有8个定时器:
高级定时器(TIM1、TIM8);通用定时器(TIM2、TIM3、TIM4、TIM5);基本定时器(TIM6、TIM7)。
STM32的每个通用定时器都有独立的4个通道可以用来作为:输入捕获、输出比较、PWM输出、单脉冲模式输出等。
STM32的定时器除了TIM6和TIM7(基本定时器)之外,其他的定时器都可以产生PWM输出。其中,高级定时器TIM1、TIM8可以同时产生7路PWM输出.
原理:
向上计数模式
PWM频率:
Fpwm =Tclk / ((arr+1)*(psc+1))(单位:Hz)
Tclk 是时钟频率
arr 是计数器值
psc 是预分频值
占空比:
duty circle = ccrx / arr(单位:%)
ccrx 用户设定值
以上 Tclk、 arr、 psc、 ccrx各值用户均可自己设置。
STM32CubeMx配置
打开STM32CubeMx
选择TIM1、时钟源选择内部时钟,通道1选择PWM Generation CH1,STM32内部时钟为8MHZ
同时将proteus中STM32时钟设为8M
将psc设置8-1,arr设置为500-1,此时PWM频率为8M/8/500=2000HZ
proteus仿真电路设计
软件设计
int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_TIM1_Init(); /* USER CODE BEGIN 2 */ uint16_t pwm=0; //占空比 HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1); //开启PWM通道1 // EN1_SET; /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { while (pwm< 499) { pwm++; __HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1, pwm); //通过修改比较值来改变占空比 // TIM3->CCR1 = pwmVal; 可通过操作寄存器来控制CCR1的值 } while (pwm) { pwm--; __HAL_TIM_SetCompare(&htim1, TIM_CHANNEL_1, pwm); //通过修改比较值来改变占空比 // TIM3->CCR1 = pwmVal; 可通过操作寄存器来控制CCR1的值 HAL_Delay(1); } HAL_Delay(200); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */
效果
可实现LED呼吸灯效果
标签:仿真,CODE,HAL,pwm,定时器,stm32,proteus,USER,PWM From: https://www.cnblogs.com/CC-C/p/16940587.html