STMCU小助手
发布时间:2022-5-24 10:50
|
本文将借助STM32CubeMX来配置ADC、DMA、DAC、USART,并利用PID位置式算法实现对输出电压进行AD采集通过PID算法调节DAC,获取到我们想要的电压值。 讲解的主要知识: 1.何为PID以及为何需要PID 2.STM32CubeMX创建 3.STM32源代码 1、何为PID以及为何需要PID 以下是PID控制的整体框图,过程描述为:设定一个输出目标,反馈系统传回输出值,如与目标不一致,则存在一个误差,PID根据此误差调整输入值,直至输出达到设定值。 疑问:那我们为什么需要PID呢?比如我想要利用DAC输出一个1.65V电压,直接输出不就可以了吗? 这里必须要先说下我们的目标,因为我们所有的控制无非就是想输出能够达到我们的设定,即如果我们设定了一个目标电压值,那么我们想要一个什么样的电压值变化呢? 比如设定目标电压值为1.65V,目标无非是希望其能够快速而且没有抖动的达到1.65V。 那这样大家应该就明白,如果只是使用DAC输出一个数字信号,外界出现的误差(例如导线、噪声等原因)都可能影响到最终输出的数值,因此我们需要利用PID调节最终读取到我们想要的值。
Eg:要求输出1.65V,控制输出1.65V,其实得到的是1.6V,如果控制输出1.68V,那么可能可以得到1.65V,其实就是缩减目标与实际之间的误差。 2、STM32CubeMX配置: 2.1 所用工具: 芯片:STM32F103RCT6 IDE:MDK-Keil软件 STM32F1xxHAL库 2.2 知识概括: STM32CubeMX创建ADC、DMA、DAC、USART例程 Keil软件程序编写 2.3 工程创建 1、芯片选择 芯片:STM32F103RCT6(根据自己的板子来进行选择)
2、设置RCC 设置高速外部时钟HSE 选择外部时钟源
3、设置ADC引脚 ADC1通道0即PA0,开启连续转换模式,转换周期:55.5Cycles
4、ADC利用DMA传输 设置DMA传输模式:循环传输(有数据就传输),同时设置高优先级
5、开启DAC输出
6、开启USART1 设置异步通信,波特率115200Bits/s
7、配置时钟 F1系列芯片系统时钟为72MHzs
8、项目创建最后步骤 设置项目名称 设置存储路径 选择所用IDE
9、输出文件 ②处:复制所用文件的.c和.h ③处:每个功能生产独立的.c和.h文件
10、创建工程文件 点击GENERATE CODE 创建工程 11、配置下载工具 这里我们需要勾选上下载后直接运行
3、STM32源代码: 首先编写pid.c与pid.h文件代码,这里编写的是pid位置式算法。 (1)pid.h
(2)pid.c
(3)在main.c加上:
(4)在ADC初始化之后加上AD校准函数:
(5)while中加上:
(6)用一根杜邦线连接PA0(ADC1_IN0)与PA4(DAC),然后串口连接电脑(我这里利用USB转TLL连接电脑,RX接PA9(USART1_TX),TX接PA10(USART1_RX)) (7)之后就可以完成正常读取,刚打开串口时: (8)PID调节稳定后(DAC输出1.65V): 总结: 以上就是利用PID调节控制获取我想要设定的电压值。 |
经验分享 | FDCAN数据段波特率增加后发送失败的问题分析
STM32几种流行开发环境的优缺点
好用软件推荐-TouchGFX Designer
OpenSTLinux 6.1发布:M33-TD加持+安全升级,STM32MPU开发效率翻倍!
【经验分享】STM32CubeIDE汉化
手把手教你VSCode搭建STM32开发环境
RTOS在STM32中的应用
【下载有礼】STM32 Finder华为应用商店正式上线!移动选型工具助力开发效率升级
【2025·STM32峰会】GUI解决方案实训分享5-调通板载的NRF24L01 SPI接口并使用模块进行无线通信(发送和接收)
【2025·STM32峰会】GUI解决方案实训分享2-编译运行TouchGFX咖啡机例程(含桌面仿真)
微信公众号
手机版