Hur kan jag få tag på prestandaversionen av Nucleo?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av DanielM »

>> Då syftar jag på hur effektivt du utnyttjar forumets resurser.

Råd tar jag, men det är alltid upp till mig själv att avgöra om det finns ett behov.
Användarvisningsbild
JimmyAndersson
Inlägg: 26308
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av JimmyAndersson »

Det (ditt senaste inlägg här över) ställer jag mig bakom till 110%.

Det är man själv som bestämmer vad man vill göra och ta till sig. Ingen är skyldig till att någon ”slösat bort” dennes tid.
För alla väljer själva vad de vill lägga sin tid på.

Men det kan förstås påverka en både positivt och negativt, precis som alla beslut. Poängen är alltid ändå att man väljer. Att bli medlem här innebär inte att man blir underställd någon.

Resten i tråden är en annan sak.
Jag är inte säker på att du fortfarande vet vad tråden ska leda till. Berätta gärna!
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av DanielM »

Tack!

Jag har fått goda råd och framtida tips på vad som kan göras och vad som rekommenderas. I detta fall så handlar det om jag ska skriva om mitt maskiniella inlärningsbibliotek (machine learning, med häftigare ord) så den beräknar endast heltal istället för flyttal. Jag kom fram till att jag har inte denna kompetens att utföra detta arbete samt att min processor har en FPU som löser detta problem åt mig.

Det som är unikt med detta forum är att vissa hoppar på en och idiotförklarar en om man inte följer deras väg eller implementerar deras råd som har givits.

Tråden har ledit till att jag har velat fram och tillbaka om jag ska köpa den värsta Nucleo-kortet. Men jag var smart nog att avvakta igenom att titta på om jag kan lösa problemet på annat sätt och därmed använda billigare Nucleo-kort. Jag har fått mycket kritik från erfarna användare här att jag använder för "stor hårdvaran", när jag kan använda billigare hårdvara och istället fokusera på att skriva en kod som är effektiv.

Och detta har jag gjort. Istället för en Nucleo H7 serie (pris ca 400 kr), så har jag valt en Nucleo F4 serie (pris ca 200 kr). Men detta har jag inte resulterat någon klapp på axlen.

Det jag har gjort nu idag/kväll/natt är att jag har verifierat min C-kod på min processor och det gör EXAKT samma beräkningar som i MATLAB som i STM32. Det jag har gjort är följande:
  • Kalman Filter
  • Konvertera överföringsfunktion till tillståndsmodell
  • Optimeringslära via linjärprogrammering
  • Rekrusiv minsta kvadratmetod för systemidentifiering
MATLAB approves :tumupp: att min STM32 gör rätt. :tumupp:

Målet med detta projekt är att reglera temperatur med en adaptiv & självinställande regulator. Mycket unikt!
Användarvisningsbild
JimmyAndersson
Inlägg: 26308
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av JimmyAndersson »

Kul att du svarade! Och bra skrivet. :tumupp:


Jah vill lyfta fram en sak:

”Det som är unikt med detta forum är att vissa hoppar på en och idiotförklarar en om man inte följer deras väg eller implementerar deras råd som har givits.”

Det har jag tyvärr sett exempel på många gånger tyvärr.
Det som gör att vissa (t.ex du, jag och Roger) fortsätter ändå, är nog att vi är envisa. Men många slutar logga in här och jag förstår dem. Amin/moderatorer skulle kunna göra mer i den här frågan.


Elektronik ska vara KUL !
Inte blodigt allvar.

Den typen av matte som du hanterar är intressant. (Jag förstår varför flyttal är ”opålitligt” i vissa fall, men djupare än så är obegripligt.) Men det är ändå kul att läsa för man snappar upp lite och får en inblick i hur andra tänker.
Som sagt: Det är kul.
Och det är därför jag är här.

Jag ser fram emot fortsättningen på tråden. Det blir garanterat några inlägg med ”du har fel, så här ska man tycka”, men sedan finns det hopp. Det gör det alltid. Man måste bara vilja.

Likasinnade ska stötta varandra!
Så det så! :)
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av DanielM »

Tackar! Elektronik ska vara kul och viktigaste är att man kommer igång utan att känna behov att starta på toppen.

Bara för att notera!
I MATLAB så får jag talet 11.394599. I min STM32 när jag skriver ut talet på en LCD efter att jag har gjort alla mina beräkningar (det är mycket) så visar den 11.394599.

