====== Stm32F103PWMTest ======
===== Ü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
===== Weiterführung =====
* mit Dispatcher und ControllerRingBus: **Stm32CrbServoMotor**
* ohne Dispatcher, ohne ControllerRingBus: **Stm32F103PwmTest** : 2204071805_Stm32F103PwmTest_01V08_last2xS4xM
===== 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 =====
* Version: {{:Module:Arduino:PulseWidthModulation:Stm32F103PWMTest:2203312138_Stm32F103PwmTest_01V02.zip | 2203312138_Stm32F103PwmTest_01V02.zip}}
* Version: {{:Module:Arduino:PulseWidthModulation:Stm32F103PWMTest:2204011412_Stm32F103PwmTest_01V03_6pwmchannel.zip | 2204011412_Stm32F103PwmTest_01V03_6pwmchannel.zip}}
//
//------------------------------------------------------------
const int PIN_PWM_A24 = PB11; // ok
const int PIN_PWM_A23 = PB10; // ok
const int PIN_PWM_A34 = PB1; // ok
const int PIN_PWM_A33 = PB0; // ok
const int PIN_PWM_A32 = PA7; // interference PB0/PB1
const int PIN_PWM_A31 = PA6; // ok
//
const int PIN_PWM_B24 = PA3; // Uart
const int PIN_PWM_B23 = PA2; // Uart
const int PIN_PWM_B22 = PA1; // interference PB10
//
const int PIN_PWM_C11N = PB13; // interference PB0/PB1
const int PIN_PWM_C12N = PB14; // interference PB0/PB1
const int PIN_PWM_C13N = PB15; // interference PB0/PB1
const int PIN_PWM_C11 = PA8; // interference PB0/PB1
const int PIN_PWM_C12 = PA9; // interference PB0/PB1
const int PIN_PWM_C13 = PA10; // interference PB0/PB1
const int PIN_PWM_C14 = PA11; // interference PB0/PB1
//
const int PIN_PWM_D21 = PA15; // interference PB0/PB1
const int PIN_PWM_D22 = PB3; // interference PB0/PB1
const int PIN_PWM_D23 = PB4; // ok
const int PIN_PWM_D24 = PB5; // ok
//------------------------------------------------------------
// Pwm
CPulseWidthModulator ActorA(PIN_PWM_A24);
CPulseWidthModulator ActorB(PIN_PWM_A23);
CPulseWidthModulator ActorC(PIN_PWM_A34);
CPulseWidthModulator ActorD(PIN_PWM_A33);
CPulseWidthModulator ActorE(PIN_PWM_D23);
CPulseWidthModulator ActorF(PIN_PWM_D24);
//
for (int I = 0; I < 100; I += 1)
{ // Motor
int PwmActorA = min(MAX_PWMA, max(MIN_PWMA, I));
int PwmActorB = min(MAX_PWMB, max(MIN_PWMB, 100 - I));
int PwmActorC = min(MAX_PWMC, max(MIN_PWMC, I));
int PwmActorD = min(MAX_PWMD, max(MIN_PWMD, 100 - I));
int PwmActorE = min(MAX_PWMA, max(MIN_PWMA, I));
ActorA.SetFrequencyPwm(FREQUENCY_HIGH, PwmActorA);
ActorB.SetFrequencyPwm(FREQUENCY_HIGH, PwmActorB);
ActorC.SetFrequencyPwm(FREQUENCY_LOW, PwmActorC);
ActorD.SetFrequencyPwm(FREQUENCY_LOW, PwmActorD);
ActorE.SetFrequencyPwm(FREQUENCY_HIGH, PwmActorE);
//
delay(100);
}
* anderer (erfolgloser) Versuch, da nur eine Basisfrequenz für alle PWMs:
// 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);
}
===== 220330: Stm32F103: Aufbau Timer / Channel =====