Sisällysluettelo:
- Vaihe 1: Kahvikoneen näyttöruudun toiminnon esittely
- Vaihe 2: Tee käyttöliittymäkuvia STONE -näytölle
- Vaihe 3: STM32F103RCT6
- Vaihe 4: UART -sarja
- Vaihe 5: Ajastin
- Vaihe 6: Vahtikoira
Video: STONE -näyttö +STM32 +kahvinkeitin: 6 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 08:59
Olen MCU -ohjelmistosuunnittelija, äskettäin saanut projektin olla kahvinkeitin, kotitalouden vaatimukset kosketusnäytöllä, toiminto on hyvä, näytön yläpuolella ei ehkä ole kovin hyvä, onneksi tämä projekti voin päättää, mitä MCU käyttää itseäni, voidaan myös käyttää näytön valinnassa, joten valitsin STM32: n tällaisen yksinkertaisen ja helppokäyttöisen MCU: n, näyttöruutu Valitsin STONEn kosketusnäytön, näyttö on yksinkertainen ja helppokäyttöinen, Oma STM32 MCU vain UART -viestinnän kautta on ok sen kanssa.
STONE -sarjan LCD -näyttö, joka voi kommunikoida MCU: n sarjaportin kautta. Samaan aikaan tämän näyttöruudun käyttöliittymän logiikka voidaan suunnitella suoraan käyttämällä STONEn virallisen verkkosivuston STONE TOOL Box -laatikkoa, mikä on erittäin kätevää. Joten aion käyttää sitä tähän kahvinkeitinprojektiin. Samaan aikaan kirjaan vain peruskehityksen. Koska tämä on yritykseni projekti, tallennan vain yksinkertaisen esittelyn enkä kirjoita koko koodia. Jotkut kivinäytön perusoppaat voivat mennä verkkosivustolle: https://www.stoneitech.com/ Sivustolla on erilaisia tietoja mallista, käytöstä ja suunnitteludokumentaatiosta sekä video -oppaita. En mene tässä liikaa yksityiskohtiin.
Vaihe 1: Kahvikoneen näyttöruudun toiminnon esittely
Tällä projektilla on seuraavat toiminnot: l
- Näyttää nykyisen kellonajan ja päivämäärän
- Näytössä on neljä painiketta americanoa, lattea, cappuccinoa ja espressoa varten.
- Näyttää nykyisen määrän jäljellä olevia kahvipapuja, maitoa ja kahvisokeria
- Tekstinäyttöruutu näyttää nykyisen tilan
Nämä käsitteet mielessä voit suunnitella käyttöliittymän. STONE kosketusnäytöistä käyttöliittymäsuunnittelussa on suhteellisen yksinkertainen, käyttäjä PhotoShop -ohjelmiston avulla suunnittelee hyvän käyttöliittymän ja painikevaikutelman, STONE TOOL Boxin kautta suunnittelee hyviä kuvia näytölle ja lisää omat painikkeet STONE TOOL Box -logiikalla ja sarjatiedot palautusarvo on ok, erittäin helppo kehittää.
Vaihe 2: Tee käyttöliittymäkuvia STONE -näytölle
Toiminnallisten vaatimusten mukaan tein seuraavat kaksi käyttöliittymän näyttöliitäntää, joista toinen on pääliitäntä ja toinen painikeefekti.
STONE TOOL -laatikon käyttö Tällä hetkellä STONE tarjoaa työkalun. Avaa tämä työkalu uuden projektin luomiseksi, tuo sitten suunniteltu käyttöliittymä kuvien näyttämistä varten ja lisää omat painikkeet, tekstinäyttöruudut jne. STONEn virallisilla verkkosivuilla on erittäin täydellinen opetusohjelma tämän ohjelmiston käytöstä : https:/ /www.stoneitech.com/support/download/video
Painikkeiden lisäämisen ja komponenttien näyttämisen vaikutukset STONE TOOL -laatikkoon ovat seuraavat:
STONE TOOL Box -laitteessa on simulointinäyttö, jonka kautta näet käyttöliittymän toiminnallisen vaikutuksen:
Tässä vaiheessa käyttöliittymäni näyttö on valmis, ja minun tarvitsee vain kirjoittaa MCU -koodi. Lataa STONE TOOL Boxin luomat tiedostot näyttöruudulle nähdäksesi todelliset tulokset.
Vaihe 3: STM32F103RCT6
STM32F103RCT6 MCU: lla on tehokkaita toimintoja. Tässä ovat MCU: n perusparametrit:
- Sarja: STM32F10X l Kerne
- VARSI - COTEX32
- Nopeus: 72 MHz
- Tiedonsiirtoliitäntä: CAN, I2C, IrDA, LIN, SPI, UART/USART, USB
- Oheislaitteet: DMA, moottorin ohjaus PWM, PDR, POR, PVD, PWM, lämpötila -anturi, WDT
- Ohjelman tallennuskapasiteetti: 256 kt
- Ohjelmamuistityyppi: FLASH
- RAM -muisti: 48K
- Jännite - virtalähde (Vcc/Vdd): 2 V ~ 3,6 V
- Oskillaattori: sisäinen
- Käyttölämpötila: -40 ° C -85 ° C
- Pakkaus/kotelo: 64 käyttöikää
Tässä projektissa käytän UART-, GPIO-, Watch Dog- ja STM32F103RCT6 -ajastinta. Näiden oheislaitteiden kehitys on kuvattu alla. STM32 KÄYTTÄÄ Keil MDK -ohjelmistokehitystä, joka ei ole sinulle vieras, joten en esittele tämän ohjelmiston asennustapaa. STM32 voidaan simuloida verkossa j-linkin tai st-linkin ja muiden simulointityökalujen avulla. Seuraava kuva on käyttämäni STM32 -piirilevy:
Vaihe 4: UART -sarja
STM32F103RCT6 sisältää useita sarjaportteja. Tässä projektissa käytin sarjaporttikanavaa PA9/PA10, ja sarjaportin siirtonopeudeksi asetettiin 115200.
GPIO
Tämän projektin käyttöliittymässä on yhteensä neljä painiketta, jotka ovat itse asiassa neljän kahvityypin valmistus. Kahvikoneessa kahvipapujen lukumäärän, maidon kulutuksen ja eri kahvien vesivirran säätäminen toteutuu itse asiassa ohjaamalla antureita ja releitä, kun taas yksinkertaisesti ohjaan ensin GPIO -nasta.
Vaihe 5: Ajastin
Kun käynnistät ajastimen, määritä taajuusjakokerroin PSC, tässä on järjestelmäkellomme (72 MHz) taajuusjakoa varten
Määritä sitten uudelleenlatausarvo arr, mikä tarkoittaa, että kun ajastimemme saavuttaa tämän arr, ajastin lataa muut arvot uudelleen.
Esimerkiksi kun asetamme ajastimen laskemaan ylös, ajastimen lukumäärä on yhtä suuri kuin arr ja se tyhjennetään 0: lla ja lasketaan uudelleen
Ajastinlaskuri ladataan uudelleen ja on kerran päivitys
Laske päivitysajan kaava Tout = ((arr +1)*(PSC +1))/Tclk
Kaavan johtaminen: Talk on ajastimen kellon lähde, tässä on 72Mhz
Jaamme varatun kellotaajuuden, määritämme taajuusjakoarvon PSC: ksi, jaamme sitten keskustelumme PSC +1: ksi, ajastimemme lopullinen taajuus on Tclk/(PSC +1) MHz
Taajuudella tarkoitamme siis sitä, että meillä on 1 s puhetta PSC +1 M -numerolla (1 M = 10 ^ 6), ja kunkin numeron aika on PSC +1 /Talk, ja on helppo ymmärtää, että käänteinen taajuudesta on jakso, ja kunkin numeron jakso on PSC +1 /puhe sekuntia ja sitten siirrytään 0: sta arr: iin (arr +1)*(PSC +1) /Tclk
Oletetaan esimerkiksi, että arr = 7199 ja PSC = 9999
Jaimme 72 MHz: n 9999: een.+1 on 7200 Hz
Tämä on 9 000 laskua sekunnissa, ja jokainen luku on 1/7, 200 sekuntia
Joten tallennamme tänne 9 000 numeroa siirtyäksesi ajastinpäivitykseen (7199+1)*(1/7200) = 1 s, joten 1s siirtyy päivitykseen.
void TIM3_Int_Init (U16 arr, u16 psc) {
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM3, KÄYTÖSSÄ);
// kello 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);
Ota meihin yhteyttä, jos tarvitset täydellisen menettelyn:
www.stoneitech.com/contact
Vastaan sinulle 12 tunnin kuluessa.
Vaihe 6: Vahtikoira
Jotta järjestelmä ei kaatuisi ohjelman ollessa käynnissä, lisäsin vahtikoiran. Itse asiassa kaikki MCU: ta käyttävät projektit käyttävät yleensä vahtikoiraa.
STM32: ssa on kaksi sisäänrakennettua vahtikoiraa, jotka parantavat turvallisuutta, aikatarkkuutta ja joustavuutta. Ohjelmistovirheiden aiheuttamien vikojen havaitsemiseen ja ratkaisemiseen voidaan käyttää kahta vahtilaitetta (itsenäistä vahtikoiraa ja ikkunoiden vahtikoiraa). Kun laskuri saavuttaa tietyn aikakatkaisuarvon, keskeytys (vain ikkunan vahtikoira) tai järjestelmän nollaus käynnistyy. Riippumaton vahtikoira (IWDG):
Erillisen hidaskäyntisen kellon (LSI) avulla se toimii, vaikka pääkello epäonnistuu.
Se soveltuu käytettäväksi tilanteissa, joissa vahtikoiran on työskenneltävä täysin itsenäisesti pääohjelman ulkopuolella ja se vaatii vähän ajan tarkkuutta. Ikkunavahti (WWDG):
Kellon ohjaama APB1 -kellosta taajuusjaon jälkeen. Tunnista poikkeuksellisen myöhäinen tai ennenaikainen sovellustoiminto määritettävän aikaikkunan kautta. Soveltuu ohjelmille, jotka vaativat vahtikoirien toimivan tarkasti Windowsissa.
int main (void) {
delay_init ();
// viiveen aloitus NVIC_PriorityGroupConfig (NVIC_PriorityGroup_2);
// NVIC INIT uart_init (115200);
// UART INIT PAD_INIT ();
// Light Init IWDG_Init (4, 625);
samalla (1) {
jos (USART_RX_END)
{kytkin (USART_RX_BUF [5])
{
Espresso -kotelo:
CoffeeSelect (Espresso, USART_RX_BUF [8]);
tauko;
tapaus Americano:
CoffeeSelect (Americano, USART_RX_BUF [8]);
Päätoiminnon päälogiikka on seuraava:
u8 ajastin_cnt = 0;
void TIM3_IRQHandler (mitätön) // TIM3
{
if (TIM_GetITStatus (TIM3, TIM_IT_Update)! = NOLLAUS)
{
TIM_ClearITPendingBit (TIM3, TIM_IT_Update);
timer_cnt ++;
jos (timer_cnt> = 200)
{
milk_send [6] = maito ();
Lisää lopuksi koodi ajastinkeskeytykseen: Ajastimen keskeytyksessä tavoitteeni on tarkistaa, kuinka paljon kahvia ja maitoa on jäljellä, ja lähettää sitten havaittu arvo näyttöruutuun sarjaportin kautta. Yleensä anturit mittaavat, kuinka paljon maitoa ja kahvipapuja on jäljellä. Yksinkertaisia menetelmiä ovat paineanturit, jotka mittaavat maidon ja kahvipapujen nykyisen painon määrittääkseen, kuinka paljon jää jäljelle.
Kirjoita viimeiseen
Tämä artikkeli tallentaa vain projektini yksinkertaisen kehitysprosessin. Kun otetaan huomioon yrityksen projektin luottamuksellisuus, käyttämäni käyttöliittymän näyttöliittymä on myös itse tehty, ei tämän projektin todellinen käyttöliittymä. STM32: n koodiosa lisää vain MCU: n oheisohjaimen ja siihen liittyvän logiikkakoodin. Kun otetaan huomioon myös yrityksen hankkeen luottamuksellisuus, erityistä avainteknologian osaa ei anneta, ymmärrä. Anna toimittamani koodin mukaan kuitenkin yhteistyötä STONE -näyttöruudun kanssa. ystäväni, jotka ovat myös ohjelmistosuunnittelijoita, tarvitsevat vain muutaman päivän lisätäkseen tärkeitä teknisiä osia koodikehykseeni projektin loppuun saattamiseksi.
Lisätietoja projektista saat napsauttamalla tätä