สารบัญ:
- ขั้นตอนที่ 1: แนะนำฟังก์ชั่นหน้าจอแสดงผลของเครื่องชงกาแฟ
- ขั้นตอนที่ 2: สร้างรูปภาพ UI สำหรับ STONE Display
- ขั้นตอนที่ 3: STM32F103RCT6
- ขั้นตอนที่ 4: UART Serial
- ขั้นตอนที่ 5: ตัวจับเวลา
- ขั้นตอนที่ 6: สุนัขเฝ้าบ้าน
วีดีโอ: STONE Display +STM32 +เครื่องชงกาแฟ: 6 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:03
ฉันเป็นวิศวกรซอฟต์แวร์ของ MCU เพิ่งได้รับโครงการเป็นเครื่องชงกาแฟ ความต้องการในครัวเรือนด้วยการทำงานของหน้าจอสัมผัส ฟังก์ชันดี อยู่เหนือการเลือกหน้าจออาจไม่ดีมาก โชคดีที่โครงการนี้ฉันตัดสินใจได้ ใช้ MCU ด้วยตัวเองก็ได้ ใช้กำหนดหน้าจอก็ได้ เลยเลือก STM32 ของ MCU ที่ใช้งานง่ายแบบนี้ หน้าจอแสดงผล ผมเลือกจอสัมผัสของ STONE หน้าจอเรียบง่ายและใช้งานง่าย STM32 MCU ผ่านการสื่อสาร UART เท่านั้นก็ใช้ได้
หน้าจอแสดงผล LCD แบบอนุกรมของ STONE ซึ่งสามารถสื่อสารผ่านพอร์ตอนุกรมของ MCU ในขณะเดียวกัน การออกแบบลอจิกของอินเทอร์เฟซ UI ของหน้าจอแสดงผลนี้สามารถออกแบบได้โดยตรงโดยใช้กล่องเครื่องมือ STONE ที่จัดทำโดยเว็บไซต์ทางการของ STONE ซึ่งสะดวกมาก ฉันจะใช้มันสำหรับโครงการเครื่องชงกาแฟนี้ ในเวลาเดียวกัน ฉันจะบันทึกการพัฒนาพื้นฐาน เนื่องจากนี่เป็นโครงการของบริษัทของฉัน ฉันจะบันทึกการสาธิตอย่างง่ายเท่านั้นและจะไม่เขียนโค้ดทั้งหมด บทแนะนำพื้นฐานเกี่ยวกับหน้าจอแสดงผลแบบสโตนสามารถไปที่เว็บไซต์: https://www.stoneitech.com/ เว็บไซต์นี้มีข้อมูลหลากหลายเกี่ยวกับรุ่น การใช้งาน และเอกสารการออกแบบ รวมถึงวิดีโอสอนการใช้งาน ฉันจะไม่ลงรายละเอียดมากเกินไปที่นี่
ขั้นตอนที่ 1: แนะนำฟังก์ชั่นหน้าจอแสดงผลของเครื่องชงกาแฟ
โครงการนี้มีฟังก์ชันดังต่อไปนี้: l
- แสดงเวลาและวันที่ปัจจุบัน
- มีสี่ปุ่มบนจอแสดงผลสำหรับอเมริกาโน ลาเต้ คาปูชิโน่ และเอสเพรสโซ
- แสดงจำนวนเมล็ดกาแฟ นม และน้ำตาลกาแฟที่เหลืออยู่ในปัจจุบัน
- กล่องแสดงข้อความแสดงสถานะปัจจุบัน
ด้วยแนวคิดเหล่านี้ คุณสามารถออกแบบอินเทอร์เฟซ UI ได้ STONE ของหน้าจอสัมผัสในการออกแบบ UI นั้นค่อนข้างง่าย ผู้ใช้ผ่านซอฟต์แวร์ Photoshop ออกแบบอินเทอร์เฟซ UI ที่ดีและเอฟเฟกต์ปุ่ม ผ่านกล่องเครื่องมือ STONE เพื่อออกแบบรูปภาพที่ดีลงในหน้าจอ และเพิ่มปุ่มของคุณเองด้วยตรรกะ STONE TOOL Box และ ข้อมูลแบบอนุกรม ค่าตอบแทนก็โอเค ง่ายมากสำหรับคุณที่จะพัฒนา
ขั้นตอนที่ 2: สร้างรูปภาพ UI สำหรับ STONE Display
ตามข้อกำหนดด้านการทำงาน ฉันได้สร้างอินเทอร์เฟซการแสดงผล UI สองอินเทอร์เฟซต่อไปนี้ อันหนึ่งเป็นอินเทอร์เฟซหลัก และอีกอันคือเอฟเฟกต์ของปุ่ม
การใช้ STONE TOOL Box ปัจจุบัน STONE ได้จัดเตรียม TOOL เปิดเครื่องมือนี้เพื่อสร้างโครงการใหม่ จากนั้นนำเข้า UI ที่ออกแบบเพื่อแสดงรูปภาพ และเพิ่มปุ่มของคุณเอง กล่องแสดงข้อความ ฯลฯ เว็บไซต์อย่างเป็นทางการของ STONE มีบทช่วยสอนที่สมบูรณ์มากเกี่ยวกับวิธีใช้ซอฟต์แวร์นี้: https:/ /www.stoneitech.com/support/download/video
ผลของการเพิ่มปุ่มและการแสดงส่วนประกอบในกล่องเครื่องมือหินมีดังนี้:
STONE TOOL Box มีฟังก์ชันการแสดงการจำลอง ซึ่งคุณสามารถดูผลการทำงานของอินเทอร์เฟซ UI:
ณ จุดนี้ การแสดงผล UI ของฉันเสร็จสมบูรณ์ และทั้งหมดที่ฉันต้องทำคือเขียนโค้ด MCU ดาวน์โหลดไฟล์ที่สร้างโดย STONE TOOL Box ลงบนหน้าจอแสดงผลเพื่อดูผลลัพธ์จริง
ขั้นตอนที่ 3: STM32F103RCT6
STM32F103RCT6 MCU มีฟังก์ชันที่ทรงพลัง นี่คือพารามิเตอร์พื้นฐานของ MCU:
- ซีรี่ส์: STM32F10X l Kerne
- อาร์ม - COTEX32
- ความเร็ว: 72 MHZ
- อินเทอร์เฟซการสื่อสาร: CAN, I2C, IrDA, LIN, SPI, UART/USART, USB
- อุปกรณ์ต่อพ่วง: DMA, มอเตอร์ควบคุม PWM, PDR, POR, PVD, PWM, เซ็นเซอร์อุณหภูมิ, WDT
- ความจุของโปรแกรม: 256KB
- ประเภทหน่วยความจำโปรแกรม: FLASH
- ความจุ RAM: 48K
- แรงดันไฟ - แหล่งจ่ายไฟ (Vcc/Vdd): 2 V ~ 3.6 V
- ออสซิลเลเตอร์: ภายใน
- อุณหภูมิในการทำงาน: -40 °C ~ 85 °C
- บรรจุภัณฑ์/ที่อยู่อาศัย: 64-life
ในโครงการนี้ ฉันจะใช้ UART, GPIO, Watch Dog และ Timer ของ STM32F103RCT6 การพัฒนาอุปกรณ์ต่อพ่วงเหล่านี้มีการบันทึกไว้ด้านล่าง STM32 ใช้การพัฒนาซอฟต์แวร์ Keil MDK ซึ่งไม่ใช่คนแปลกหน้าสำหรับคุณ ดังนั้นฉันจะไม่แนะนำวิธีการติดตั้งของซอฟต์แวร์นี้ STM32 สามารถจำลองออนไลน์ได้โดย j-link หรือ st-link และเครื่องมือจำลองอื่นๆ ภาพต่อไปนี้คือแผงวงจร STM32 ที่ฉันใช้:
ขั้นตอนที่ 4: UART Serial
STM32F103RCT6 มีพอร์ตอนุกรมหลายพอร์ต ในโครงการนี้ ฉันใช้ช่องพอร์ตอนุกรม PA9/PA10 และตั้งค่าอัตรารับส่งข้อมูลของพอร์ตอนุกรมที่ 115200
GPIO
ในส่วนติดต่อผู้ใช้ของโปรเจ็กต์นี้มีปุ่มทั้งหมดสี่ปุ่ม ซึ่งจริงๆ แล้วเป็นปุ่มสำหรับทำกาแฟสี่ชนิด ในเครื่องชงกาแฟ การควบคุมจำนวนเมล็ดกาแฟ การบริโภคนม และการไหลของน้ำของกาแฟที่แตกต่างกันนั้นเกิดขึ้นจริงโดยการควบคุมเซ็นเซอร์และรีเลย์ ในขณะที่ฉันเพียงแค่ควบคุมพิน GPIO ก่อน
ขั้นตอนที่ 5: ตัวจับเวลา
เมื่อเริ่มต้นตัวจับเวลา ให้ระบุค่าสัมประสิทธิ์การแบ่งความถี่ PSC นี่คือนาฬิการะบบของเรา (72MHz) สำหรับการแบ่งความถี่
จากนั้นระบุค่าโหลด arr ซึ่งหมายความว่าเมื่อตัวจับเวลาของเรามาถึง arr นี้ ตัวจับเวลาจะโหลดค่าอื่นๆ ใหม่
เช่น เมื่อเราตั้งค่าตัวจับเวลานับขึ้น ค่าของตัวจับเวลาจะเท่ากับ arr และจะถูกล้างด้วย 0 และคำนวณใหม่
นับตัวจับเวลาโหลดใหม่และครั้งหนึ่งเป็นอัปเดต
คำนวณสูตรเวลาอัปเดต Tout = ((arr+1)*(PSC +1))/Tclk
ที่มาของสูตร: Talk เป็นแหล่งสัญญาณนาฬิกาของตัวจับเวลา นี่คือ 72Mhz
เราแบ่งความถี่สัญญาณนาฬิกาที่จัดสรร ระบุค่าหารความถี่เป็น PSC จากนั้นแบ่ง Talk ของเราเป็น PSC +1 ความถี่สุดท้ายของตัวจับเวลาของเราคือ Tclk/(PSC +1) MHz
ความถี่ที่เราหมายถึงคือ เรามี 1s ของ Talk เหนือ PSC +1 M Numbers (1M=10 ^ 6) และเวลาสำหรับแต่ละหมายเลขคือ PSC +1 /Talk และเข้าใจได้ง่ายว่าค่าผกผัน ของความถี่คือคาบ และคาบของตัวเลขแต่ละตัวในที่นี้คือ PSC +1 /Talk seconds จากนั้นเราไปจาก 0 เป็น arr คือ (arr+1)*(PSC +1)/Tclk
ตัวอย่างเช่น ตั้งค่า arr=7199 และ PSC =9999
เราแบ่ง 72MHz เป็น 9999+1 เท่ากับ 7200Hz
นี่คือการนับ 9,000 ครั้งต่อวินาที และการนับแต่ละครั้งคือ 1/7, 200 วินาที
เรากำลังบันทึก 9, 000 หมายเลขที่นี่เพื่อไปที่การอัปเดตตัวจับเวลา (7199+1)*(1/7200)=1 วินาที ดังนั้น 1 วินาทีจึงเข้าสู่การอัปเดต
เป็นโมฆะ TIM3_Int_Init (u16 arr, u16 psc){
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, เปิดใช้งาน);
//นาฬิกา TIM_TimeBaseStructure. TIM_Period = arr;
TIM_TimeBaseStructure. TIM_Prescaler =psc; TIM_TimeBaseStructure. TIM_ClockDivision = 0;
//TDTS = Tck_tim TIM_TimeBaseStructure. TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
โปรดติดต่อเราหากต้องการขั้นตอนที่สมบูรณ์:
www.stoneitech.com/contact
ฉันจะตอบกลับคุณภายใน 12 ชั่วโมง
ขั้นตอนที่ 6: สุนัขเฝ้าบ้าน
เพื่อป้องกันไม่ให้ระบบหยุดทำงานในขณะที่โปรแกรมกำลังทำงาน ฉันได้เพิ่มสุนัขเฝ้าบ้าน อันที่จริง โครงการทั้งหมดที่ใช้ MCU มักใช้สุนัขเฝ้าบ้าน
STM32 มี watchdogs ในตัวสองตัว ให้การรักษาความปลอดภัย ความแม่นยำของเวลา และความยืดหยุ่นที่มากขึ้น สามารถใช้อุปกรณ์เฝ้าบ้านสองเครื่อง (สุนัขเฝ้าบ้านอิสระและหน่วยเฝ้าระวังหน้าต่าง) เพื่อตรวจจับและแก้ไขข้อผิดพลาดที่เกิดจากข้อผิดพลาดของซอฟต์แวร์ เมื่อตัวนับถึงค่าการหมดเวลาที่กำหนด การขัดจังหวะ (หน้าต่างเฝ้าระวังเท่านั้น) หรือการรีเซ็ตระบบจะถูกทริกเกอร์ สุนัขเฝ้าบ้านอิสระ (IWDG):
ขับเคลื่อนด้วยนาฬิกาความเร็วต่ำโดยเฉพาะ (LSI) ซึ่งทำงานแม้ว่านาฬิกาหลักจะล้มเหลว
เหมาะสำหรับใช้ในสถานการณ์ที่สุนัขเฝ้าบ้านต้องทำงานโดยอิสระอย่างสมบูรณ์นอกโปรแกรมหลักและต้องการความแม่นยำในเวลาต่ำ เฝ้าหน้าต่าง (WWDG):
ขับเคลื่อนด้วยนาฬิกาจากนาฬิกา APB1 หลังจากแบ่งความถี่ ตรวจจับการทำงานของแอปพลิเคชันที่ล่าช้าหรือก่อนกำหนดอย่างผิดปกติผ่านกรอบเวลาที่กำหนดค่าได้ เหมาะสำหรับโปรแกรมที่ต้องการให้สุนัขเฝ้าบ้านทำงานตามเวลาที่แม่นยำของ Windows
int หลัก (เป็นโมฆะ) {
delay_init();
// หน่วงเวลาเริ่มต้น NVIC_PriorityGroupConfig (NVIC_PriorityGroup_2);
//NVIC INIT uart_init(115200);
//UART INIT PAD_INIT();
//Light Init IWDG_Init (4, 625);
ในขณะที่(1) {
ถ้า(USART_RX_END)
{ สวิตช์ (USART_RX_BUF[5])
{
กรณีเอสเพรสโซ่:
CoffeeSelect(เอสเพรสโซ่, USART_RX_BUF[8]);
หยุดพัก;
กรณีอเมริกาโน่:
CoffeeSelect(อเมริกาโน, USART_RX_BUF[8]);
ตรรกะหลักในฟังก์ชันหลักมีดังนี้:
u8 timer_cnt=0;
เป็นโมฆะ TIM3_IRQHandler (เป็นโมฆะ) //TIM3
{
ถ้า (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
timer_cnt++;
ถ้า(timer_cnt>=200)
{
milk_send[6]=นม();
สุดท้าย เพิ่มรหัสในการขัดจังหวะของตัวจับเวลา: ในการขัดจังหวะของตัวจับเวลา เป้าหมายของฉันคือการตรวจสอบว่ากาแฟและนมเหลืออยู่เท่าใด จากนั้นส่งค่าที่ตรวจพบไปยังหน้าจอแสดงผลผ่านพอร์ตอนุกรม การวัดปริมาณนมและเมล็ดกาแฟที่เหลืออยู่โดยเซ็นเซอร์มักจะทำ วิธีการง่ายๆ ได้แก่ เซ็นเซอร์ความดัน ซึ่งวัดน้ำหนักปัจจุบันของนมและเมล็ดกาแฟเพื่อพิจารณาว่าเหลืออยู่เท่าใด
เขียนในตอนสุดท้าย
บทความนี้จะบันทึกเฉพาะกระบวนการพัฒนาอย่างง่ายของโครงการของฉันเท่านั้น เมื่อพิจารณาถึงการรักษาความลับของโครงการของบริษัท อินเทอร์เฟซการแสดงผล UI ที่ฉันใช้สร้างขึ้นด้วยตัวเอง ไม่ใช่อินเทอร์เฟซการแสดงผล UI จริงของโครงการนี้ ส่วนรหัสของ STM32 เพิ่มเฉพาะไดรเวอร์อุปกรณ์ต่อพ่วงของ MCU และรหัสตรรกะที่เกี่ยวข้อง นอกจากนี้ การพิจารณาการรักษาความลับของโครงการของบริษัท ไม่ได้ให้เฉพาะส่วนเทคโนโลยีที่สำคัญ โปรดเข้าใจ อย่างไรก็ตาม ตามรหัสที่ฉันให้ไว้ ให้ความร่วมมือกับหน้าจอแสดงผลของ STONE เพื่อนของฉันที่เป็นวิศวกรซอฟต์แวร์ต้องใช้เวลาเพียงไม่กี่วันในการเพิ่มส่วนทางเทคนิคที่สำคัญให้กับกรอบงานโค้ดของฉันเพื่อให้โครงการเสร็จสมบูรณ์
เรียนรู้เพิ่มเติมเกี่ยวกับโครงการคลิกที่นี่