Innholdsfortegnelse:

STONE Display +STM32 +Kaffetrakter: 6 trinn
STONE Display +STM32 +Kaffetrakter: 6 trinn

Video: STONE Display +STM32 +Kaffetrakter: 6 trinn

Video: STONE Display +STM32 +Kaffetrakter: 6 trinn
Video: "Ridiculous" Espresso Workflow Ever! #coffeegrinder #coffeemachine #espresso 2024, Juli
Anonim
STONE Display +STM32 +Kaffetrakter
STONE Display +STM32 +Kaffetrakter

Jeg er en MCU -programvareingeniør, har nylig mottatt et prosjekt for å være en kaffemaskin, husholdningskrav med en berøringsskjermoperasjon, funksjonen er god, er over skjermen valg kanskje ikke veldig bra, heldigvis kan dette prosjektet bestemme hva MCU for å bruke meg selv, kan også brukes til å bestemme hva skjermen, så jeg valgte STM32 av denne typen enkle og enkle MCU å bruke, skjerm Jeg valgte STONEs berøringsskjerm, skjermen er enkel og lett å bruke, Min STM32 MCU bare gjennom UART -kommunikasjon er ok med det.

STONE seriell LCD -skjerm, som kan kommunisere gjennom serieporten til MCU. Samtidig kan logikkdesignet til UI -grensesnittet til denne skjermbildet designes direkte ved å bruke STONE TOOL Box fra STONEs offisielle nettsted, noe som er veldig praktisk. Så jeg skal bruke den til dette kaffemaskinprosjektet. Samtidig skal jeg bare registrere den grunnleggende utviklingen. Siden dette er et prosjekt av firmaet mitt, vil jeg bare ta opp en enkel demo og ikke skrive hele koden. Noen grunnleggende opplæringsprogrammer om steindisplayet kan gå til nettstedet: https://www.stoneitech.com/ Nettstedet har en mengde informasjon om modellen, bruken og designdokumentasjonen, samt videoopplæringer. Jeg kommer ikke til å gå så mye i detaljer her.

Trinn 1: Kaffemaskinens skjermfunksjon Introduksjon

Dette prosjektet har følgende funksjoner: l

  • Viser gjeldende klokkeslett og dato
  • Det er fire knapper på displayet for americano, latte, cappuccino og espresso.
  • Viser gjeldende mengde gjenværende kaffebønner, melk og kaffesukker
  • En tekstdisplayboks viser gjeldende tilstand

Med disse konseptene i tankene kan du designe et UI -grensesnitt. STONE av berøringsskjermene i UI -designen er relativt enkel, brukeren gjennom PhotoShop -programvaren designer godt UI -grensesnitt og knappeffekt, gjennom STONE TOOL Box for å designe gode bilder på skjermen, og legg til dine egne knapper med STONE TOOL Box -logikk og serielle data, returverdien er ok, veldig enkelt for deg å utvikle.

Trinn 2: Lag UI -bilder for STONE Display

Lag UI -bilder for STONE Display
Lag UI -bilder for STONE Display
Lag UI -bilder for STONE Display
Lag UI -bilder for STONE Display
Lag UI -bilder for STONE Display
Lag UI -bilder for STONE Display

I henhold til funksjonelle krav laget jeg følgende to UI -skjermgrensesnitt, det ene er hovedgrensesnittet og det andre er knappeffekten.

Bruk av STONE TOOL -boks For øyeblikket tilbyr STONE TOOL. Åpne dette VERKTØYET for å opprette et nytt prosjekt, importer deretter det designede brukergrensesnittet for å vise bilder, og legg til dine egne knapper, tekstbokser osv. Det offisielle nettstedet til STONE har en veldig komplett opplæring om hvordan du bruker denne programvaren: https:/ /www.stoneitech.com/support/download/video

Effekten av å legge til knapper og vise komponenter i STONE TOOL -boksen er som følger:

STONE TOOL Box har funksjonen som simuleringsdisplay, der du kan se driftseffekten av UI -grensesnittet:

