STM32F103基于PID的ADC/DAC闭环控制实现

基于 STM32F103 的 PID 控制项目,蛮适合刚入门或者想深入了解 ADC、DAC 结合应用的朋友。

STM32F103 的 ADC 精度还不错,配合内部 DAC 搞闭环控制,效率蛮高。用它来跑个温控或者电机调速都挺稳。

PID 算法这块,逻辑清晰:先用adc_read()获取实时值,再喂给pid_update()算出控制量,用dac_write()输出。整体跑下来,响应也快,代码也简单。

调参方面,可以用 Ziegler-Nichols 那套整,Kp/Ki/Kd设好了,效果立马见效。不过注意 ADC 采样频率别太低,不然延迟会拉垮系统表现。

代码部分已经封装好了函数,结构清晰。比如:

float pid_update(float setpoint, float measured_value);
uint16_t adc_read(uint8_t channel);
void dac_write(uint8_t channel, uint16_t value);

如果你项目里正好要用 STM32 搞闭环控制,尤其又不想接外设模拟模块,这套代码资源可以试试,蛮省事。

zip
code.zip 预估大小:62个文件
folder
code 文件夹
file
adc_uvopt.bak 10KB
folder
config 文件夹
file
config.h 603B
file
JLink Regs CM3.txt 497B
file
adc.uvgui.aureole 129KB
folder
driver 文件夹
file
nvic.c 1KB
file
rcc.c 3KB
file
dac.c 2KB
file
usart.c 5KB
file
adc.c 4KB
folder
obj 文件夹
file
nvic.crf 106KB
file
dac.o 82KB
file
usart.o 98KB
file
adc.d 274B
file
rcc.d 167B
file
main.crf 128KB
file
dac.d 167B
file
nvic.o 82KB
file
usart.crf 129KB
file
rcc.o 82KB
file
dac.map 135KB
file
dac.axf 49KB
file
ExtDll.iex 19B
file
dac.sct 479B
file
rcc.crf 107KB
file
terminal.d 455B
file
dac.tra 1KB
file
main.d 584B
file
dac.lnp 344B
file
dac.plg 169B
file
adc.o 87KB
file
startup_stm32f10x_hd.o 7KB
file
dac.htm 90KB
file
nvic.d 173B
file
adc.crf 109KB
file
startup_stm32f10x_hd.d 54B
file
main.o 99KB
file
startup_stm32f10x_hd.lst 48KB
file
dac.crf 106KB
file
usart.d 493B
file
terminal.o 95KB
file
terminal.crf 116KB
file
JLinkSettings.ini 573B
file
adc.uvgui_aureole.bak 66KB
file
adc.uvgui.Administrator 72KB
file
startup_stm32f10x_hd.s 15KB
folder
include 文件夹
file
stm32f10x_reg.h 138KB
file
rcc.h 735B
file
dac.h 670B
file
adc.h 837B
file
terminal.h 903B
file
usart.h 823B
file
hardware.h 996B
file
nvic.h 693B
file
adc_Target 1.dep 3KB
file
adc.uvproj 16KB
file
adc_uvproj.bak 15KB
file
adc.uvopt 10KB
folder
function 文件夹
file
terminal.c 6KB
file
JLinkLog.txt 94KB
folder
main 文件夹
file
main.c 2KB
file
PID.c 3KB
file
adc.uvgui_Administrator.bak 72KB
zip 文件大小:621.06KB