Atmega2560 PWM на PH4
Я пытаюсь преобразовать следующий код для вывода на вывод 7 (PH4, OC4B) на Arduino Mega. Код выводится на вывод 6. Этот код взят из GitHub для GRBL на Mega "https://github.com/fra589/grbl-Mega-5X" из cpu_map.h ясно, что PH6 и PH7 находятся на одном и том же порту, но я просто не знаю, какие биты нужно изменить, чтобы GRBL выводился на вывод 7.Любая помощь будет приветствоваться.
#elif defined (SPINDLE_PWM_ON_D6)
// Установите таймер для использования TIMER4C, который крепится к цифровому контакту 6 - Ramps Servo 2
#define SPINDLE_PWM_MAX_VALUE 255.0 // Переводится на частоту ШИМ около 1,9 кГц при 1/8 прескалере
#ifndef SPINDLE_PWM_MIN_VALUE
#define SPINDLE_PWM_MIN_VALUE 1 // Должно быть больше нуля.
#endif
#define SPINDLE_PWM_OFF_VALUE 0
#define SPINDLE_PWM_RANGE (SPINDLE_PWM_MAX_VALUE-SPINDLE_PWM_MIN_VALUE)
//Control Digital Pin 6 which is Servo 2 signal pin on Ramps 1.4 board
#define SPINDLE_TCCRA_REGISTER TCCR4A
#define SPINDLE_TCCRB_REGISTER TCCR4B
#define SPINDLE_OCR_REGISTER OCR4A
#define SPINDLE_COMB_BIT COM4A1
// Прескалер 1/8, 16-битный быстрый ШИМ-режим
#define SPINDLE_TCCRA_INIT_MASK (1<<WGM41)
#define SPINDLE_TCCRB_INIT_MASK ((1<<WGM42) | (1<<WGM43) | (1<<CS41))
#define SPINDLE_OCRA_REGISTER ICR4 // 8-битный быстрый ШИМ-режим требует верхнего значения сброса, хранящегося здесь.
#define SPINDLE_OCRA_TOP_VALUE 0xFF // Значение сброса счетчика ШИМ. Должно быть то же самое, что и PWM_MAX_VALUE в шестнадцатеричном формате.
// Определить выходные штифты шпинделя.
#define SPINDLE_PWM_DDR DDRH
#define SPINDLE_PWM_PORT PORTH
#define SPINDLE_PWM_BIT 3 // Цифровой вывод MEGA2560 6
@Mr.Spriggs, 👍2
1 ответ
Вы хотите заменить вывод 6 (PH3, OC4A) на вывод 7 (PH4, OC4B). Есть три вещи, которые вы должны изменить. Во-первых, выходной регистр сравнения, который является OCR4A для pin OC4A и OCR4B для pin OC4B. Таким образом:
-#define SPINDLE_OCR_REGISTER OCR4A
+#define SPINDLE_OCR_REGISTER OCR4B
Затем бит конфигурации, который позволяет выводить данные:
-#define SPINDLE_COMB_BIT COM4A1
+#define SPINDLE_COMB_BIT COM4B1
Наконец, бит для установки в регистре направления данных, который равен 3 для PH3 и 4 для PH4:
-#define SPINDLE_PWM_BIT 3 // Цифровой вывод MEGA2560 6
+#define SPINDLE_PWM_BIT 4 // Цифровой вывод MEGA2560 7
Примечание: как и в формате diff -u, префикс -
означает “удалить это”,
префикс +
означает “добавить это”.
- Установить ШИМ по периоду? И он переменный?
- Преобразование кода ATTINY85 в ATMEGA2560. Прерывания смены контактов
- Установите частоту ШИМ на 25 кГц.
- Какова частота PWM-выхода на Arduino
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как устранить шум от вентилятора 12 В с ШИМ-управлением на низкой скорости
- Генерация частоты ШИМ выше 125 кГц с помощью Arduino Uno
- Увеличить разрядность PWM
Спасибо за помощь. Я потратил несколько часов, пытаясь разобраться в таблице данных., @Mr.Spriggs