Სარჩევი:
- ნაბიჯი 1: ყავის აპარატის ჩვენების ეკრანის ფუნქცია შესავალი
- ნაბიჯი 2: შექმენით UI სურათები STONE ჩვენებისთვის
- ნაბიჯი 3: STM32F103RCT6
- ნაბიჯი 4: UART სერიალი
- ნაბიჯი 5: ტაიმერი
- ნაბიჯი 6: Watch Dog
ვიდეო: STONE ჩვენება +STM32 +ყავის მადუღარა: 6 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:15
მე ვარ MCU პროგრამული უზრუნველყოფის ინჟინერი, ახლახანს მივიღე პროექტი, რომ იყოს ყავის აპარატი, საყოფაცხოვრებო მოთხოვნები სენსორული ეკრანით, ფუნქცია კარგია, ეკრანის ზემოთ არ შეიძლება იყოს ძალიან კარგი, საბედნიეროდ, ამ პროექტს მე შემიძლია გადავწყვიტო რა MCU საკუთარი თავის გამოსაყენებლად, ასევე შეიძლება გამოყენებულ იქნას ეკრანის გადასაწყვეტად, ამიტომ ავირჩიე STM32 ამ სახის მარტივი და მარტივი MCU გამოსაყენებელი, ჩვენების ეკრანი ავირჩიე STONE- ის სენსორული ეკრანი, ეკრანი მარტივი და მარტივი გამოსაყენებელია, ჩემი STM32 MCU მხოლოდ UART– ის საშუალებით არის კარგი.
STONE სერიული LCD ეკრანი, რომელსაც შეუძლია კომუნიკაცია MCU სერიული პორტის საშუალებით. ამავდროულად, ამ ეკრანის ინტერფეისის ინტერფეისის ლოგიკური დიზაინი შეიძლება შემუშავდეს უშუალოდ STONE– ის ოფიციალური ვებ – გვერდის მიერ მოწოდებული STONE TOOL Box– ის გამოყენებით, რაც ძალიან მოსახერხებელია. მე ვაპირებ გამოვიყენო ეს ყავის აპარატის პროექტისთვის. ამავე დროს, მე უბრალოდ ჩავწერ ძირითად განვითარებას. ვინაიდან ეს არის ჩემი კომპანიის პროექტი, მე დავწერ მხოლოდ უბრალო დემო და არ დავწერ სრულ კოდს. ქვის ჩვენების ეკრანის შესახებ ზოგიერთი ძირითადი გაკვეთილი შეგიძლიათ იხილოთ ვებგვერდზე: https://www.stoneitech.com/ ვებსაიტს აქვს მრავალფეროვანი ინფორმაცია მოდელის, გამოყენების და დიზაინის დოკუმენტაციის შესახებ, ასევე ვიდეო გაკვეთილები. მე არ შევალ აქ ძალიან დეტალურად.
ნაბიჯი 1: ყავის აპარატის ჩვენების ეკრანის ფუნქცია შესავალი
ამ პროექტს აქვს შემდეგი ფუნქციები: ლ
- აჩვენებს მიმდინარე დროსა და თარიღს
- ეკრანზე ოთხი ღილაკია ამერიკანო, ლატე, კაპუჩინო და ესპრესო.
- აჩვენებს დარჩენილი ყავის მარცვლების, რძის და ყავის შაქრის ამჟამინდელ რაოდენობას
- ტექსტის ჩვენების ველი აჩვენებს მიმდინარე მდგომარეობას
ამ კონცეფციების გათვალისწინებით, თქვენ შეგიძლიათ შექმნათ UI ინტერფეისი. სენსორული ეკრანები UI დიზაინში შედარებით მარტივია, მომხმარებელი PhotoShop პროგრამული უზრუნველყოფის საშუალებით შეიმუშავებს კარგ UI ინტერფეისს და ღილაკის ეფექტს, STONE TOOL Box– ის საშუალებით, რათა შექმნას კარგი სურათები ეკრანზე და დაამატოთ საკუთარი ღილაკები STONE TOOL Box ლოგიკით და სერიული მონაცემების დაბრუნების მნიშვნელობა ნორმალურია, თქვენთვის ძალიან ადვილია განვითარება.
ნაბიჯი 2: შექმენით UI სურათები STONE ჩვენებისთვის
ფუნქციონალური მოთხოვნების შესაბამისად, მე გავაკეთე შემდეგი ორი ინტერფეისი, ერთი მთავარი ინტერფეისი და მეორე ღილაკის ეფექტი.
STONE TOOL Box– ის გამოყენება ამჟამად STONE უზრუნველყოფს TOOL– ს. გახსენით ეს ინსტრუმენტი ახალი პროექტის შესაქმნელად, შემდეგ შემოიტანეთ დაპროექტებული ინტერფეისი სურათების საჩვენებლად, დაამატეთ თქვენი საკუთარი ღილაკები, ტექსტის ჩვენების ყუთები და ა.შ. /www.stoneitech.com/support/download/video
ღილაკების დამატება და კომპონენტების ჩვენება STONE TOOL Box– ში არის შემდეგი:
STONE TOOL Box– ს აქვს სიმულაციური ჩვენების ფუნქცია, რომლის საშუალებითაც შეგიძლიათ ნახოთ ინტერფეისის ინტერფეისის მუშაობის ეფექტი:
ამ ეტაპზე, ჩემი ინტერფეისის ეკრანი დასრულებულია და ყველაფერი რაც უნდა გავაკეთო არის MCU კოდის დაწერა. ჩამოტვირთეთ STONE TOOL Box– ის მიერ წარმოქმნილი ფაილები ჩვენების ეკრანზე, რომ ნახოთ რეალური შედეგები.
ნაბიჯი 3: STM32F103RCT6
STM32F103RCT6 MCU– ს აქვს ძლიერი ფუნქციები. აქ მოცემულია MCU– ს ძირითადი პარამეტრები:
- სერია: STM32F10X l Kerne
- ARM - COTEX32
- სიჩქარე: 72 MHZ
- საკომუნიკაციო ინტერფეისი: CAN, I2C, IrDA, LIN, SPI, UART/USART, USB
- პერიფერიული აღჭურვილობა: DMA, ძრავის კონტროლი PWM, PDR, POR, PVD, PWM, ტემპერატურის სენსორი, WDT
- პროგრამის შენახვის მოცულობა: 256 კბ
- პროგრამის მეხსიერების ტიპი: FLASH
- ოპერატიული მეხსიერება: 48K
- ძაბვა - კვების წყარო (Vcc/Vdd): 2 V ~ 3.6 V
- ოსცილატორი: შიდა
- სამუშაო ტემპერატურა: -40 ° C ~ 85 ° C
- პაკეტი/საცხოვრებელი: 64 სიცოცხლე
ამ პროექტში გამოვიყენებ UART, GPIO, Watch Dog და STM32F103RCT6 ტაიმერს. ამ პერიფერიული მოწყობილობების განვითარება დოკუმენტირებულია ქვემოთ. STM32 იყენებს Keil MDK პროგრამული უზრუნველყოფის შემუშავებას, რომელიც თქვენთვის უცხო არ არის, ამიტომ მე არ წარმოგიდგენთ ამ პროგრამული უზრუნველყოფის ინსტალაციის მეთოდს. STM32 შეიძლება იყოს იმიტირებული ონლაინ j-link ან st-link და სხვა სიმულაციური ინსტრუმენტებით. შემდეგი სურათი არის STM32 მიკროსქემის დაფა, რომელიც მე გამოვიყენე:
ნაბიჯი 4: UART სერიალი
STM32F103RCT6– ს აქვს რამდენიმე სერიული პორტი. ამ პროექტში მე გამოვიყენე სერიული პორტის არხი PA9/PA10, ხოლო სერიული პორტის ბადის სიჩქარე განისაზღვრა 115200 -ით.
GPIO
ამ პროექტის მომხმარებლის ინტერფეისში არის სულ ოთხი ღილაკი, რომლებიც სინამდვილეში ოთხი სახის ყავის დამზადებაა. ყავის აპარატში ყავის მარცვლების რაოდენობის, რძის მოხმარებისა და სხვადასხვა ყავის წყლის ნაკადის კონტროლი რეალურად ხვდება სენსორებისა და რელეების კონტროლით, მაშინ როდესაც მე ჯერ GPIO პინს ვაკონტროლებ.
ნაბიჯი 5: ტაიმერი
ტაიმერის ინიციალიზაციისას მიუთითეთ PSC სიხშირის გაყოფის კოეფიციენტი, აქ არის ჩვენი სისტემის საათი (72 MHz) სიხშირის გაყოფისთვის
შემდეგ მიუთითეთ გადატვირთვის მნიშვნელობის arr, რაც ნიშნავს რომ როდესაც ჩვენი ტაიმერი მიაღწევს ამ arr- ს, ტაიმერი გადატვირთავს სხვა მნიშვნელობებს.
მაგალითად, როდესაც ჩვენ ვაყენებთ ტაიმერს ათვლისთვის, ტაიმერის რიცხვის მნიშვნელობა არის arr- ის ტოლი და გასუფთავდება 0 -ით და გადაანგარიშდება
ტაიმერის რაოდენობა გადატვირთულია და ერთხელ არის განახლება
გამოთვალეთ განახლების დროის ფორმულა Tout = ((arr +1)*(PSC +1))/Tclk
ფორმულის წარმოშობა: საუბარი არის ტაიმერის საათის წყარო, აქ არის 72Mhz
ჩვენ ვყოფთ გამოყოფილი საათის სიხშირეს, ვადგენთ სიხშირის გაყოფის მნიშვნელობას PSC, შემდეგ გავყოფთ ჩვენს საუბარს PSC +1, ჩვენი ტაიმერის საბოლოო სიხშირეა Tclk/(PSC +1) MHz
სიხშირეში ჩვენ ვგულისხმობთ იმას, რომ ჩვენ გვაქვს 1s საუბარი PSC +1 M ნომრებზე (1M = 10 ^ 6), ხოლო თითოეული რიცხვის დრო არის PSC +1 /Talk და ადვილი გასაგებია რომ ინვერსიული სიხშირის არის პერიოდი და თითოეული რიცხვის პერიოდი აქ არის PSC +1 /საუბრის წამი და შემდეგ ჩვენ 0 -დან arr- ზე მივდივართ არის (arr +1)*(PSC +1) /Tclk
მაგალითად, მოდით დავაყენოთ arr = 7199 და PSC = 9999
72 მჰც გავყავით 9999+1 – ზე, უდრის 7200 ჰც
ეს არის 9,000 რაოდენობა წამში და თითოეული რაოდენობა არის 1/7, 200 წამი
ასე რომ, ჩვენ აქ ვწერთ 9000 ნომერს, რომ გადავიდეთ ტაიმერის განახლებაზე (7199+1)*(1/7200) = 1 წმ, ასე რომ 1s მიდის განახლებაზე.
ბათილია 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: Watch Dog
პროგრამის მუშაობისას სისტემის ჩამონგრევის თავიდან ასაცილებლად, დავამატე გუშაგი. ფაქტობრივად, ყველა პროექტი, რომელიც იყენებს MCU– ს, ჩვეულებრივ იყენებს გუშაგ ძაღლს.
STM32– ს აქვს ორი ჩაშენებული გუშაგი, რაც უზრუნველყოფს უფრო დიდ უსაფრთხოებას, დროის სიზუსტეს და მოქნილობას. ორი საგუშაგო მოწყობილობა (დამოუკიდებელი გუშაგი და ფანჯრის გუშაგი) შეიძლება გამოყენებულ იქნას პროგრამული შეცდომებით გამოწვეული ხარვეზების გამოსავლენად და მოსაგვარებლად. როდესაც მრიცხველი მიაღწევს დროის განსაზღვრულ მნიშვნელობას, ხდება შეფერხება (მხოლოდ ფანჯრის მცველი) ან სისტემის გადატვირთვა. დამოუკიდებელი მეთვალყურე (IWDG):
ამოძრავებს გამოყოფილი დაბალი სიჩქარის საათით (LSI), ის მუშაობს მაშინაც კი, თუ სამაგისტრო საათი ჩავარდება.
ის შესაფერისია იმ სიტუაციებში გამოსაყენებლად, როდესაც გუშაგს მოეთხოვება სრულიად დამოუკიდებლად იმუშაოს ძირითადი პროგრამის გარეთ და მოითხოვს დაბალი დროის სიზუსტეს. ფანჯრის მცველი (WWDG):
ამოძრავებს საათი APB1 საათიდან სიხშირის გაყოფის შემდეგ. აღმოაჩინეთ არანორმალურად დაგვიანებული ან ნაადრევი პროგრამის ოპერაცია კონფიგურირებადი დროის ფანჯრის საშუალებით. ვარგისია იმ პროგრამებისთვის, რომლებიც ითხოვენ გუშაგებს, რომ იმუშაონ Windows– ის ზუსტ დროში.
int მთავარი (ბათილია) {
delay_init ();
// გადაიდო 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])
{
ყუთი ესპრესო:
ყავის არჩევა (ესპრესო, USART_RX_BUF [8]);
შესვენება;
საქმე ამერიკანო:
CoffeeSelect (ამერიკანო, USART_RX_BUF [8]);
ძირითადი ფუნქციის ძირითადი ლოგიკა ასეთია:
u8 ქრონომეტრი = 0;
ბათილი TIM3_IRQ ხელმწიფე (ბათილია) // TIM3
{
თუ (TIM_GetITStatus (TIM3, TIM_IT_Update)! = გადატვირთვა)
{
TIM_ClearITPendingBit (TIM3, TIM_IT_Update);
timer_cnt ++;
თუ (timer_cnt> = 200)
{
რძის გაგზავნა [6] = რძე ();
დაბოლოს, დაამატეთ კოდი ტაიმერის შეწყვეტაში: ტაიმერის შეფერხებაში ჩემი მიზანია შევამოწმო რამდენი ყავა და რძეა დარჩენილი, შემდეგ კი გამოვლენილი მნიშვნელობა გამოვაგზავნოთ ეკრანზე სერიული პორტის საშუალებით. რძის და ყავის ლობიოს ნარჩენების გაზომვა ჩვეულებრივ ხდება სენსორების მიერ. მარტივი მეთოდები მოიცავს წნევის სენსორებს, რომლებიც ზომავს რძის და ყავის მარცვლების ამჟამინდელ წონას, რათა დადგინდეს რამდენი დარჩა.
დაწერე ბოლოში
ეს სტატია მხოლოდ ჩემი პროექტის განვითარების მარტივ პროცესს აღწერს. კომპანიის პროექტის კონფიდენციალურობის გათვალისწინებით, მე გამოვიყენე ინტერფეისის ინტერფეისი, რომელიც მე თვითონ გამოვიყენე და არა ამ პროექტის რეალური ინტერფეისის ინტერფეისი. STM32– ის კოდის ნაწილი მხოლოდ ამატებს MCU– ს პერიფერიულ დრაივერს და მასთან დაკავშირებულ ლოგიკურ კოდს. ასევე კომპანიის პროექტის კონფიდენციალურობის გათვალისწინებით, კონკრეტული ძირითადი ტექნოლოგიური ნაწილი არ არის მოცემული, გთხოვთ გაიგოთ. თუმცა, ჩემ მიერ მოწოდებული კოდის თანახმად, ითანამშრომლეთ STONE ჩვენების ეკრანთან. ჩემს მეგობრებს, რომლებიც ასევე პროგრამული უზრუნველყოფის ინჟინრები არიან, მხოლოდ რამდენიმე დღე უნდა გაატარონ, რომ დაამატონ ძირითადი ტექნიკური ნაწილები ჩემს კოდის ჩარჩოში, პროექტის დასასრულებლად.
პროექტის შესახებ მეტი ინფორმაციის მისაღებად დააწკაპუნეთ აქ