Jag tycker detta är riktigt bra med tanke på att det är en STM32 som gör beräkningarna och stämmer överens med MATLAB.

Om man får beskriva beräkningarna så är det linjär algebra där matriserna är över 100x20. Detta är mycket.

Precisionen är fantastiskt bra!
Rick81
Inlägg: 746
Blev medlem: 30 december 2005, 13:07:09

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av Rick81 »

Låter ju bra!

Vad blir nästa steg? Vore ju intressant se en praktisk tillämpning och några grafer eller nåt.

Nu var det längesen jag läste reglerteknik, men största fördelen med denna metod är att man inte behöver ta fram PIDkonstanterna?
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av DanielM »

Alltså jag är nästan klar med min lilla låda. 8) Exakt! Man behöver inte skriva in PID-parametrar för det är ingen PID. Detta är en MPC. En modernare regulator.

Jag skrev matematiken bakom det hela. Men jag kan skriva ut processen. Jag brukar alltid kommentera tankarna bakom istället för att skriva ut vad logiken gör.

Kod: Markera allt

/*
	 * This program do the following steps at AUTO mode
	 * 0. Declare reference, input and output
	 * 1. Take a sample on output, input and reference - Vanlig ADC/PT100 mätning
	 * 2. Identify model - Rekrusiv minsta kvadratmetod
	 * 3. Turn model into a state space model - konvertering
	 * 4. Estimate the state trajectory - Kalman Filter
	 * 5. Compute input signal - Model Predictive Control
	 * 6. Apply the input signal - PWM styrning
	 * 7. Update on LCD - I2C kommunikation (fungerar!)
	 */
Jag har den på skrivbordet just nu och den visar rätt temperatur, dock har jag implementerat Software SPI = segt så jag tror jag behöver lite hjälp från en som är SPI kunnig.

Jag använder detta bibliotek, men jag har skrivit om den lite så att den passar flera PT100 sensorer. Detta bibliotek är bara skrivet för en PT100 sensor.
https://github.com/4ilo/MAX31865-Stm32H ... MAX31865.c

Det jag skulle behöva hjälp med är hur man kan implementera Hardware SPI så att det går snabbare.

Denna del av koden har jag skrivit. Mycket är lånat från URL-länken ovan. Men som ni ser så är det en bakåtvänd for-loop som körs två gånger. I detta fall så är variabeln len mellan 1 till 2, beroende på vilken data man ska ha. Ibland vill man ha två stycken 8-bit data, dvs 16 bit. Då är len = 2. Detta är inget problem för mig att använda HAL_SPI_Transmit funktionen i STM. Men just när det är baklänges....hur gör man då?
(data[x] & (1 << i))
uint8_t *data brukar ha elementstorleken 1 eller 2.

Ja...jag HAR läst databladet och även skrivit eget bibliotek. Men problemet är att jag fick det dåligt kalibrerat på något sätt. Den visade hela tiden fel.

Så jag skulle vara behov utav lite hjälp att konvertera om detta till hardware SPI?
Om jag plockar upp databladet https://datasheets.maximintegrated.com/ ... X31865.pdf så är det Table 4. RTD Resistance Registers Definition jag försöker läsa och skriva till.

Biblioteket fungerar. Så enklaste sättet är bara skriva om detta till STM32 HAL Hardware SPI kod. Vet ni hur man gör?

Kod: Markera allt

void spi_write(MAX31865_Soft_SPI* soft_spi, uint8_t *data, uint8_t len)
{
    for (uint8_t x = 0; x < len; x++)
    {
        for (int8_t i = 7; i >= 0; i--)
        {
            HAL_GPIO_WritePin(soft_spi->MOSI_PORT, soft_spi->MOSI_PIN, (data[x] & (1 << i)));
            HAL_Delay(1);
            HAL_GPIO_WritePin(soft_spi->CLK_PORT, soft_spi->CLK_PIN, 1);
            HAL_Delay(1);
            HAL_GPIO_WritePin(soft_spi->CLK_PORT, soft_spi->CLK_PIN, 0);
        }
    }

}

