资源简介
基于STM32F103R8的PID算法例程,完整工程源码,PWM输出控制信号,ADC输入反馈信号,形成闭环控制。

代码片段和文件信息
/******************** STMicroelectronics ********************
* File Name : main.c
* Author : 杜应彪
* Date First Issued : 09-12-17
* Description : Main program body
*************************************************************/
/* Includes ------------------------------------------------------------------*/
#include “stm32f10x_lib.h“
#include “Driver/adc.h“
#include “Driver/PWM.h“
#include “Driver/pid.h“
/*
ADC=12*(3.3/23.3)*(2.483/4096)=0x2bc -->ADC>>1=1349
*/
u16 referenceValue=1375; //12V经3.3/23.3的分压后通过ADC计算的理论值ADC的参考压是2.5V
//extern u16 TIM1_CCR1_Val; //PWM占空比设置
//extern u16 TIM2_CCR1_Val;
//extern u16 TIM3_CCR1_Val;
extern u16 Duty_Value; //PWM占空比设置
RCC_ClocksTypeDef RCC_ClockFreq;
ErrorStatus HSEStartUpStatus;
NVIC_InitTypeDef NVIC_InitStructure;
extern TIM1_OCInitTypeDef TIM1_OCInitStructure;
extern PID sPID;
/* Private function prototypes -----------------------------------------------*/
void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void IRQConfig(void);
/* Private functions ---------------------------------------------------------*/
void Delay(u16 msec)
{
while(msec--);
}
#define N 12
//---------------ADC的滤波方法----------------
//--------采用中值平均滤波方法,防止脉冲干扰------
u16 ADC_Filter(void)
{
u8 countij;
u16 value_buf[N]temp;
u16 sum=0;
for (count=0;count {
value_buf[count] = ADC_ConvertValue()>>1; //去掉最低2bit,使其数据值稳定准确
//Delay(10);
}
for (j=0;j {
for (i=0;i {
if ( value_buf[i]>value_buf[i+1] )
{
temp = value_buf[i];
value_buf[i] = value_buf[i+1];
value_buf[i+1] = temp;
}
}
}
for(count=2;count sum += value_buf[count];
return (u16)(sum/(N-4));
}
/*
//-------求绝对值--------
u16 my_abs(vs16 value)
{
if (value<0)
return (-value);
else
return value;
}
//---------PID与PWM算法---------------
//---------说明:暂有问题---------------
u8 My_PIDCtrl(u16 MeasureADCu16 RefADC)
{
vs16 Err;
Err=MeasureADC-RefADC;
if(my_abs(Err)>10)
{
if(MeasureADC>RefADC)
return 0; //当采样的电压大于参考的电压值,则应该增大PWM
else if (MeasureADC return 1; //当采样的电压小于参考的电压值,则应该减小PWM
}
else
return 0xaa;
}
*/
/*******************************************************************************
* Function Name : main
* Description : Main program
* Input : None
* Output : None
* Return : None
*******************************************************************************/
int main(void)
{
int measurementValue=0;
int PIDoutputValue=Duty_init;
//u8 ISInc_Dec;
//u8 ii=1;
/* System Clocks Configuration */
RCC_Configuration();
/* GPIO Configuration */
GPIO_Configuration();
/* NVIC configuration */
NVI
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2014-11-22 14:51 STM32_PID\
目录 0 2014-11-22 14:51 STM32_PID\listing\
文件 36557 2010-01-05 20:09 STM32_PID\listing\STM32F10x.lst
文件 73835 2010-01-05 20:09 STM32_PID\listing\tim1.map
目录 0 2014-11-22 14:52 STM32_PID\obj\
文件 19 2010-01-05 20:10 STM32_PID\obj\ExtDll.iex
文件 5180 2010-01-05 20:09 STM32_PID\obj\STM32F10x.o
文件 41593 2010-01-05 20:09 STM32_PID\obj\adc.crf
文件 419 2010-01-05 20:09 STM32_PID\obj\adc.d
文件 49736 2010-01-05 20:09 STM32_PID\obj\adc.o
文件 88259 2010-01-05 20:09 STM32_PID\obj\main.crf
文件 625 2010-01-05 20:09 STM32_PID\obj\main.d
文件 93968 2010-01-05 20:09 STM32_PID\obj\main.o
文件 816 2010-01-05 20:09 STM32_PID\obj\pid.crf
文件 56 2010-01-05 20:09 STM32_PID\obj\pid.d
文件 7804 2010-01-05 20:09 STM32_PID\obj\pid.o
文件 60514 2010-01-04 10:49 STM32_PID\obj\pwm.crf
文件 370 2010-01-04 10:49 STM32_PID\obj\pwm.d
文件 58008 2010-01-04 10:49 STM32_PID\obj\pwm.o
文件 42680 2010-01-05 20:09 STM32_PID\obj\pwm_2.crf
文件 353 2010-01-05 20:09 STM32_PID\obj\pwm_2.d
文件 42484 2010-01-05 20:09 STM32_PID\obj\pwm_2.o
文件 41600 2010-01-05 20:09 STM32_PID\obj\stm32f10x_adc.crf
文件 390 2010-01-05 20:09 STM32_PID\obj\stm32f10x_adc.d
文件 51360 2010-01-05 20:09 STM32_PID\obj\stm32f10x_adc.o
文件 32629 2010-01-05 20:09 STM32_PID\obj\stm32f10x_dma.crf
文件 390 2010-01-05 20:09 STM32_PID\obj\stm32f10x_dma.d
文件 39072 2010-01-05 20:09 STM32_PID\obj\stm32f10x_dma.o
文件 19342 2010-01-05 20:09 STM32_PID\obj\stm32f10x_flash.crf
文件 367 2010-01-05 20:09 STM32_PID\obj\stm32f10x_flash.d
文件 23576 2010-01-05 20:09 STM32_PID\obj\stm32f10x_flash.o
............此处省略96个文件信息
- 上一篇:UML实验报告1-8次
- 下一篇:软考2018系统最新架构师培训视频
相关资源
- STM32F103RC+ADC+DMA多通道采样LCD显示
- I2C读写AT24C02 基于STM32F103 cube116540
- PID_AutoTune_v0.rar
- 基于stm32f103ve的程序——跑马灯实验
- 基于STM32RCT6的步进电机驱动程序
- stm32f407上的两个can发送和接收例程
- STM32 led 时钟
- FPGA实现PID.v
- DV泵加罗茨泵独立控制系统PID.smart
- STM32 2.4G通信例程
- 直流无刷电机方波驱动 stm32 例程代码
- STM32中文资料
- STM32蓝牙和串口程序
- 模糊PID控制 c
- STM32f103超声波模块例程
- stm32f103c8t6 4 oled.rar
- stm32f030 IAP Demo(原创)
- STM32基于rt_thread操作系统的SDHC卡文件
- NRF24L01实现51与STM32双向通讯
- STM32F103 串口程序(完整版)
- stm32 ds18b20 温度传感器 测试通过
- stm32官方例程
- STM32F103定时器中断程序
- [免费]基于stm32f103ze 的OLED驱动代码
- STM32F103RBT6驱动UC1698控制芯片的160160黑
- STM32F103 DS18B20 V3.5.0固件库驱动程序工
- STM32定时器使用入门。看了这个程序会
- SIM908 SDIO FSMC STM32 FIFO
- STM32F103 CC2500完整驱动(模拟SPI)
- AD7606采集程序
评论
共有 条评论