合肥网站建设设计公司哪家好,教您如何找专业网站制作公司,网站公司简介模板免费下载,o2o网站建设最好公司排名STM32CubeIDE基础学习-定时器PWM实验 文章目录 STM32CubeIDE基础学习-定时器PWM实验前言第1章 硬件介绍第2章 工程配置2.1 基础工程配置部分2.2 生成工程代码部分 第3章 代码编写3.1 查看PWM波3.2 设置单个比较值3.3 呼吸灯 第4章 实验现象总结 前言
在平时单片机开发时#…STM32CubeIDE基础学习-定时器PWM实验 文章目录 STM32CubeIDE基础学习-定时器PWM实验前言第1章 硬件介绍第2章 工程配置2.1 基础工程配置部分2.2 生成工程代码部分 第3章 代码编写3.1 查看PWM波3.2 设置单个比较值3.3 呼吸灯 第4章 实验现象总结 前言
在平时单片机开发时需要用到单片机输出一个固定占空比那么就可以采取PWM脉冲调制技术了。
PWM在STM32的应用中还是比较常用的比较多的设备是需要用PWM来驱动的比如舵机、步进电机等。
STM32CubeIDE基础知识学习回顾
实验目的 学习使用定时器输出PWM功能实现定时器输出占空比从而可以在开发板的LED灯看效果功能。
注意查看本实验现象要要用到示波器工具这个要懂得示波器基础使用才行。 第1章 硬件介绍
LED灯的连接原理图如下 由上图硬件连接原理图可知LED接到主控芯片的PA8引脚上想要看输出的PWM波可以直接选择LED所在的引脚作为定时器输出通道就可以看到具体现象了。
实验过程中用肉眼单纯看PWM的占空比是看不出来的那么需要借助工具才行我查看波形采用正点原子的DS100示波器这个示波器的性能用在本实验是足够了可以查看占空比、周期、时间宽度和占空比对应的电压等。
接着打开芯片数据手册下拉找到PA8引脚所在的位置如下图所示 该PA8引脚所在定时器1的通道1上所以后面配置这个定时器通道输出PWM即可。
当然如果手上有示波器就不一定要选LED所在的输出通道了直接选一个定时器输出通道即可直接用示波器来看输出的波形或占空比也是很方便的。
第2章 工程配置
2.1 基础工程配置部分
本实验采用LED实验的工程作为模板直接在上面添加定时器PWM的功能配置即可。
第一步配置定时器时钟源。 按照标号步骤依次选择即可定时器1使用的是内部时钟源通道1输出。
第二步配置定时器相关参数。 根据定时器公式PSC取7199ARR取99向上计数模式。
第三步配置PWM参数。 采用PWM1模式极性为高电平有效这里参数Pulse的值就是CCRx的值用来设置初始占空比的值在初始化时可以设置也可以不设置让其默认为0这里问题不大后面在实际使用时还是会改变该值的。那么为了查看初始PWM的情况这里就初始化设置为ARR值的一半即初始为50%的占空比。输出比较默认为使能即可。
到此定时器及PWM功能配置完成之后可以看到芯片的PA8引脚被配置为了TIM1_CH1了如下图所示 2.2 生成工程代码部分
配置完功能之后就可以点击生成工程代码了。
可以看到main文件多了一个定时器的初始化函数和tim.c文件如下图所示 进入定时器初始化函数后如下图所示 里面主要是设置定时器相关参数等。 到此检查生成初始化代码部分没有问题后就可以编写完成后面的控制功能代码就可以了。
第3章 代码编写
3.1 查看PWM波
在输出PWM之前需要使能输出通道才可以即使能CC1E位使能之后就可以输出PWM了不然是无法正常输出的。main函数调用使能函数如下图所示 到此前面设置PWM参数时已经设置了Pulse的值为50了那么使能输出通道之后不用写其它代码就可以正常输出一个50%占空比的PWM波了。
下面就用示波器来查看该波形情况效果如下图所示 根据公式计算和结合示波器输出参数可以看到占空比是50%周期是10ms频率100Hz。经过示波器的参数显示分析它们参数一致则说明代码的设置是正确的。
3.2 设置单个比较值
使能初始化正常之后就可以调用函数来设置CCRx的值来设置指定PWM占空比了。
HAL库提供了一个设置比较值函数__HAL_TIM_SET_COMPARE(HANDLE, CHANNEL, COMPARE); 该函数的第一个参数是定时器句柄、第二个是定时器输出通道、第三是比较值。
函数具体定义如下所示 在while循环里面调用该函数然后传入相关参数如下图所示 这里传入100则是占空比为100%了。下面以传入30为例演示 代码片示例如下 /* Infinite loop *//* USER CODE BEGIN WHILE */while (1){__HAL_TIM_SET_COMPARE(htim1, TIM_CHANNEL_1, 30);/* USER CODE END WHILE */}下载代码后示波器检测波形如下图所示 函数比较值传入30即占空比为30%高电平电压为1.07接近1.1了。说明这个函数设置的比较值是没有问题的。
3.3 呼吸灯
能正常独立设置单个比较值之后就可以把该变量设置为实时动态变化的数值按规律递增或递减改变这样就可以实现一个类似呼吸灯的效果了。 代码片示例如下 /* Infinite loop *//* USER CODE BEGIN WHILE */while (1){HAL_Delay(30); /* 控制速度 */if(dir){pwm_val;if(pwm_val 99){dir 0;}}else{pwm_val--;if(pwm_val 0){dir 1;}}__HAL_TIM_SET_COMPARE(htim1, TIM_CHANNEL_1, pwm_val);/* USER CODE END WHILE */}定义局部变量如下图所示 下载代码后就可以看到开发板的LED逐渐变亮再由最亮逐渐变暗了类似呼吸灯效果。要是想要显示呼吸的快慢不一样设置延时参数即可时间越短速度越快。
注意这个比较值最大是100实际测试时发现到80时LED基本可以达到最亮了所以会看到亮的时间会比较长些如果要亮的时间和灭的时间差不多可以设置最大的值限制为80而不用到99了根据实际情况设置即可。
第4章 实验现象
看上面具体内容介绍即可。 总结
定时器输出PWM功能还是比较好玩的能弄懂这个功能的使用可以应用到很多的场景了可以控制输出固定的电压STM32的IO最大输出是3.3v的按照前面的例子来等分就可以得到相应的电压值了。呼吸灯的效果也很有意思类似手机的消息提示了。