void spi_read(MAX31865_Soft_SPI* soft_spi, uint8_t *buffer, uint8_t len)
{
    for (uint8_t x = 0; x < len; x++)
    {
        buffer[x] = 0;

        for (int8_t i = 7; i >= 0; i--)
        {
            buffer[x] <<= 1;
            HAL_GPIO_WritePin(soft_spi->CLK_PORT, soft_spi->CLK_PIN, 1);
            HAL_Delay(1);
            buffer[x] |= HAL_GPIO_ReadPin(soft_spi->MISO_PORT, soft_spi->MISO_PIN);
            HAL_Delay(1);
            HAL_GPIO_WritePin(soft_spi->CLK_PORT, soft_spi->CLK_PIN, 0);
        }
    }
}
Ett alternativ är att ta bort HAL_Delay(1) och sätter MOSI och CLK till Very High Output Speed. Då går det snabbt. Men kanske man kan få det snabbare om jag väljer att implementera Hardware SPI? Jag har försökt länge, men det är liksom så att...nä...får det inte att fungera riktigt.
hummel
Inlägg: 2269
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av hummel »

Är rekrusiv något begrepp inom minsta kvadratmetoden eller bara ett ofta förekommande stavfel i tråden?
Senast redigerad av hummel 8 december 2019, 17:46:21, redigerad totalt 1 gång.
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av DanielM »

Rekrusiv är att en funktion anropar sig själv. Men implementeringen är snarare att man anropar funktionen "by reference" argument.

Minsta kvadratmetoden är till för att lösa
\(Ax = b\)

Detta kan lösas igenom Ordinary Least Squares (Ordinär Minsta kvadratmetod)
\(x = (A^TA)^{-1}A^Tb\)

Eller om man vill inkludera regularisering ("filtrering") så kan man också skriva
\(x = (A^TA + \alpha I)^{-1}A^Tb\)

Där \(\alpha\) är ett litet tal t.ex. \(0.001\)

Rekrusiv minsta kvadratmetod är att man ständigt närmar sig lösningen \(x\) desto mer man samplar data. Ordinary Least Squares förväntar sig att man har all data på en gång, vilket inte är så bra för inbyggda system om man ska ha en float array som är 1000 element exempelvis. 1000*4 = 4000 bytes för EN signal. Man man kanske ska ha flera signaler också. Redan där så börjar minnet tas upp fort.

All optimeringslära och identifiering kretsar kring \(Ax = b\).
Castor
Inlägg: 1989
Blev medlem: 24 mars 2012, 13:03:49

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av Castor »

Rekursiv stavas tydligen rekrusiv på Flashback, men blir inte mera rätt för det. :rofl
hummel
Inlägg: 2269
Blev medlem: 28 november 2009, 10:40:52
Ort: Stockholm

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av hummel »

Betyder det samma sak som rekursiv?
Användarvisningsbild
Lennart Aspenryd
Tidigare Lasp
Inlägg: 12607
Blev medlem: 1 juli 2011, 19:09:09
Ort: Helsingborg

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av Lennart Aspenryd »

Sökte rekursivt med ordet rekrusive och fick en massa tyska träffar.
Så det kanske är rätt. :vissla:

Men jag har lärt mig många nya ord idag. :humm:
DanielM
Inlägg: 2194
Blev medlem: 5 september 2019, 14:19:58

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av DanielM »

Rekommenderar starkt att göra några övningar inom det. Då förstår ni algoritmen.
Det kan också hända att jag blandar ihop det med andra språk. Talar spanska också för att notera och brukar även skriva c istället för k väldigt ofta.
bearing
Inlägg: 11265
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av bearing »

Är Al Bundy alltså norrman?! :D :D :D
Då faller ett och annat på plats! =)

Fint da! Jeg ønsker deg en god sykkeltur!
Rick81
Inlägg: 746
Blev medlem: 30 december 2005, 13:07:09

Re: Hur kan jag få tag på prestandaversionen av Nucleo?

Inlägg av Rick81 »

(data[x] & (1 << i))
Detta är för att skicka den högsta biten först (MSB) och det är så SPI brukar fungera. Detta görs normalt av hårdvaran.

Utan att se din hårdvaru SPI kod är det svårt att säga vad som är fel, men om du bara läser ut en temperatur varje sekund, spelar det ingen roll om du kör mjukvaru SPI eller hårdvaru SPI.

Sne är det ju bra om du säger hur SPIvärdena blir fel, det brukar gå slutsatser av det om man vet vad man förväntar sig. Tex får du ex bara 0xFF så är det troligt att chippet inte får nån Chipenable eller klocka. Har du oscilloskop kan du mäta på signalerna och se att de ser korrekta ut.
Skriv svar