|
電絡(luò)鐵的溫度控制源碼
電路原理圖如下:
51hei.png (123.95 KB, 下載次數(shù): 39)
下載附件
2023-10-31 23:26 上傳
單片機(jī)源程序如下:
- /*
- ==============T20焊臺(tái)控制器===============
- 作者:Bibibili 蔡子CaiZi
- 微處理器:STM32F103C8T6
- 外部時(shí)鐘:8MHz
- ===================引腳===================
- OLED顯示屏(7腳SPI):
- OLED_D0 -> PB13
- OLED_D1 -> PB15
- OLED_RES -> PB15
- OLED_DC -> PB11
- OLED_CS -> PB12
- 旋轉(zhuǎn)編碼器:
- BM_CLK -> PB0
- BM_DT -> PB3
- BM_SW -> PB1
- 蜂鳴器:
- BEEPER -> PB9
- 控制相關(guān):
- NTC -> PA6
- T12_ADC -> PA4
- HEAT -> PA0
- SLEEP -> PA8
- Vm -> PA2
- //此版本的代碼實(shí)現(xiàn)功能:
- //-T12烙鐵頭的溫度測(cè)量
- //-加熱器的分段PID控制
- //-通過旋轉(zhuǎn)編碼器進(jìn)行溫度控制
- //-短按旋轉(zhuǎn)編碼器開關(guān)可進(jìn)入休眠模式
- //-長按旋轉(zhuǎn)編碼器開關(guān)的設(shè)置菜單
- //-手柄運(yùn)動(dòng)檢測(cè)(通過檢查振動(dòng)開關(guān))
- //-輸入電壓檢測(cè)
- //-時(shí)間驅(qū)動(dòng)的睡眠/關(guān)機(jī)模式(通過計(jì)算未使用烙的時(shí)長)
- //-OLED上的信息顯示
- //-蜂鳴器
- //-將用戶設(shè)置存儲(chǔ)到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];//溫度數(shù)組,均值濾波
- u16 NTC_tempArray[NTC_TEMPARRLEN];//手柄溫度數(shù)組,均值濾波
- u16 count;
- u8 err,err_count;
- u8 n;
- int main()
- {
- u8 i;
- u16 sum;
- KEY_Init();//初始化按鍵GPIO
- delay_init();//初始化延時(shí)函數(shù)
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置NVIC中斷分組2,2位搶占優(yōu)先級(jí)和2位子優(yōu)先級(jí)
- usart_init(115200);//初始化串口1,波特率為115200
- TIM3_Init(19999,71);//1MHz,每20ms檢測(cè)按鍵一次;
- BEEPER_Init(); //BEEPER初始化
- Adc_Init(); //ADC初始化
- HEAT_Init();//加熱頭控制端初始化
- OLED_Init(); //初始化OLED
- set_Init();//讀取用戶設(shè)置數(shù)據(jù)
-
- PID_Setup();//PID初始化
- TIM4_Counter_Init(99,719);//定時(shí)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;//均值濾波
- //手柄連接檢測(cè)
- 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;}//短按觸發(fā)關(guān)閉休眠
- else sleepFlag = 1;
- }
- if(shutFlag) {shutFlag=0;shutCount = 0;}//任意按鍵觸發(fā)開機(jī)
- 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);
- }
- }
- //菜單處理函數(shù)
- 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;
- }
復(fù)制代碼
單片機(jī)代碼下載:
STM32_T12_Controller-main.7z
(648.45 KB, 下載次數(shù): 80)
2023-10-31 23:26 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|