På dette tidspunktet er UI -skjermen min fullført, og alt jeg trenger å gjøre er å skrive MCU -koden. Last ned filene som er generert av STONE TOOL -boksen på skjermen for å se de faktiske resultatene.

Trinn 3: STM32F103RCT6

STM32F103RCT6
STM32F103RCT6

STM32F103RCT6 MCU har kraftige funksjoner. Her er de grunnleggende parametrene til MCU:

  • Serie: STM32F10X l Kerne
  • ARM - COTEX32
  • Hastighet: 72 MHZ
  • Kommunikasjonsgrensesnitt: CAN, I2C, IrDA, LIN, SPI, UART/USART, USB
  • Periferutstyr: DMA, motorstyring PWM, PDR, POR, PVD, PWM, temperatursensor, WDT
  • Program lagringskapasitet: 256KB
  • Programminnetype: FLASH
  • RAM -kapasitet: 48K
  • Spenning - strømforsyning (Vcc/Vdd): 2 V ~ 3,6 V
  • Oscillator: intern
  • Driftstemperatur: -40 ° C ~ 85 ° C
  • Pakke/hus: 64-levetid

I dette prosjektet vil jeg bruke UART, GPIO, Watch Dog og Timer av STM32F103RCT6. Utviklingen av disse eksterne enhetene er dokumentert nedenfor. STM32 BRUKER Keil MDK programvareutvikling, som ikke er fremmed for deg, så jeg vil ikke introdusere installasjonsmetoden for denne programvaren. STM32 kan simuleres online av j-link eller st-link og andre simuleringsverktøy. Følgende bilde er STM32 kretskortet jeg brukte:

Trinn 4: UART Serial

UART Serial
UART Serial
UART Serial
UART Serial
UART Serial
UART Serial

STM32F103RCT6 har flere serielle porter. I dette prosjektet brukte jeg den serielle portkanalen PA9/PA10, og den serielle portens baudhastighet ble satt til 115200.

GPIO

I brukergrensesnittet til dette prosjektet er det totalt fire knapper, som faktisk er å lage fire slags kaffe. I kaffemaskinen realiseres faktisk kontroll av antall kaffebønner, melkeforbruk og vannstrøm av forskjellige kaffe ved å kontrollere sensorer og releer, mens jeg bare styrer GPIO -pinnen først.

Trinn 5: Timer

Timer
Timer
Timer
Timer

Når du initialiserer timeren, spesifiser frekvensdelingskoeffisienten PSC, her er systemklokken vår (72MHz) for frekvensdeling

Angi deretter reload -verdien arr, som betyr at når timeren når denne arr, vil timeren laste inn andre verdier på nytt.

For eksempel, når vi setter timeren til å telle opp, er verdien av timertellingen lik ar og blir slettet med 0 og beregnet på nytt

Tidsuret teller på nytt og en gang er en oppdatering

Beregn oppdateringstidsformelen Tout = ((arr +1)*(PSC +1))/Tclk

Formelavledning: Talk er klokkekilden til timeren, her er 72Mhz

Vi deler den tildelte klokkefrekvensen, spesifiserer frekvensdelingsverdien som PSC, deretter deler vi vår Talk i PSC +1, den siste frekvensen til timeren vår er Tclk/(PSC +1) MHz

Så det vi mener med frekvensen her er at vi har 1s Talk over PSC +1 M -tall (1M = 10 ^ 6), og tiden for hvert nummer er PSC +1 /Talk, og det er lett å forstå at det inverse av frekvensen er perioden, og perioden for hvert nummer her er PSC +1 /Talk sekunder, og så går vi fra 0 til arr er (arr +1)*(PSC +1) /Tclk

La oss for eksempel sette arr = 7199 og PSC = 9999

Vi delte 72MHz i 9999+1 er lik 7200Hz

Dette er 9 000 tellinger per sekund, og hver telling er 1/7, 200 sekund

