Sida 9 av 18

Re: Är en STM32 bra att använda som USB I/O-modul?

Postat: 4 januari 2019, 16:34:18
av AndLi
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?

Postat: 4 januari 2019, 16:39:40
av Rick81
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?

Postat: 4 januari 2019, 16:40:34
av Rick81
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?

Postat: 4 januari 2019, 16:51:56
av Al_Bundy
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.

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 */
	}
Men problemet är att funktionen ovan läses bara en en gång. Inget mera.

Re: Är en STM32 bra att använda som USB I/O-modul?

Postat: 4 januari 2019, 17:03:50
av AndLi
Din interrupt? Nollas interruptbiten så den kan triggas igen?

Re: Är en STM32 bra att använda som USB I/O-modul?

Postat: 4 januari 2019, 17:05:21
av Glattnos
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.
Tack för svaren.
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?

Re: Är en STM32 bra att använda som USB I/O-modul?

Postat: 4 januari 2019, 17:05:38
av Al_Bundy
Ja. Den har update event aktiverad.

Re: Är en STM32 bra att använda som USB I/O-modul?

Postat: 4 januari 2019, 17:10:16
av TomasL
Fattar jag rätt att QP är en typ av beräknings-metod och inte ett substitut för en PID?
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.

Re: Är en STM32 bra att använda som USB I/O-modul?

Postat: 4 januari 2019, 17:12:07
av TomasL
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?

Postat: 4 januari 2019, 17:16:45
av Al_Bundy
Glattnos skrev:
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.
Tack för svaren.
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?
Jo. Lyssna här. Du har en kostfunktion:

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')
Insignal
Skärmbild från 2019-01-04 17-10-06.png
Här kan vi se att våran bästa insignal är alltså 0.335

Kod: Markera allt

>> [val, index] = min(J);
>> size(index)
ans =

   1   1

>> index
index =  96
>> u(index)
ans =  0.33571
>>
Skärmbild från 2019-01-04 17-14-53.png
Om jag applicerar en konstant insignal av 0.335 hela tiden så kommer jag få väldigt nära 0.1. Nu gjorde jag en "QP" optimering med bara en insignal, och där av resultatet. Desto fler insignaler jag prövar, desto bättre urval har jag.
Skärmbild från 2019-01-04 17-30-21.png

Re: Är en STM32 bra att använda som USB I/O-modul?

Postat: 4 januari 2019, 17:21:14
av svanted
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?

Re: Är en STM32 bra att använda som USB I/O-modul?

Postat: 4 januari 2019, 17:21:46
av Al_Bundy
TomasL skrev:Al, vad Andli menade är att du alltid i interuptkoden nollställa interruptet, annars kan det liksom inte hända igen.
Hur gör jag det? Jag har bara följt denna:

Re: Är en STM32 bra att använda som USB I/O-modul?

Postat: 4 januari 2019, 17:24:05
av Al_Bundy
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?
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.

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? :D

Re: Är en STM32 bra att använda som USB I/O-modul?

Postat: 4 januari 2019, 17:27:51
av TomasL
Al_Bundy skrev:
TomasL skrev:Al, vad Andli menade är att du alltid i interuptkoden nollställa interruptet, annars kan det liksom inte hända igen.
Hur gör jag det? Jag har bara följt denna:
RTFM istället.

Re: Är en STM32 bra att använda som USB I/O-modul?

Postat: 4 januari 2019, 18:35:19
av Al_Bundy
Jag ger upp. Jag fortsätter som vanligt. Det fungerar ändå så.