欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
stm32f407進(jìn)行直流電機(jī)pid調(diào)速源程序
[打印本頁]
作者:
浮沉11
時(shí)間:
2020-3-2 11:51
標(biāo)題:
stm32f407進(jìn)行直流電機(jī)pid調(diào)速源程序
stm32f407驅(qū)動(dòng)電機(jī)進(jìn)行pid調(diào)速。
IMG_20200302_114307.jpg
(287.75 KB, 下載次數(shù): 59)
下載附件
2020-3-2 11:48 上傳
單片機(jī)源程序如下:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
#include "adc.h"
#include "key.h"
#include "encoder.h"
#include "moter.h"
#include "pwm.h"
#include "tim.h"
#define BYTE0(dwTemp) ( *( (char *)(&dwTemp) ) )
#define BYTE1(dwTemp) ( *( (char *)(&dwTemp) + 1) )
#define BYTE2(dwTemp) ( *( (char *)(&dwTemp) + 2) )
#define BYTE3(dwTemp) ( *( (char *)(&dwTemp) + 3) )
u8 testdatatosend[50];
void Test_Send_User(uint16_t data1, uint16_t data2, uint16_t data3,uint16_t data4,uint16_t data5,uint16_t data6,uint16_t data7,uint16_t data8,uint16_t data9,uint16_t data10) ;
void UART1_Send_Str(unsigned char *s);
u8 temp[50];
char i=0;
int now;
int aim=50000;
int error,last_error;
int error_sum;
int pwm=200;
float KP=3.0
,KI=0.32 //0.34
,KD=50.0; //55.0
int main(void)
{
u8 key;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置系統(tǒng)中斷優(yōu)先級分組2
delay_init(168); //初始化延時(shí)函數(shù)
uart_init(115200); //初始化串口波特率為115200
LED_Init(); //初始化LED
LCD_Init(); //LCD初始化KEY_Init(); //按鍵初始化
TIM3_ENC_Init();
KEY_Init();
MOTER_Init();
LED_Init();
PWM_TIM4_Init(1000-1,84-1); //1000HZ
setPWM(pwm);
POINT_COLOR=RED;
LCD_ShowString(30,50,200,16,16,"Explorer STM32F4");
LCD_ShowString(30,70,200,16,16,"---PID---");
LCD_ShowString(30,90,200,16,16,"MOTER:");
LCD_ShowString(30,110,200,16,16,"2014/5/6");
TIM6_Int_Init(499,1679);
while(1)
{
key=KEY_Scan(0);
switch(key){
case 1: aim+=500;break;
case 2: aim-=500;break;
}
sprintf((char*)temp,"pwm:=%d ",pwm);
LCD_ShowString(30,130,200,16,16,temp);
sprintf((char*)temp,"encoder:=%d ",read_TIM3_position());
LCD_ShowString(30,150,200,16,16,temp);
sprintf((char*)temp,"aim:=%d ",aim);
LCD_ShowString(30,170,200,16,16,temp);
sprintf((char*)temp,"error:=%d ",error);
LCD_ShowString(30,190,200,16,16,temp);
Test_Send_User(now,aim,0,0,0,0,0,0,0,0);
}
}
void TIM6_DAC_IRQHandler(void) //100HZ 中斷函數(shù)
{
if(TIM_GetITStatus(TIM6,TIM_IT_Update)==SET)
{
if(++i==5)
{
i=0;
GPIO_ToggleBits(GPIOF,GPIO_Pin_9 ); //閃燈代表正在工作
}
now=read_TIM3_position(); //get現(xiàn)在位置
error=now-aim; //獲取誤差
if(error>=0) //如果error大于0 正轉(zhuǎn)動(dòng)
{ MOTER_CW();
LCD_ShowString(30,90,200,16,16,"++++++++++++++++"); //表示正轉(zhuǎn)動(dòng)
}
else
{ MOTER_CCW();
LCD_ShowString(30,90,200,16,16,"----------------");//表示反轉(zhuǎn)動(dòng)
} //如果error大于0 正轉(zhuǎn)動(dòng)
error_sum+=error; //誤差累計(jì)和
if(error_sum>1000)error_sum=1000; //積分限幅
if(error_sum<-1000)error_sum=-1000;
pwm=error*KP+error_sum*KI+(error-last_error)*KD; //pwm= 當(dāng)前誤差*比例項(xiàng) + 誤差累計(jì)*積分項(xiàng) + 兩次誤差之差*微分項(xiàng)
last_error=error; //誤差沖洗賦值
setPWM(pwm); //設(shè)定PWM
}
TIM_ClearITPendingBit(TIM6,TIM_IT_Update);
}
void Test_Send_User(uint16_t data1, uint16_t data2, uint16_t data3,uint16_t data4,uint16_t data5,uint16_t data6,uint16_t data7,uint16_t data8,uint16_t data9,uint16_t data10)
{
u8 _cnt=0;
u8 i;
u8 sum = 0;
testdatatosend[_cnt++]=0xAA;
testdatatosend[_cnt++]=0x05;
testdatatosend[_cnt++]=0xAF;
testdatatosend[_cnt++]=0xF1;
testdatatosend[_cnt++]=0;
testdatatosend[_cnt++]=BYTE1(data1);
testdatatosend[_cnt++]=BYTE0(data1);
testdatatosend[_cnt++]=BYTE1(data2);
testdatatosend[_cnt++]=BYTE0(data2);
testdatatosend[_cnt++]=BYTE1(data3);
testdatatosend[_cnt++]=BYTE0(data3);
testdatatosend[_cnt++]=BYTE1(data4);
testdatatosend[_cnt++]=BYTE0(data4);
testdatatosend[_cnt++]=BYTE1(data5);
testdatatosend[_cnt++]=BYTE0(data5);
testdatatosend[_cnt++]=BYTE1(data6);
testdatatosend[_cnt++]=BYTE0(data6);
testdatatosend[_cnt++]=BYTE1(data7);
testdatatosend[_cnt++]=BYTE0(data7);
testdatatosend[_cnt++]=BYTE1(data8);
testdatatosend[_cnt++]=BYTE0(data8);
testdatatosend[_cnt++]=BYTE1(data9);
testdatatosend[_cnt++]=BYTE0(data9);
testdatatosend[_cnt++]=BYTE1(data10);
testdatatosend[_cnt++]=BYTE0(data10);
testdatatosend[4] = _cnt-5;
for( i=0;i<_cnt;i++)
sum += testdatatosend[i];
testdatatosend[_cnt++]=sum;
UART1_Send_Str(testdatatosend);
}
void UART1_Send_Str(unsigned char *s)//發(fā)送字符串 函數(shù) 應(yīng)用指針 方法
{
unsigned char i=0; //定義一個(gè)局部變量 用來 發(fā)送字符串 ++運(yùn)算
while(s[i]!=' ') // 每個(gè)字符串結(jié)尾 都是以 結(jié)尾的
{
USART_SendData(USART1,s[i]); //通過庫函數(shù) 發(fā)送數(shù)據(jù)
while( USART_GetFlagStatus(USART1,USART_FLAG_TC)!= SET);
//等待發(fā)送完成。 檢測 USART_FLAG_TC 是否置1; //見庫函數(shù) P359 介紹
i++; //i++一次
}
}
復(fù)制代碼
所有資料51hei提供下載:
PID教程視頻對應(yīng)代碼.7z
(343.65 KB, 下載次數(shù): 123)
2020-3-2 13:56 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
范某人
時(shí)間:
2023-7-13 19:22
視頻在哪里
作者:
1607405464
時(shí)間:
2023-7-27 21:31
我的好哥哥,視頻在哪里呀
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1