资源简介
基于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系统最新架构师培训视频
相关资源
- STM32F103 ucLinux 开发BOOT源码
- stm32驱动ov7670 数据转BMP格式再转JPEG存
- 基于LabVIEW的模拟PID控制程序
- 用labview演示PID控制规律225921
- Audio_Test for STM32F4Discovery
- stm32f407+FFT浮点运算例程
- Arduino的PID库
- max31856官方驱动例程STM32
- 基于STM32的MFRC522射频识别源程序
- AD5422_STM32驱动程序
- CANOPEN在STM32F103ZET6单片机上的实现
- STM32F103ZET6原理图及pcb.rar
- 基于STM32的LTC2634驱动程序;
- stm32 高级定时器1的互补输出死区设置
- 正点原子STM32F407 AD封装库
- pid单纯形法
- USB设备状态监控插拔事件响应等。
- stm32编写的25lc512驱动文件
- STM32F103ZET6单片机CAN总线通信程序例程
- stm32射频卡RC522测试程序亲测可用
- STM32数字示波器制作资料PCB原理图源程
- STM32神舟3号开发板原理图
- 几种PID控制器参数整定方法的比较研
- 采用STC12C5A60S2单片机作为主控芯片实
- IAR环境下STM32F1xx堆栈的外部SRAM实现
- stm32f1 M3 浮点快速运算库
- 神经网络和PID控制
- 基于STM32F103的4*5矩阵按键
- STM32定时器输出带有死区时间的PWM波形
- 基于Stm32f10x的循迹灭火小车
评论
共有 条评论