Создал блок пользователя в коде. Создал параметр пользователя fPWM, тип int.
При вставке этого параметра в нужное место кода, он вставляется с пробелом перед и после наименования параметра. Вот так: AF_DCMotor motor1(1, MOTOR12_ fPWM KHZ). В этом случае при компиляции параметр fPWM корректно заменяется числом, которое выставлено пользователем, однако остаются пробелы до и после числа и данная запись становиться некорректной для компилятора ide. Так как должна быть строка вида: AF_DCMotor motor1(1, MOTOR12_64KHZ) (64 приведено для примера).
Если вручную убрать пробелы после вставки fPWM в код, то компилятор FLProg не заменяет этот параметр на число заданное пользователем. И передает эту строку в ide в таком виде: AF_DCMotor motor1(1, MOTOR12_fPWMKHZ)
Блок пользователя CODE
-
- Лейтенант
- Сообщения: 530
- Зарегистрирован: 05 апр 2016, 23:30
- Откуда: Санкт-Петербург
- Имя: Илья
- Boroda
- Капитан
- Сообщения: 836
- Зарегистрирован: 01 май 2016, 01:04
- Откуда: Коломна
- Имя: Станислав
- Контактная информация:
Блок пользователя CODE
starshoy81, покажите блок, будем разбираться
Судя по библиотеке функция AF_DCMotor(uint8_t num, uint8_t freq) принимает байтовые значения, и для AVR-контроллеров выставляет делитель таймера TCCR2B
Попробуйте AF_DCMotor motor1(1, X) , где X=1 до 7 типа Byte.
Таблица соответствия X и MOTOR12_xxKHZ
Судя по библиотеке функция AF_DCMotor(uint8_t num, uint8_t freq) принимает байтовые значения, и для AVR-контроллеров выставляет делитель таймера TCCR2B
Код: Выделить всё
#define MICROSTEPS 16 // 8 or 16
#define MOTOR12_64KHZ _BV(CS20) // no prescale
#define MOTOR12_8KHZ _BV(CS21) // divide by 8
#define MOTOR12_2KHZ _BV(CS21) | _BV(CS20) // divide by 32
#define MOTOR12_1KHZ _BV(CS22) // divide by 64
#define MOTOR34_64KHZ _BV(CS00) // no prescale
#define MOTOR34_8KHZ _BV(CS01) // divide by 8
#define MOTOR34_1KHZ _BV(CS01) | _BV(CS00) // divide by 64
#define DC_MOTOR_PWM_RATE MOTOR34_8KHZ // PWM rate for DC motors
#define STEPPER1_PWM_RATE MOTOR12_64KHZ // PWM rate for stepper 1
#define STEPPER2_PWM_RATE MOTOR34_64KHZ // PWM rate for stepper 2
Таблица соответствия X и MOTOR12_xxKHZ
- 001 - CLK - MOTOR12_64KHZ
- 010 - CLK/8 - MOTOR12_8KHZ
- 011 - CLK/32 - MOTOR12_2KHZ
- 100 - CLK/64 - MOTOR12_1KHZ
- 101 - CLK/128 - MOTOR12_500HZ (низкие значения в библиотеке не предусмотрены, мотор наверное гудит)
- 110 - CLK/256 - MOTOR12_250HZ
- 111 - CLK/1024 - MOTOR12_125HZ
Код: Выделить всё
byte freq=1; // в других случаях частота 64кГц
If (fPWM==8) {freq=2;} // частота 8кГц
If (fPWM==2) {freq=3;} // частота 2кГц
If (fPWM==1) {freq=4;} // частота 1кГц
......
......
AF_DCMotor motor1(1, freq);
Последний раз редактировалось Boroda 06 фев 2017, 21:57, всего редактировалось 1 раз.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость