標(biāo)題:
基于STM32帆擺模型源碼 加深對(duì)PID控制的了解
[打印本頁]
作者:
Jaken
時(shí)間:
2018-7-17 12:57
標(biāo)題:
基于STM32帆擺模型源碼 加深對(duì)PID控制的了解
這個(gè)實(shí)驗(yàn)主要是加深對(duì)PID控制的了解
0.png
(43.69 KB, 下載次數(shù): 39)
下載附件
2018-7-17 19:10 上傳
單片機(jī)源程序如下:
#include "stm32f4xx.h"
#include "usart.h"
#include "delay.h"
#include "key.h"
#include "led.h"
#include "PWM.h"
#include "dianji.h"
#include "ADC.h"
#include "oled.h"
#include "PID.h"
#define angle_1_amendment -7.5 ; //角度修正
void CNM_ZZ(void);
void CNM_SB(void);
extern float TargetVal;
extern float angle_1;
extern int PIDout;
float z;
u8 ve[32]={0};
u8 ze[30]={0};
u8 ke[30]={0};
int a=0;
u16 adcx; //采集值
float temp; //當(dāng)前電壓值
u16 c;
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(9600);
delay_init(168); //初始化延時(shí)函數(shù)
key_init();
dianji_Init();
LED_Init();
TIM14_PWM_Init(5000,0);
TIM10_PWM_Init(8000,0);
Adc_Init();
OLED_Init();
OLED_Show_Font(0,4,0);
OLED_Show_Font(16,4,1);
OLED_Show_Font(32,4,3);
OLED_Show_Font(48,4,4);
OLED_Show_Font(64,4,2);
OLED_Show_Font(80,4,5);
OLED_Show_Font(0,22,0);
OLED_Show_Font(16,22,1);
OLED_Show_Font(32,22,7);
OLED_Show_Font(48,22,8);
OLED_Show_Font(64,22,2);
OLED_Show_Font(80,22,5);
OLED_Show_Font(0,40,9);
OLED_Show_Font(16,40,10);
OLED_Show_Font(32,40,11);
OLED_Show_Font(48,40,12);
OLED_Show_Font(64,40,13);
OLED_Show_Font(80,40,14);
OLED_Show_Font(96,40,5);
OLED_Show_Font2(110,48,0);
while(1)
{
c=USART_ReceiveData(USART1);
if(c=='A'||c=='B'||c=='H')
CNM_ZZ(); //設(shè)定值加1
else if(c=='E'||c=='D'||c=='F')
CNM_SB(); //設(shè)定值減1
else if(c=='G')
{
PIDout=0;
} //停止
adcx=Get_Adc_Average(ADC_Channel_5,20); //采集20次的平均通道值
temp=(float)adcx*(3.3/4096); //當(dāng)前電壓值
angle_1=temp*(360/3.3)+angle_1_amendment; //當(dāng)前角度值
PID_Calculate();
z=PIDout/50;
TIM_SetCompare1(TIM14,PIDout);
sprintf((char*)ve,"%.1f",angle_1);
sprintf((char*)ze,"%.1f",TargetVal);
sprintf((char*)ke,"%.1f",z);
OLED_ShowString(98,4,ve,12);
OLED_ShowString(98,22,ze,12);
OLED_ShowString(90,48,ke,12);
OLED_Refresh_Gram();//更新顯示到OLED
}
}
void CNM_ZZ(void)
{
TargetVal=TargetVal+1;
GPIO_ResetBits(GPIOF,GPIO_Pin_8);
GPIO_SetBits(GPIOF,GPIO_Pin_10);
}
void CNM_SB(void)
{
TargetVal=TargetVal-1;
GPIO_ResetBits(GPIOF,GPIO_Pin_8);
GPIO_SetBits(GPIOF,GPIO_Pin_10);
}
復(fù)制代碼
所有資料51hei提供下載:
帆板2.5版.rar
(503.4 KB, 下載次數(shù): 24)
2018-7-17 19:11 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
瘋子本人
時(shí)間:
2018-10-18 16:15
問下樓主, TIM_SetCompare1(TIM14,PIDout);這里面的PIDoout是否為pid算法的返回值
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1