Är en STM32 bra att använda som USB I/O-modul?
Re: Är en STM32 bra att använda som USB I/O-modul?
Rick81: Men det där är inte så som ST tänk att man ska göra interrupter i HALen, cubeMX skapar den stomme du visar och anger en callbackfunktion som användaren ska implementera. Men det är ju enklare så som du visar...
Re: Är en STM32 bra att använda som USB I/O-modul?
Al_Bundy skrev:Eller så lägger jag bara koden på minnet och övar massa olika exempel med HAL. Jag kommer få det jobbigt om jag byter plattform t.ex. PIC eller AVR. Men förhoppningsvis så gör jag inte det då det är jag som bestämmer vilken plattform kunden ska ha.
Men det är väll så med alla högnivså språk? Jag menar, jag programmerar mycket i Java. Men skulle jag och sätta mig vid Python så skulle jag vara på ruta noll igen. Att kunna språk är en sak, men att kunna applicera språket i verkligheten är en annan sak som kräver mycket kännedom om vad som finns och vad som fungerar?
Eller är det så att kan man AVR, så kan man PIC, Infineon, STM32, AMD, Intel osv helt utan problem?
Alla processorer är olika, men grunden fungerar i stort sett likadant. Kan man hantera ex interupt i en AVR/PIC är det mycket lättare implementera interupt i en stm32.
Re: Är en STM32 bra att använda som USB I/O-modul?
AndLi skrev:Rick81: Men det där är inte så som ST tänk att man ska göra interrupter i HALen, cubeMX skapar den stomme du visar och anger en callbackfunktion som användaren ska implementera. Men det är ju enklare så som du visar...
Nej det är inte helt enligt cubemx, men kollar man exemplen i HAL är det så det brukar vara implemtenterat.
Re: Är en STM32 bra att använda som USB I/O-modul?
Det är lustigt!
Jag har gjort så att jag har en räknare som räknar hela tiden. Jag läser räknaren. Men när räknaren slår runt så ska jag läsa ett ADC värde.
Men problemet är att funktionen ovan läses bara en en gång. Inget mera.
Jag har gjort så att jag har en räknare som räknar hela tiden. Jag läser räknaren. Men när räknaren slår runt så ska jag läsa ett ADC värde.
Kod: Markera allt
uint32_t IN0;
uint32_t IN1;
uint32_t IN4;
uint8_t sendMessage[] = "Hello world!";
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
IN0 = HAL_ADC_GetValue(&hadc1);
IN1 = HAL_ADC_GetValue(&hadc1);
IN4 = HAL_ADC_GetValue(&hadc1);
}
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void) {
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
while (1) {
/* USER CODE END WHILE */
uint32_t countValue = htim3.Instance->CNT;
//HAL_UART_Transmit(&huart2, &sendMessage, sizeof(sendMessage), 10);
if (countValue >= 0 && countValue < IN0) {
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
} else if (countValue >= IN0 && countValue <= 1023) {
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
} else {
}
/* USER CODE BEGIN 3 */
}
Re: Är en STM32 bra att använda som USB I/O-modul?
Din interrupt? Nollas interruptbiten så den kan triggas igen?
Re: Är en STM32 bra att använda som USB I/O-modul?
Tack för svaren.Al_Bundy skrev:Fråga: Eller är QP i detta fall inte "istället för" PID utan ett sätt att "förfina" PID-regleringen?
Svar: Nej. QP har ingen P,I eller D. QP minimerar en kvadratisk kostfunktion via programmering. Därför heter det Quadratic Programming. Modern teknik som finns i de flesta bilar, rymdsonder, reaktorer osv för att få ett fint resultat.
Det är väldigt mycket matematik man måste kunna tillämpa.
Men för att kunna reglera nått så krävs ju någon typ av IN-signal. Om QP inte använder sig av vare sig signalens ÄR-värde jämfört emot BÖR-värdet, signalens integral eller signalens förändringshastighet. Hur kan den då ge ett bra svar endast med hjälp av mer matte?
Som exempel kan vi ta en flygdator till en drönare. Om man vet helt säkert hur drönarens hårdvara ser ut och gör fysiska tester så är jag med på att man kan testa fram en matematisk modell för att räkna ut gaspådrag för motorerna baserat på gyro-sensorernas IN-värden. Men vad händer när en propeller blir skadad och dels orsakar vibrationer och dels ger sämre effekt, då stämmer ju inte den matematiska modellen längre?
Fattar jag rätt att QP är en typ av beräknings-metod och inte ett substitut för en PID?
Senast redigerad av Glattnos 4 januari 2019, 17:06:05, redigerad totalt 1 gång.
Re: Är en STM32 bra att använda som USB I/O-modul?
Ja. Den har update event aktiverad.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: Är en STM32 bra att använda som USB I/O-modul?
Det verkar som att man främst använder det till att beräkna genomströmning i ett lager, för att få bättre orderplanering, eller beräkna kundgenomströmning och liknande applikationer.Fattar jag rätt att QP är en typ av beräknings-metod och inte ett substitut för en PID?
Re: Är en STM32 bra att använda som USB I/O-modul?
Al, vad Andli menade är att du alltid i interuptkoden nollställa interruptet, annars kan det liksom inte hända igen.
Re: Är en STM32 bra att använda som USB I/O-modul?
Jo. Lyssna här. Du har en kostfunktion:Glattnos skrev:Tack för svaren.Al_Bundy skrev:Fråga: Eller är QP i detta fall inte "istället för" PID utan ett sätt att "förfina" PID-regleringen?
Svar: Nej. QP har ingen P,I eller D. QP minimerar en kvadratisk kostfunktion via programmering. Därför heter det Quadratic Programming. Modern teknik som finns i de flesta bilar, rymdsonder, reaktorer osv för att få ett fint resultat.
Det är väldigt mycket matematik man måste kunna tillämpa.
Men för att kunna reglera nått så krävs ju någon typ av IN-signal. Om QP inte använder sig av vare sig signalens ÄR-värde jämfört emot BÖR-värdet, signalens integral eller signalens förändringshastighet. Hur kan den då ge ett bra svar endast med hjälp av mer matte?
Som exempel kan vi ta en flygdator till en drönare. Om man vet helt säkert hur drönarens hårdvara ser ut och gör fysiska tester så är jag med på att man kan testa fram en matematisk modell för att räkna ut gaspådrag för motorerna baserat på gyro-sensorernas IN-värden. Men vad händer när en propeller blir skadad och dels orsakar vibrationer och dels ger sämre effekt, då stämmer ju inte den matematiska modellen längre?
Fattar jag rätt att QP är en typ av beräknings-metod och inte ett substitut för en PID?
J = ((R-Y)-U)^2
Vi kvadrerar den för att inte få negativa tal. U är våran insignal och X är våran utsignal. Y är beroende av U och om R, referensen, är lika med Y så kommer J = U. Detta är alltså perfekt reglering då. Men i verkligheten blir det inte så.
MATLAB:
Kod: Markera allt
>> t = linspace(0,10); % Tio sekunder
>> u = sin(2*t); % Våran insignal;
>> G = tf(1, [1 2 3]); % Matematisk modell;
>> y = lsim(G, u, t); % Simulering av matematisk modell;
>> R = 0.1; % Våran referens (börvärde)
>> J = abs((R-y)-u); % Kostfunktion
>> figure(2); plot(1:length(J), J)
>> hold on
>> plot(1:length(u), u, 'r')
Kod: Markera allt
>> [val, index] = min(J);
>> size(index)
ans =
1 1
>> index
index = 96
>> u(index)
ans = 0.33571
>>
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Senast redigerad av Al_Bundy 4 januari 2019, 17:32:36, redigerad totalt 3 gånger.
Re: Är en STM32 bra att använda som USB I/O-modul?
jag fattar absolut inget, om man har ett är värde som ska regleras mot ett börvärde gör man det propotionellt,
vill man ha snabbare stegsvar använder man derivatan,
och vill man ha högre nogrannhet använder man integralen,
vad är teorin bakom att göra på något annat sätt?
vill man ha snabbare stegsvar använder man derivatan,
och vill man ha högre nogrannhet använder man integralen,
vad är teorin bakom att göra på något annat sätt?
Re: Är en STM32 bra att använda som USB I/O-modul?
Hur gör jag det? Jag har bara följt denna:TomasL skrev:Al, vad Andli menade är att du alltid i interuptkoden nollställa interruptet, annars kan det liksom inte hända igen.
Re: Är en STM32 bra att använda som USB I/O-modul?
Derivator, Integraler fingerar fint. Men tänk om du har en bil utan bromsar. Den enda bromsningen du har är allt luftmotstånd och friktion från vägen. Då gäller det att du måste ha en bra optimerad fot på gaspedalen.svanted skrev:jag fattar absolut inget, om man har ett är värde som ska regleras mot ett börvärde gör man det propotionellt,
vill man ha snabbare stegsvar använder man derivatan,
och vill man ha högre nogrannhet använder man integralen,
vad är teorin bakom att göra på något annat sätt?
Exempel på system som inte har någon "broms" är temperatur och flöde. Processindustrin använder sig alltid av prediktiv reglering. PID fungerar utmärkt för t.ex. servomotorer där man kan "vrida åt andra hållet" om det gick fel.
Vem har en kylare i sin tekokare?

Re: Är en STM32 bra att använda som USB I/O-modul?
RTFM istället.Al_Bundy skrev:Hur gör jag det? Jag har bara följt denna:TomasL skrev:Al, vad Andli menade är att du alltid i interuptkoden nollställa interruptet, annars kan det liksom inte hända igen.
Re: Är en STM32 bra att använda som USB I/O-modul?
Jag ger upp. Jag fortsätter som vanligt. Det fungerar ändå så.