Hallo zusammen,
ich beschäftige mich momentan mit Flex PWM (mit Timern...) am Teensy. Ich orientiere mich hierfür an einem Beispielskript und Skripten aus dem Internet, das ich über 4 Ecken privat bekommen habe. Die Grundfunktionen und so machen so langsam Sinn, jedoch komme ich so nicht wirklich weiter.
Ich suche jetzt schon seit Stunden im Internet, um ein Paper oder einen Forenbeitrag zu finden in dem das mit dem PWM schön erklärt wird, bin aber nicht fündig geworden.
Hat da jemand zufällig eine Idee wo das von vorneherein erklärt wird?
VG Puce137
PS: Beispielskript (nicht von mir), dass ihr wisst um was es geht:
//Methoden Definitonen:
void configurePWM(const int cells) {
FLEXPWM1_MCTRL = FLEXPWM_MCTRL_RUN(0);
FLEXPWM2_MCTRL = FLEXPWM_MCTRL_RUN(0);
FLEXPWM3_MCTRL = FLEXPWM_MCTRL_RUN(0);
FLEXPWM4_MCTRL = FLEXPWM_MCTRL_RUN(0);
for (int i = 0; i < cells; i++) {
pinMode(pins[i][0], OUTPUT);
uint16_t mask = 1 << module[i][1];
IMXRT_FLEXPWM_t *p = 0X403DC000 + (module[i][0] - 1) * 0x4000;
p->SM[module[i][1]].CTRL = FLEXPWM_SMCTRL_LDMOD | FLEXPWM_SMCTRL_PRSC(0);
p->SM[module[i][1]].VAL1 = 7500;
p->MCTRL |= FLEXPWM_MCTRL_RUN(mask) | FLEXPWM_MCTRL_LDOK(mask);
}
}
void setPWM(float shareFloat, const int i) {
uint16_t mask = 1 << module[i][1];
IMXRT_FLEXPWM_t *p = 0x403DC000 + (module[i][0] - 1) * 0x4000;
if (module[i][2] == 2) {
p->SM[module[i][1]].VAL2 = tick;
p->SM[module[i][1]].VAL3 = tick + 7500 * shareFloat;
}
if (module[i][2] == 4) {
p->SM[module[i][1]].VAL4 = tick;
p->SM[module[i][1]].VAL5 = tick + 7500 * shareFloat;
}
tick = tick + 7500 * shareFloat;
p->OUTEN |= FLEXPWM_OUTEN_PWMA_EN(mask);
p->OUTEN |= FLEXPWM_OUTEN_PWMB_EN(mask);
p->MCTRL |= FLEXPWM_MCTRL_LDOK(mask);
*(portConfigRegister(pins[i][0])) = pins[i][1];
}
Es kann sein das das Programm falsch oder sinnfrei ist, mir gehts nur um die Befehle...