İçindekiler:

STONE Ekran +STM32 +Kahve Makinesi: 6 Adım
STONE Ekran +STM32 +Kahve Makinesi: 6 Adım

Video: STONE Ekran +STM32 +Kahve Makinesi: 6 Adım

Video: STONE Ekran +STM32 +Kahve Makinesi: 6 Adım
Video: Yeni kahve makinem: Fiyat / performans odaklı 👍 2024, Temmuz
Anonim
STONE Ekran +STM32 +Kahve Makinesi
STONE Ekran +STM32 +Kahve Makinesi

Ben bir MCU yazılım mühendisiyim, yakın zamanda bir kahve makinesi olacak bir proje aldım, dokunmatik ekranlı ev gereksinimleri, işlev iyi, ekran seçimi çok iyi olmayabilir, neyse ki bu projede ne olduğuna karar verebilirim MCU'yu kendim kullanmak için, ekranın ne olduğuna karar vermek için de kullanılabilir, bu yüzden bu tür basit ve kullanımı kolay MCU'nun STM32'sini seçtim, ekran STONE'ın dokunmatik ekranını seçtim, ekran basit ve kullanımı kolay, My STM32 MCU sadece UART iletişimi ile tamamdır.

MCU'nun seri portu üzerinden iletişim kurabilen STONE seri LCD ekran. Aynı zamanda, bu ekranın UI arayüzünün mantıksal tasarımı, STONE'nin resmi web sitesi tarafından sağlanan STONE TOOL Box kullanılarak doğrudan tasarlanabilir ve bu çok uygundur. Bu yüzden bu kahve makinesi projesi için kullanacağım. Aynı zamanda, sadece temel gelişmeyi kaydedeceğim. Bu benim şirketimin bir projesi olduğu için sadece basit bir demo kaydedeceğim ve tam kodu yazmayacağım. Taş ekranla ilgili bazı temel eğitimler web sitesine gidebilir: https://www.stoneitech.com/ Web sitesinde model, kullanım ve tasarım belgeleri ile video eğitimleri hakkında çeşitli bilgiler bulunur. Burada çok fazla ayrıntıya girmeyeceğim.

Adım 1: Kahve Makinesi Ekranı İşlevine Giriş

Bu proje aşağıdaki işlevlere sahiptir: l

  • Geçerli saati ve tarihi görüntüler
  • Ekranda americano, latte, cappuccino ve espresso için dört düğme vardır.
  • Kalan kahve çekirdekleri, süt ve kahve şekeri miktarını gösterir
  • Bir metin görüntüleme kutusu mevcut durumu görüntüler

Bu kavramları göz önünde bulundurarak bir UI arayüzü tasarlayabilirsiniz. UI tasarımındaki dokunmatik ekranların TAŞI nispeten basittir, kullanıcı PhotoShop yazılımı aracılığıyla iyi UI arayüzü ve düğme efekti tasarlar, STONE TOOL Box aracılığıyla ekrana iyi resimler tasarlamak ve STONE TOOL Box mantığıyla kendi düğmelerinizi eklemek ve Seri veri dönüş değeri tamam, geliştirmeniz çok kolay.

Adım 2: STONE Display için UI Resimleri Yapın

STONE Display için UI Resimleri Yapın
STONE Display için UI Resimleri Yapın
STONE Display için UI Resimleri Yapın
STONE Display için UI Resimleri Yapın
STONE Display için UI Resimleri Yapın
STONE Display için UI Resimleri Yapın

Fonksiyonel gereksinimlere göre aşağıdaki iki UI ekran arayüzünü yaptım, biri ana arayüz diğeri düğme efekti.

STONE TOOL Box Kullanımı Şu anda STONE, TOOL sağlar. Yeni bir proje oluşturmak için bu ARACI açın, ardından resimleri görüntülemek için tasarlanmış kullanıcı arayüzünü içe aktarın ve kendi düğmelerinizi, metin görüntüleme kutularınızı vb. ekleyin. STONE'nin resmi web sitesinde bu yazılımın nasıl kullanılacağına dair çok eksiksiz bir eğitim var: https:/ /www.stoneitech.com/support/download/video

STONE TOOL Box'a düğme eklemenin ve bileşenleri görüntülemenin etkileri aşağıdaki gibidir:

STONE TOOL Box, UI arayüzünün çalışma etkisini görebileceğiniz simülasyon ekranı işlevine sahiptir:

