Блок пользователя CODE

В данный форум Вы можете заносить найденные Вами ошибки.При добавления ошибки пожалуйста приложите файлик error.log который находится в папке с установленной программой
Ответить
starshoy81
Лейтенант
Сообщения: 530
Зарегистрирован: 05.04.2016{, 23:30}
Репутация: 29
Откуда: Санкт-Петербург
Имя: Илья

Блок пользователя CODE

#1

Сообщение starshoy81 » 24.12.2016{, 01:18}

Создал блок пользователя в коде. Создал параметр пользователя 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)

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

Блок пользователя CODE

#2

Сообщение Boroda » 06.02.2017{, 16:13}

starshoy81, покажите блок, будем разбираться

Судя по библиотеке функция 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
Попробуйте AF_DCMotor motor1(1, X) , где X=1 до 7 типа Byte.

Таблица соответствия 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.02.2017{, 21:57}, всего редактировалось 1 раз.

Ответить

Вернуться в «Новые»