User Tools

Site Tools


module:arduino:pulsewidthmodulation:stm32f103pwmtest:stm32f103pwmtest

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
module:arduino:pulsewidthmodulation:stm32f103pwmtest:stm32f103pwmtest [2022/04/01 17:07] – [220331: Stm32F103: Aufbau Timer / Channel] omdevelopmodule:arduino:pulsewidthmodulation:stm32f103pwmtest:stm32f103pwmtest [2022/09/13 11:58] (current) – external edit 127.0.0.1
Line 2: Line 2:
  
 ===== Übersicht ===== ===== Übersicht =====
 +  * Klasse CPulseWidthModulator für jeden PWM-Ausgang (und für jeden Controller-Typ) - leider bisher nicht erreicht!
  
 +===== Idee =====
 +  * PCA9685 16 Channel 12-bit PWM I2C-Servo-Module
  
-===== Aufgaben ===== +===== Weiterführung ===== 
-  * Auflösung 16bit bei PWM??? +  * mit Dispatcher und ControllerRingBus: **Stm32CrbServoMotor** 
-  * Wie viele Timer? +  * ohne Dispatcher, ohne ControllerRingBus: **Stm32F103PwmTest** : 2204071805_Stm32F103PwmTest_01V08_last2xS4xM 
-  * Wie viele Channel für einen Timer?+ 
 +===== Aufgaben STM32F103C8T6 ===== 
 +  * Auflösung 16bit bei PWM - konnte bisher nicht allgemein beeinflusst werden :-( 
 +  * Wie viele Timer? ??
 +  * Wie viele Channel für einen Timer? ??? 
 +  * Grosse Probleme, mit Library oder auch mit PTimer->function(...) : 
 +  * gegenseitige Beeinflussung, Interfererenzen, maximal 2 Timer gleichzeitig verwendbar
  
 ===== ===== ===== =====
 +===== 220331: Stm32F103PwmTest  =====
 +  * letzte Entwicklung (anstelle Stm32F103PwmMotorMinimal)
 +  * 2x Servos mit 50Hz (2 Pwms) TIM1
 +  * 2x Motoren (mit INA und INB, daher 4 Pwms) TIM2
 +  * letztlich automatische Pwm-Zuordnung über Bibliothek (Standard in Arduino), grausam!
 +  * grausam: nur Funktion setPWM(frequency, pwm) mit int-Werten - auch für pwm :-(:-(:-( -, daher nur 10 Werte im Bereich von 1 ms (left) bis 2 ms (right) [middle: 1.5 ms]
 +  * Version: {{:Module:Arduino:PulseWidthModulation:Stm32F103PWMTest:2204071805_Stm32F103PwmTest_01V08_last2xS4xM.zip | 2204071805_Stm32F103PwmTest_01V08_last2xS4xM.zip}}
 +  * Version:{{:Module:Arduino:PulseWidthModulation:Stm32F103PWMTest:2204061919_Stm32F103PwmTest_01V05_MotorLRServoAB.zip | 2204061919_Stm32F103PwmTest_01V05_MotorLRServoAB.zip}}
 +  * Version: {{:Module:Arduino:PulseWidthModulation:Stm32F103PWMTest:2204061904_Stm32F103PwmTest_01V04.zip | 2204061904_Stm32F103PwmTest_01V04.zip}}
 +
 ===== 220331: Stm32F103: Aufbau Timer / Channel ===== ===== 220331: Stm32F103: Aufbau Timer / Channel =====
   * Version: {{:Module:Arduino:PulseWidthModulation:Stm32F103PWMTest:2203312138_Stm32F103PwmTest_01V02.zip | 2203312138_Stm32F103PwmTest_01V02.zip}}   * Version: {{:Module:Arduino:PulseWidthModulation:Stm32F103PWMTest:2203312138_Stm32F103PwmTest_01V02.zip | 2203312138_Stm32F103PwmTest_01V02.zip}}
Line 52: Line 71:
  
 <code> <code>
-  for (int I = 0; I < 100; I += 1) +for (int I = 0; I < 100; I += 1) 
-  { // Motor +{ // Motor 
-    int PwmActorA = min(MAX_PWMA, max(MIN_PWMA, I)); +  int PwmActorA = min(MAX_PWMA, max(MIN_PWMA, I)); 
-    int PwmActorB = min(MAX_PWMB, max(MIN_PWMB, 100 - I)); +  int PwmActorB = min(MAX_PWMB, max(MIN_PWMB, 100 - I)); 
-    int PwmActorC = min(MAX_PWMC, max(MIN_PWMC, I)); +  int PwmActorC = min(MAX_PWMC, max(MIN_PWMC, I)); 
-    int PwmActorD = min(MAX_PWMD, max(MIN_PWMD, 100 - I)); +  int PwmActorD = min(MAX_PWMD, max(MIN_PWMD, 100 - I)); 
-    int PwmActorE = min(MAX_PWMA, max(MIN_PWMA, I)); +  int PwmActorE = min(MAX_PWMA, max(MIN_PWMA, I)); 
-    ActorA.SetFrequencyPwm(FREQUENCY_HIGH, PwmActorA); +  ActorA.SetFrequencyPwm(FREQUENCY_HIGH, PwmActorA); 
-    ActorB.SetFrequencyPwm(FREQUENCY_HIGH, PwmActorB); +  ActorB.SetFrequencyPwm(FREQUENCY_HIGH, PwmActorB); 
-    ActorC.SetFrequencyPwm(FREQUENCY_LOW, PwmActorC); +  ActorC.SetFrequencyPwm(FREQUENCY_LOW, PwmActorC); 
-    ActorD.SetFrequencyPwm(FREQUENCY_LOW, PwmActorD); +  ActorD.SetFrequencyPwm(FREQUENCY_LOW, PwmActorD); 
-    ActorE.SetFrequencyPwm(FREQUENCY_HIGH, PwmActorE); +  ActorE.SetFrequencyPwm(FREQUENCY_HIGH, PwmActorE); 
-    // +  // 
-    delay(100); +  delay(100); 
-  }+
 +</code> 
 + 
 +  * anderer (erfolgloser) Versuch, da nur eine Basisfrequenz für alle PWMs: 
 +<code> 
 +// 2kHz !!! only ONE PWM-Frequency! 
 +void setup() 
 +{  
 +  analogWriteResolution(16); 
 +  analogWriteFrequency(2000); // 2kHz !!! only ONE PWM-Frequency! 
 +  analogWrite(PB11, 20000);      
 +  analogWrite(PB10, 40000);     
 +  analogWrite(PB0, 20000);      
 +  analogWrite(PB1, 40000);     
 +}
 </code> </code>
  
module/arduino/pulsewidthmodulation/stm32f103pwmtest/stm32f103pwmtest.1648825642.txt.gz · Last modified: 2022/04/01 17:07 by omdevelop