Så vi registrerer 9.000 tall her for å gå til tidsoppdateringen (7199+1)*(1/7200) = 1s, så 1s går til en oppdatering.

ugyldig TIM3_Int_Init (u16 arr, u16 psc) {

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

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

Ta kontakt med oss hvis du trenger en fullstendig prosedyre:

www.stoneitech.com/contact

Jeg svarer deg innen 12 timer.

Trinn 6: Vakthund

Vakthund
Vakthund
Vakthund
Vakthund

For å forhindre at systemet krasjer mens programmet kjørte, la jeg til vakthunden. Faktisk bruker alle prosjekter som bruker MCU vanligvis en vakthund.

STM32 har to innebygde vakthunder som gir større sikkerhet, nøyaktighet og fleksibilitet. To vakthundsenheter (uavhengig vakthund og vindusvakt) kan brukes til å oppdage og løse feil forårsaket av programvarefeil. Når telleren når en gitt tidsavbruddsverdi, utløses et avbrudd (kun vindusvakthund) eller tilbakestilling av systemet. Uavhengig vakthund (IWDG):

Drevet av en dedikert lavhastighetsklokke (LSI), fungerer den selv om hovedklokken mislykkes.

Den er egnet for bruk i situasjoner der vakthunden må jobbe helt uavhengig utenfor hovedprogrammet og krever lav tidsnøyaktighet. Window Watchdog (WWDG):

Drevet av klokken fra APB1 -klokken etter frekvensdeling. Oppdag unormalt sen eller for tidlig applikasjonsoperasjon gjennom et konfigurerbart tidsvindu. Passer for programmer som krever at vakthunder fungerer i nøyaktig timing av Windows.

int main (void) {

delay_init ();

// forsinkelse init NVIC_PriorityGroupConfig (NVIC_PriorityGroup_2);

// NVIC INIT uart_init (115200);

// UART INIT PAD_INIT ();

// Light Init IWDG_Init (4, 625);

mens (1) {

hvis (USART_RX_END)

{switch (USART_RX_BUF [5])

{

eske Espresso:

CoffeeSelect (Espresso, USART_RX_BUF [8]);

gå i stykker;

case Americano:

CoffeeSelect (Americano, USART_RX_BUF [8]);

Hovedlogikken i hovedfunksjonen er som følger:

u8 timer_cnt = 0;

void TIM3_IRQHandler (void) // TIM3

{

hvis (TIM_GetITStatus (TIM3, TIM_IT_Update)! = RESET)

{

TIM_ClearITPendingBit (TIM3, TIM_IT_Update);

timer_cnt ++;

hvis (timer_cnt> = 200)

{

milk_send [6] = milk ();

Til slutt legger du til koden i tidsavbruddet: I tidsavbruddet er målet mitt å sjekke hvor mye kaffe og melk som er igjen, og deretter sende den oppdagede verdien til displayet gjennom en seriell port. Å måle hvor mye melk og kaffebønner som er igjen gjøres vanligvis av sensorer. Enkle metoder inkluderer trykksensorer, som måler melkens nåværende vekt og kaffebønner for å bestemme hvor mye som er igjen.

Skriv det siste

Denne artikkelen registrerer bare den enkle utviklingsprosessen for prosjektet mitt. Med tanke på konfidensialiteten til selskapets prosjekt, ble UI -skjermgrensesnittet jeg brukte også laget av meg selv, ikke det virkelige UI -skjermgrensesnittet til dette prosjektet. Kodedelen av STM32 legger bare til den perifere driveren til MCU og tilhørende logikkode. Også i betraktning av konfidensialiteten til selskapets prosjekt, er den spesifikke viktige teknologidelen ikke gitt, vær så snill å forstå. Imidlertid, i henhold til koden jeg oppga, samarbeider du med STONE -skjermen. vennene mine, som også er programvareingeniører, trenger bare å bruke noen få dager på å legge til viktige tekniske deler i kodeverket mitt for å fullføre prosjektet.

For å lære mer om prosjektet klikk her