赞
踩
脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。
原理讲解:
下图为向上计数模式:
PWM的一个周期
总结:
每个定时器有四个通道,每一个通道都有一个捕获比较寄存器,
将寄存器值和计数器值比较,通过比较结果输出高低电平,便可以实现脉冲宽度调制模式(PWM信号)
TIMx_ARR寄存器确定PWM频率,
TIMx_CCRx寄存器确定占空比
具体不同定时器对应引脚在对应芯片数据手册的引脚说明(pin description) 中查看
这里我们以TIM3_CH1 PA6作为讲解




定时器参数设置

4项目文件设置


main函数中代码
- 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_TIM3_Init();
- /* USER CODE BEGIN 2 */
-
- HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
-
- /* USER CODE END 2 */
-
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- /* USER CODE END WHILE */
- for(int i=0;i<=1000;i+=10)
- {
- __HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1,i);
- HAL_Delay(10);
- }
- for(int i=1000;i>=0;i-=10)
- {
- __HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1,i);
- HAL_Delay(10);
- }
- /* USER CODE BEGIN 3 */
- }
- /* USER CODE END 3 */
- }

函数解析:
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1); //使能TIM3的PWM Channel1 输出
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, value); //定时器的值与value比较,如果低于value,输出为低,否则为高
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。