• 大小: 782KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-10
  • 语言: 其他
  • 标签: STM32  PID  

资源简介

基于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个文件信息

评论

共有 条评论