久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
STM32尋跡小車(chē)pid調(diào)速源碼
[打印本頁(yè)]
作者:
jijiahui
時(shí)間:
2018-2-5 10:09
標(biāo)題:
STM32尋跡小車(chē)pid調(diào)速源碼
尋跡小車(chē)pid調(diào)速
單片機(jī)源程序如下:
#include "adc.h"
#include "common.h"
#include "usart.h"
#include "L298N.h"
#include "senser.h"
#include "NVIC.h"
#include "ir1838.h"
#include "DMA.h"
#define kP 11
#define kdI 200 //nI除數(shù) kI=1/kdI
#define kD 120
#define kdPID 28//PID除數(shù)
#define D_INTERVAL 1200
#define I_INTERVAL 15
#define ONLINE_MINVAL 25
#define POSVAL_MAX SENSER_MAXVAL*2//位置量值域(-POSVAL_MAX,POSVAL_MAX)
#define SPEED_MIN 1700
#define SPEED_NORMAL 1950
#define SPEED_MAX 2000
#define CHECK_WAIT_TIMEOUT 100000
extern u16 ADC_DataBuffer[ADC_DMA_BUFFER_LENGTH];
extern u32 senVals[3];
u16 mod=0;
int main()
{
s32 PID;
s32 nP=0;
s32 nI=0;
s32 nD=0;
s32 nLastP=0;
u32 nDC=D_INTERVAL;
u32 nIC=I_INTERVAL;
s32 carSpeed=SPEED_NORMAL;
u32 checkWait=0;
u8 adjustMod=100;
common_init();
ADC_init();
#ifdef USART_ON
usart_init();
#endif
L298N_init();
#ifdef IR_CTRL_
IR1838_init();
#else
//mod=1;
#endif
DMA_init();
NVIC_init();
delayms(120);//等待DMA將 adc_buffer 填滿,避免senser校準(zhǔn)值出錯(cuò)(如果有0會(huì)導(dǎo)致minvs不正確)
while (1)
{
#ifdef IR_CTRL_
Ircordpro();
#endif
switch (mod)
{
case 0:
//等待車(chē)被放上跑道
senVals[0]=ADC_DMA_getVal(0);
senVals[1]=ADC_DMA_getVal(1);
senVals[2]=ADC_DMA_getVal(2);
#ifdef USART_ON
#define LSHIFTBIT 9
#define SENVALGATE 9
//printDebug("senVals[0]=",senVals[0]);
//printDebug("senVals[1]=",senVals[1]);
//printDebug("senVals[2]=",senVals[2]);
//printDebug("-------------\n",0);
if(senVals[2]>SENVALGATE)
{
senVals[2]-=SENVALGATE;
}
else
{
senVals[2]=0;
}
senVals[2]<<=LSHIFTBIT;
L298N_setLS(senVals[2]);
L298N_setRS(senVals[2]);
//delayms(3000);
continue;
#endif
if (senVals[0]>SENSER_ORIGIN_MIN&&senVals[0]>SENSER_ORIGIN_MIN&&senVals[0]>SENSER_ORIGIN_MIN)//車(chē)被提起
{
checkWait=CHECK_WAIT_TIMEOUT;
adjustMod=100;
L298N_setLS(0);
L298N_setRS(0);
}
else
{
if(adjustMod==100)
{
adjustMod=0;
Senser_reset();
}
}
switch (adjustMod)
{
case 0:
if (checkWait)
{
checkWait--;
}
else
{
adjustMod=1;
beep(900,300);
}
break;
case 1:
//將左傳感器移動(dòng)到線上
L298N_setLS(1400);
L298N_setRS(0);
if(senVals[0]>SENSER_ORIGIN_MIN)
{
adjustMod=2;
}
break;
case 2:
//將左傳感器移動(dòng)到線右邊
if(senVals[0]<SENSER_ORIGIN_MIN)
{
L298N_setLS(0);
L298N_setRS(0);
adjustMod=3;
beep(900,300);
}
break;
case 3:
//左轉(zhuǎn)開(kāi)始掃描,直到右傳感在線上
L298N_setLS(0);
L298N_setRS(1400);
if(senVals[2]>SENSER_ORIGIN_MIN)
{
adjustMod=4;
}
break;
case 4:
//直到右傳感器移動(dòng)到線左邊
if(senVals[2]<SENSER_ORIGIN_MIN)
{
adjustMod=5;
beep(900,300);
}
break;
case 5:
//右轉(zhuǎn)直到中間傳感器在線上
L298N_setLS(1400);
L298N_setLS(0);
if(senVals[1]>SENSER_ORIGIN_MIN)
{
beep(800,300);
delayms(10);
beep(600,300);
delayms(10);
beep(600,300);
delayms(10);
beep(600,300);
mod=1;
}
}
if(adjustMod==3||adjustMod==4)
{
//校正
Senser_getsv(0);
Senser_getsv(1);
Senser_getsv(2);
}
case 1:
Senser_getsv(0);
Senser_getsv(1);
Senser_getsv(2);
/* ------------P------------ */
/* 計(jì)算位置 */
if (senVals[1]>ONLINE_MINVAL)
{
//線在中間傳感器下
if (carSpeed<SPEED_MAX)
{
//加速
carSpeed++;
}
if (senVals[0]>ONLINE_MINVAL)
{
//中間偏左
nP=POSVAL_MAX/2-senVals[1];
}
else
{
//中間偏右
nP=senVals[1]-POSVAL_MAX/2;
}
}
else if (senVals[0]>ONLINE_MINVAL)
{
//線在左邊傳感器偏左
nP=POSVAL_MAX-senVals[0];
}
else if (senVals[2]>ONLINE_MINVAL)
{
//線在右邊傳感器偏右
nP=senVals[2]-POSVAL_MAX;
}
else
{
//線離開(kāi)傳感器檢測(cè)范圍
if (carSpeed>SPEED_MIN)
{
//減速
carSpeed--;
}
if (nP<0)
{
nP=-POSVAL_MAX;
}
else
{
nP=POSVAL_MAX;
}
}
//nP/=4;
/* ------------I------------ */
if(nIC)
{
nIC--;
}
else
{
nIC=I_INTERVAL;
if(nP>ONLINE_MINVAL||nP<-ONLINE_MINVAL)
{
nI+=nP/20;//nI=9*nI/10;
}
else
{
nI=0;
}
}
/* ------------D------------ */
if(nDC)
{
nDC--;
}
else
{
nDC=D_INTERVAL;
nD=nP-nLastP;
nLastP=nP;
}
/* PID */
PID=nP*kP + nI/kdI + nD*kD;
PID/=kdPID;
L298N_setSpeed(carSpeed,PID);
/*
printDebug("nP=",nP*kP);
printDebug("nI=",nI/kdI);
printDebug("nD=",nD*kD);
printDebug("PID=",PID);
printChar('\n',USART2);
printDebug("LS=",TIM4->CCR3);
printDebug("RS=",TIM4->CCR4);
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
巡線.rar
(116.53 KB, 下載次數(shù): 367)
2018-2-5 15:55 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
1980613020
時(shí)間:
2018-7-13 16:18
樓上講得很有道理 樓主辛苦
作者:
1980613020
時(shí)間:
2018-7-13 16:20
尋跡小車(chē)的代碼希望能幫到我
作者:
1980613020
時(shí)間:
2018-7-13 16:40
智能小車(chē)尋跡代碼 希望有用
作者:
707141192
時(shí)間:
2018-7-13 16:51
資源很給力
作者:
hsj837588892
時(shí)間:
2018-8-20 16:56
智能小車(chē)尋跡代碼 希望有用
作者:
wuliMCU
時(shí)間:
2018-12-6 18:56
尋跡小車(chē)的代碼希望能幫到我
作者:
524354281
時(shí)間:
2018-12-21 09:27
樓主資料給力啊 謝謝
作者:
lxxdld
時(shí)間:
2019-4-5 11:37
支持一下。
作者:
灼灼其華1
時(shí)間:
2019-4-11 00:05
很厲害一直在找這個(gè)
作者:
lilianhe2008
時(shí)間:
2019-5-1 15:59
這是灰度傳感器嗎?
作者:
shareline_51hei
時(shí)間:
2019-6-24 17:30
樓主辛苦,很詳細(xì),很有幫助
作者:
AK嘿
時(shí)間:
2019-6-25 09:55
這是那個(gè)軟件的
作者:
1844952977
時(shí)間:
2019-10-28 14:25
樓主的灰度放到哪些位置了
作者:
Tsam
時(shí)間:
2020-10-6 15:28
這個(gè)是用什么IDE開(kāi)發(fā)的
作者:
wawq2003
時(shí)間:
2020-10-15 23:30
學(xué)習(xí),剛好要用到電機(jī)調(diào)速方面的資料
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日韩欧美在线免费观看
|
激情五月综合
|
精品久久不卡
|
久草视频在线看
|
欧美午夜一区二区三区免费大片
|
日韩欧美在线观看视频网站
|
韩日一区
|
91麻豆精品国产91久久久久久久久
|
亚洲欧美日韩中文字幕一区二区三区
|
波多野结衣在线观看一区二区三区
|
久久成人一区二区三区
|
亚洲精品二区
|
久久久91
|
精品久久影院
|
免费视频99
|
久久久久国产
|
中文字幕人成乱码在线观看
|
国产一区二区免费
|
a欧美
|
91免费观看
|
国产精品自拍视频
|
欲色av
|
成人精品一区二区三区中文字幕
|
亚洲视频免费在线观看
|
日本一区二区三区四区
|
伊人二区
|
337p日本欧洲亚洲大胆鲁鲁
|
亚洲一二三区在线观看
|
成人国内精品久久久久一区
|
日日躁狠狠躁aaaaxxxx
|
作爱视频免费看
|
日韩中文字幕2019
|
精品一区二区三区在线视频
|
精品国产欧美一区二区三区成人
|
在线观看日韩精品视频
|
中文字幕一区二区三区四区五区
|
日本久久精
|
欧美一区二区免费在线
|
免费一级欧美在线观看视频
|
欧美日韩国产在线
|
国产精品久久久久久久久久久新郎
|