Bu noktada UI ekranım tamamlandı ve tek yapmam gereken MCU kodunu yazmak. Gerçek sonuçları görmek için STONE TOOL Box tarafından oluşturulan dosyaları ekrana indirin.

Adım 3: STM32F103RCT6

STM32F103RCT6
STM32F103RCT6

STM32F103RCT6 MCU'nun güçlü işlevleri vardır. MCU'nun temel parametreleri şunlardır:

  • Seri: STM32F10X l Kerne
  • KOL - COTEX32
  • Hız: 72 MHZ
  • İletişim arayüzü: CAN, I2C, IrDA, LIN, SPI, UART/USART, USB
  • Çevresel ekipman: DMA, motor kontrolü PWM, PDR, POR, PVD, PWM, sıcaklık sensörü, WDT
  • Program depolama kapasitesi: 256KB
  • Program hafıza tipi: FLAŞ
  • RAM kapasitesi: 48K
  • Voltaj - güç kaynağı (Vcc/Vdd): 2 V ~ 3,6 V
  • osilatör: dahili
  • Çalışma sıcaklığı: -40°C ~ 85°C
  • Paket/muhafaza: 64-life

Bu projede STM32F103RCT6'nın UART, GPIO, Watch Dog ve Timer'ını kullanacağım. Bu çevre birimlerinin gelişimi aşağıda belgelenmiştir. STM32 KULLANILIR Keil MDK yazılım geliştirme size hiç de yabancı değil, bu yüzden bu yazılımın kurulum yöntemini tanıtmayacağım. STM32, j-link veya st-link ve diğer simülasyon araçları ile çevrimiçi olarak simüle edilebilir. Aşağıdaki resim kullandığım STM32 devre kartıdır:

Adım 4: UART Seri

UART Seri
UART Seri
UART Seri
UART Seri
UART Seri
UART Seri

STM32F103RCT6 birkaç seri bağlantı noktasına sahiptir. Bu projede PA9/PA10 seri port kanalını kullandım ve seri port baud hızı 115200 olarak ayarlandı.

GPIO

Bu projenin kullanıcı arayüzünde, aslında dört çeşit kahve yapmak olan toplam dört düğme var. Kahve makinesinde farklı kahvelerin çekirdek sayısını, süt tüketimini ve su akışını kontrol etmek aslında sensörler ve röleler tarafından kontrol edilirken, ben sadece önce GPIO pinini kontrol ediyorum.

Adım 5: Zamanlayıcı

zamanlayıcı
zamanlayıcı
zamanlayıcı
zamanlayıcı

Zamanlayıcıyı başlatırken, frekans bölme katsayısı PSC'yi belirtin, işte frekans bölme için sistem saatimiz (72MHz)

Ardından, arr yeniden yükleme değerini belirtin; bu, zamanlayıcımız bu diziye ulaştığında, zamanlayıcının diğer değerleri yeniden yükleyeceği anlamına gelir.

Örneğin, zamanlayıcıyı saymak için ayarladığımızda, zamanlayıcı sayısının değeri arr'a eşittir ve 0 ile silinir ve yeniden hesaplanır

Zamanlayıcı sayısı yeniden yüklenir ve bir kez Güncelleme

Güncelleme zamanı formülünü hesaplayın Tout = ((dizi+1)*(PSC +1))/Tclk

Formül türetme: Talk, zamanlayıcının saat kaynağıdır, işte 72Mhz

Tahsis edilen saat frekansını bölüyoruz, frekans bölme değerini PSC olarak belirliyoruz, ardından Konuşmamızı PSC +1'e bölüyoruz, zamanlayıcımızın son frekansı Tclk/(PSC +1) MHz

Yani burada sıklık ile kastettiğimiz, PSC +1 M Sayılar (1M=10 ^ 6) üzerinden 1s Talk'umuz var ve her sayının zamanı PSC +1 /Talk'tır ve bunun tersinin olduğunu anlamak kolaydır. frekansın periyodudur ve buradaki her sayının periyodu PSC +1 /Konuşma saniyesidir ve sonra 0'dan arr'a gidiyoruz (dizi+1)*(PSC+1)/Tclk

Örneğin arr=7199 ve PSC =9999 olarak ayarlayalım.

72MHz'i 9999+1'e böldük 7200Hz eşittir

