久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
stm32F103單片機溫控PID算法源碼
[打印本頁]
作者:
liu1115380465
時間:
2023-10-31 19:05
標題:
stm32F103單片機溫控PID算法源碼
電絡鐵的溫度控制源碼
電路原理圖如下:
51hei.png
(123.95 KB, 下載次數: 39)
下載附件
2023-10-31 23:26 上傳
單片機源程序如下:
/*
==============T20焊臺控制器===============
作者:Bibibili 蔡子CaiZi
微處理器:STM32F103C8T6
外部時鐘:8MHz
===================引腳===================
OLED顯示屏(7腳SPI):
OLED_D0 -> PB13
OLED_D1 -> PB15
OLED_RES -> PB15
OLED_DC -> PB11
OLED_CS -> PB12
旋轉編碼器:
BM_CLK -> PB0
BM_DT -> PB3
BM_SW -> PB1
蜂鳴器:
BEEPER -> PB9
控制相關:
NTC -> PA6
T12_ADC -> PA4
HEAT -> PA0
SLEEP -> PA8
Vm -> PA2
//此版本的代碼實現功能:
//-T12烙鐵頭的溫度測量
//-加熱器的分段PID控制
//-通過旋轉編碼器進行溫度控制
//-短按旋轉編碼器開關可進入休眠模式
//-長按旋轉編碼器開關的設置菜單
//-手柄運動檢測(通過檢查振動開關)
//-輸入電壓檢測
//-時間驅動的睡眠/關機模式(通過計算未使用烙的時長)
//-OLED上的信息顯示
//-蜂鳴器
//-將用戶設置存儲到FLASH
*/
#include "stm32f10x.h"
#include "main.h"
void menuHandler(void);
extern unsigned char logo[];
char tempStr[10];//電池電壓字符串
float volatile VinVolt;//輸入電壓
u16 volatile NTC_temp,last_NTC_temp;//手柄溫度
u16 volatile T12_temp;//烙鐵頭溫度
u16 volatile tempArray[TEMPARRLEN];//溫度數組,均值濾波
u16 NTC_tempArray[NTC_TEMPARRLEN];//手柄溫度數組,均值濾波
u16 count;
u8 err,err_count;
u8 n;
int main()
{
u8 i;
u16 sum;
KEY_Init();//初始化按鍵GPIO
delay_init();//初始化延時函數
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2,2位搶占優先級和2位子優先級
usart_init(115200);//初始化串口1,波特率為115200
TIM3_Init(19999,71);//1MHz,每20ms檢測按鍵一次;
BEEPER_Init(); //BEEPER初始化
Adc_Init(); //ADC初始化
HEAT_Init();//加熱頭控制端初始化
OLED_Init(); //初始化OLED
set_Init();//讀取用戶設置數據
PID_Setup();//PID初始化
TIM4_Counter_Init(99,719);//定時1ms中斷一次
OLED_Clear();
OLED_DrawPointBMP(0,0,logo,128,64,1);//顯示logo
OLED_Refresh_Gram();//刷新顯存
delay_ms(1000);
beeperOnce();
//初始化溫度
NTC_temp = get_NTC_temp();//讀取手柄溫度
T12_temp = NTC_temp;
for(n=0; n<TEMPARRLEN; n++)
{
tempArray[n]=T12_temp;
}
OLED_Fill(0,0,127,63,0);
while (1){
if(count%100==0)//更新一次
{
NTC_temp = get_NTC_temp();//獲取一次手柄溫度值
get_Vin();//獲取一次輸入電壓值
if(NTC_temp>=50)
{
NTC_temp =last_NTC_temp;
}
else
{
last_NTC_temp = NTC_temp;
}
sum=0;
for(i=0;i<NTC_TEMPARRLEN-1;i++)
{
NTC_tempArray[i] = NTC_tempArray[i+1];//元素前移
sum += NTC_tempArray[i+1];
}
NTC_tempArray[NTC_TEMPARRLEN-1] = NTC_temp;
sum += NTC_tempArray[NTC_TEMPARRLEN-1];
NTC_temp = (u16)sum/NTC_TEMPARRLEN;//均值濾波
//手柄連接檢測
if(NTC_temp>=5&&NTC_temp<=50)
{
err_count=0;
err=0;
}
if((NTC_temp<5||NTC_temp>50)&&err==0)
{
err_count++;
}
if(err_count>=8)
{
err=1;//手柄未連接
}
}
if(nowMenuIndex==home && count%800==0)//更新一次home界面
{
homeWindow();//顯示主界面
OLED_Refresh_Gram();//刷新顯存
}
if(menuEvent[0])
{
menuHandler();
beeperOnce();
if(menuEvent[1]==KEY_enter && nowMenuIndex == home)
{
if(sleepFlag) {sleepFlag=0; sleepCount=0;shutCount = 0;}//短按觸發關閉休眠
else sleepFlag = 1;
}
if(shutFlag) {shutFlag=0;shutCount = 0;}//任意按鍵觸發開機
lastMenuIndex = nowMenuIndex;
menuEvent[0] = 0;
OLED_display();
STMFLASH_Write(FLASH_SAVE_ADDR,(u16 *)&setData,setDataSize);//寫入FLASH
}
if(setData.sleepTime>0 && sleepCount>setData.sleepTime*600) {sleepFlag=1;}
if(setData.shutTime>0 && shutCount>setData.shutTime*600) {shutFlag=1;}
count++;
delay_us(100);
}
}
//菜單處理函數
void menuHandler(void)
{
if(menuEvent[1]==BM_up)
{
switch(nowMenuIndex){
case home:
setData.setTemp+=5;
break;
case xmsjSet:
setData.sleepTime++;
break;
case gjsjSet:
setData.shutTime++;
break;
case gzmsSet:
setData.workMode=!setData.workMode;
break;
case fmqSet:
setData.beeperFlag = !setData.beeperFlag;
break;
case yyszSet:
setData.langFlag = !setData.langFlag;
break;
}
}
else if(menuEvent[1]==BM_down)
{
switch(nowMenuIndex){
case home:
setData.setTemp-=5;
break;
case xmsjSet:
setData.sleepTime--;
break;
case gjsjSet:
setData.shutTime--;
break;
case gzmsSet:
setData.workMode=!setData.workMode;
break;
case fmqSet:
setData.beeperFlag = !setData.beeperFlag;
break;
case yyszSet:
setData.langFlag = !setData.langFlag;
break;
}
}
else {}
if(setData.setTemp>TEMP_MAX) setData.setTemp=TEMP_MAX;
if(setData.setTemp<TEMP_MIN) setData.setTemp=TEMP_MIN;
if(setData.sleepTime>60) setData.sleepTime=60;
if(setData.sleepTime<0) setData.sleepTime=0;
if(setData.shutTime>60) setData.shutTime=60;
if(setData.shutTime<0) setData.shutTime=0;
}
復制代碼
單片機代碼下載:
STM32_T12_Controller-main.7z
(648.45 KB, 下載次數: 80)
2023-10-31 23:26 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
dnxbf
時間:
2023-11-1 10:48
感謝樓主無私奉獻。
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
黄色一级视频免费看
|
久久男人
|
亚洲 欧美 激情 另类 校园
|
黄色免费观看视频
|
精品视频免费
|
日韩在线视频网站
|
国产一区二区不卡
|
免费黄色小说网站
|
欧美日韩久久
|
香蕉视频色
|
天堂av影院
|
欧美精品综合
|
亚洲一级黄色片
|
亚洲国产成人91精品
|
亚洲欧洲av
|
国产欧美日韩在线视频
|
国产成人精品一区二区三区在线
|
在线视频日韩
|
夜夜肉她怀孕h周君彦
|
中文久久久
|
欧美国产在线观看
|
免费看黄色一级片
|
97精品视频
|
国产麻豆91
|
少妇性bbb搡bbb爽爽爽欧美
|
黄色一级片黄色一级片
|
超碰在线网站
|
久久亚洲天堂
|
欧美日韩激情
|
中文在线观看免费网站
|
亚洲欧美精品在线
|
欧美一级淫片免费视频黄
|
欧美黄色片视频
|
欧美日韩综合在线
|
精品国产91
|
九九精品在线观看
|
国产成人一区二区
|
黄色天天影视
|
色多多视频在线观看
|
日本亚洲欧美
|
中文字幕影院
|