Bu, saniyede 9, 000 sayıdır ve her sayı 1/7, 200 saniyedir.

Zamanlayıcı güncellemesine (7199+1)*(1/7200)=1s gitmek için burada 9,000 Numara kaydediyoruz, yani 1s bir güncellemeye gidiyor.

void TIM3_Int_Init(u16 dizi, u16 psc){

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

//saat 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);

Tam bir prosedüre ihtiyacınız varsa lütfen bizimle iletişime geçin:

www.stoneitech.com/contact

12 saat içinde size cevap vereceğim.

Adım 6: Köpek İzle

köpek izle
köpek izle
köpek izle
köpek izle

Program çalışırken sistemin çökmesini önlemek için watchdog'u ekledim. Aslında, MCU kullanan tüm projeler genellikle bir bekçi köpeği kullanır.

STM32, daha fazla güvenlik, zaman doğruluğu ve esneklik sağlayan iki yerleşik bekçi köpeğine sahiptir. Yazılım hatalarından kaynaklanan arızaları tespit etmek ve çözmek için iki izleme cihazı (bağımsız izleme ve pencere izleme) kullanılabilir. Sayaç belirli bir zaman aşımı değerine ulaştığında, bir kesme (yalnızca pencere bekçisi) veya sistem sıfırlaması tetiklenir. Bağımsız bekçi köpeği (IWDG):

Özel bir düşük hızlı saat (LSI) tarafından çalıştırılır, ana saat başarısız olsa bile çalışır.

Watchdog'un ana program dışında tamamen bağımsız çalışmasının gerektiği ve düşük zaman doğruluğu gerektirdiği durumlarda kullanıma uygundur. Pencere bekçi köpeği (WWDG):

Frekans bölünmesinden sonra APB1 saatinden saat tarafından sürülür. Yapılandırılabilir bir zaman penceresi aracılığıyla anormal derecede geç veya erken uygulama çalışmasını tespit edin. Windows'un hassas zamanlamasında çalışması için bekçi köpeği gerektiren programlar için uygundur.

int ana(boşluk) {

gecikme_init();

//delay init NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

//NVIC BAŞLAT uart_init(115200);

//UART INIT PAD_INIT();

//Işık Başlatma IWDG_Init(4, 625);

süre(1) {

eğer(USART_RX_END)

{ geçiş (USART_RX_BUF[5])

{

kasa Espresso:

CoffeeSelect(Espresso, USART_RX_BUF[8]);

kırmak;

durum Americano:

CoffeeSelect(Americano, USART_RX_BUF[8]);

Main işlevindeki Ana mantık aşağıdaki gibidir:

u8 timer_cnt=0;

geçersiz TIM3_IRQHandler(void) //TIM3

{

if (TIM_GetITStatus(TIM3, TIM_IT_Update) != SIFIRLA)

{

TIM_ClearITPendingBit(TIM3, TIM_IT_Update);

timer_cnt++;

if(timer_cnt>=200)

{

milk_send[6]=süt();

Son olarak timer interrupt'ına kodu ekleyin: Timer interrupt'ında amacım ne kadar kahve ve süt kaldığını kontrol etmek ve ardından tespit edilen değeri bir seri port üzerinden ekrana göndermek. Ne kadar süt ve kahve çekirdeği kaldığını ölçmek genellikle sensörler tarafından yapılır. Basit yöntemler, ne kadar kaldığını belirlemek için sütün ve kahve çekirdeklerinin mevcut ağırlığını ölçen basınç sensörlerini içerir.

en sonda yaz

Bu makale sadece projemin basit geliştirme sürecini kaydeder. Firmanın projesinin gizliliği göz önünde bulundurularak kullandığım UI display arayüzü de bu projenin gerçek UI display arayüzü değil tarafımca yapılmıştır. STM32'nin kod kısmı, yalnızca MCU'nun çevresel sürücüsünü ve ilgili mantık kodunu ekler. Ayrıca şirketin projesinin gizliliği göz önüne alındığında, özel anahtar teknoloji kısmı verilmemiştir, lütfen anlayın. Ancak verdiğim koda göre STONE ekranı ile işbirliği yapın. aynı zamanda yazılım mühendisi olan arkadaşlarımın projeyi tamamlamak için kod çerçeveme önemli teknik parçalar eklemek için sadece birkaç gün harcaması yeterli.

Proje hakkında daha fazla bilgi edinmek için buraya tıklayın