Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
05.08.2018, 00:40
|
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,033
Сказал спасибо: 2,559
Сказали Спасибо 11,881 раз(а) в 5,958 сообщении(ях)
|
Re: Увеличить частоту ШИМ'а Arduino
Сообщение от boris_latysh
|
Греется силовой транзистор.
|
Драйвер нормальный?
А ШИМ какой? Их же не один в контроллере. Я ХЗ, чо там в абдурине применили.
ПС. Абдуринщики тут разные пролетают. Имею ввиду уровень. Соответственно и отношение к новому человеку. Так что... Ну, в подписи...
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
05.08.2018, 00:47
|
|
Прохожий
Регистрация: 04.08.2018
Сообщений: 9
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Увеличить частоту ШИМ'а Arduino
Сообщение от akegor
|
А ШИМ какой? Их же не один в контроллере. Я ХЗ, чо там в абдурине применили.
|
Я взял 3 Шим ( NANO ) на 11 пине. (8 бит) он как бы нигде не участвует и на работу остальных функций не влияет.
|
|
|
|
05.08.2018, 00:54
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,997
Сказал спасибо: 3,015
Сказали Спасибо 3,190 раз(а) в 2,164 сообщении(ях)
|
Re: Увеличить частоту ШИМ'а Arduino
Техническим английским владеете? Могу бесплатно предоставить несколько страниц из зануала на применённый там микроконтроллер. ![Секрет](images/smilies/icon_arrow.gif) TCCR2B - это только вершина айсберга.
И да, схемотехника драйвера и включение нагрузки - не будут лишними.
__________________
Экзорцист 40-го уровня.
|
|
|
|
05.08.2018, 09:12
|
|
Прохожий
Регистрация: 04.08.2018
Сообщений: 9
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Увеличить частоту ШИМ'а Arduino
Сообщение от ForcePoint
|
Техническим английским владеете? Могу бесплатно предоставить несколько страниц из мануала на применённый там микроконтроллер. TCCR2B - это только вершина айсберга.
|
Если можно с мануалом тыкните носом. А на понятном языке не встречалось описания?
На счет айсберга я уже понял. Параметры ШИМ Arduino не меняет (кроме скважности). Поэтому получается, что лезем напрямую в регистры управления. Опять же интуитивно подозреваю, что есть Библиотека с готовым решением которая это делает но пока ничего вменяемого не встретилось.
Схему приложил, но там ничего военного. С 11 ноги управляем мощным ключом. Ногу можно поменять в принципе 16 разрядный таймер не занят. Частоту 100 герц получили путем стендовых испытаний электромотора с помощью генератора ШИМ.
Последний раз редактировалось boris_latysh; 05.08.2018 в 10:32.
|
|
|
|
05.08.2018, 10:06
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,983
Сказал спасибо: 0
Сказали Спасибо 4,941 раз(а) в 2,370 сообщении(ях)
|
Re: Увеличить частоту ШИМ'а Arduino
Сообщение от boris_latysh
|
подозреваю, что есть Библиотека с готовым решение
|
и зачем она вам? в основе обдурины лежит, насколько помню, gcc, что позволяет, используя массу наработок winavr, решить проблему. а еще лучше - использовать авр студию и плату обдурины без абдурино иде. вообще такое на асме за час с отладкой без лишних вопросов решается
|
|
|
|
05.08.2018, 12:24
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,997
Сказал спасибо: 3,015
Сказали Спасибо 3,190 раз(а) в 2,164 сообщении(ях)
|
Re: Увеличить частоту ШИМ'а Arduino
Сообщение от boris_latysh
|
А на понятном языке не встречалось описания?
|
Я поэтому и выделил слово "технический". Он очень прост и состоит на 90% из терминов и 10% из простых глаголов, предлогов и т.п. Без 120 времён и прочей херни.
Сообщение от boris_latysh
|
Если можно с мануалом тыкните носом.
|
Судя по приведённым в начале теме таблицам макаронники(?) для чего-то решили использовать даже не "быстрый ШИМ"... Тогда, для подгона на 100 Гц можно попробовать использовать режим 5 из таблицы 18-8, где максимум счёта задаётся регистром OCR2A (примерно 77..78 надо будет записать в OCR2A и 7 в младшие разряды TCCR2B). Выход, соответственно, придётся перести на второй канал сравнения и вывод OC2B. Но в этом случае существенно упадёт разрешающая способность.
Лучше - использовать режим 7 "быстрый ШИМ" (примерно 156 надо будет записать в OCR2A и 7 в младшие разряды TCCR2B), разрешение подрастёт до 7 бит.
P.S. Внятной аргументации для "ровно 100 Гц" мы так и не услышали. И схема не проливает много света.
__________________
Экзорцист 40-го уровня.
|
|
|
|
05.08.2018, 21:30
|
|
Прохожий
Регистрация: 04.08.2018
Сообщений: 9
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Увеличить частоту ШИМ'а Arduino
Сообщение от ForcePoint
|
Судя по приведённым в начале теме таблицам макаронники(?) для чего-то решили использовать даже не "быстрый ШИМ"... Тогда, для подгона на 100 Гц можно попробовать использовать режим 5 из таблицы 18-8, где максимум счёта задаётся регистром OCR2A (примерно 77..78 надо будет записать в OCR2A и 7 в младшие разряды TCCR2B). Выход, соответственно, придётся перести на второй канал сравнения и вывод OC2B. Но в этом случае существенно упадёт разрешающая способность.
Лучше - использовать режим 7 "быстрый ШИМ" (примерно 156 надо будет записать в OCR2A и 7 в младшие разряды TCCR2B), разрешение подрастёт до 7 бит.
|
Понял. Теперь главный вопрос как выглядит команда которое все это заносит в OCR2A и TCCR2B?
Так было TCCR2B = (TCCR2B & 0b11111000) | 0x06;
Я правильно думаю ?????
Так нужно TCCR2B = (TCCR2B & 0b11111000) | 0x0E;
Добавил 1 (двоичную) в третий разряд и вместо "6" получилось "Е"
Или так TCCR2B = (TCCR2B & 0b11111100) | 0x06;
Или вставить "1" в двоичную цифру.
В общем синтаксис команд мне не понятен кто нибудь знает где его можно почитать.
Последний раз редактировалось boris_latysh; 05.08.2018 в 22:59.
|
|
|
|
05.08.2018, 22:28
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,169
Сказали Спасибо 3,858 раз(а) в 2,928 сообщении(ях)
|
Re: Увеличить частоту ШИМ'а Arduino
boris_latysh, а почему все маски не пользовать везде и однотипно двоичные (0b)?
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
Последний раз редактировалось mike-y-k; 06.08.2018 в 10:59.
|
|
|
|
06.08.2018, 10:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
|
Re: Увеличить частоту ШИМ'а Arduino
Я правильно понял, что ШИМ генерируется на ноге MOSI? И тогда он, с большой вероятностью - программный?
(фирменный стиль "абдурино": ради возможности вывода ШИМ на любую ногу наплевать на аппаратные средства контроллера. Да и правильно: 120 Гц ШИМ - куда быстрее? Уже глаз не видит, как моргает светодиодег.
Чёрт с ним, можно и так, но никто же не сказал адептам, что контроллер - это ДРУГОЕ! НЕ IBM PC с LPT портом...) Между тем ШИМ с 1/10 тактовой делается легче лёгкого, правда, с хреновым разрешением.
Надо за объект программирования держать не "ардуино-нано", а контроллер. Что там, Мега328?
В той меге для ШИМа взять 16-разрядный таймер, если нужна плавность изменения скважности. Таймер запрограммировать на фазово-корректный ШИМ, рекомендованный для двигателей. Хотя, о чём это я...
Читать даташит на контроллер!!!
Не понимаю, почему изменение частоты на 20% уменьшит нагрев ключа. Полевой транзистор любит хороший драйвер...
PS Скажите, а в ардуино-IDE можно пройти программу в симуляторе по шагам? Я как-то пытался, не нашёл.
Последний раз редактировалось makakus; 06.08.2018 в 10:45.
|
|
|
|
06.08.2018, 13:18
|
|
Прохожий
Регистрация: 04.08.2018
Сообщений: 9
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Увеличить частоту ШИМ'а Arduino
Усилия не пропали даром. Текст функции где взял не помню ![Смущение](images/smilies/icon_redface.gif)
Понимание ее работы пришло благодаря ForcePoint,
Для удобства выделил функцию для настройки таймера "pwm_initial();" Запускаем ее в разделе "void setup()" :
void setup() {
pwm_initial();
.....
}
.........
void pwm_initial() {
DDRB |= 1 ‹‹ 1; // PB1 как выход, канал 1
DDRB |= 1 ‹‹ 2; // PB2 как выход, канал 2
TCCR1A = 0; // Сброс данных регистра
TCCR1B = 0; // Сброс данных регистра
TCNT1 = 0; // Установка нижнего предела
TCCR1B |= (1 ‹‹ CS12)| (1 ‹‹ CS10); // 1 -› CS12 Значение
1 -› CS10 Значение 16 МГц / (делитель) 1024 = 1562,5 Гц
TCCR1A |= (1 ‹‹ COM1A1) | (1 ‹‹ COM1B1); // Не инверсный режим работы
// Установка верхнего предела значением в бите ICR1
// Режим 14 из документации " Бастрый PWM "
ICR1 = 156; // 1562,5 Гц / 1 * ( 1 + 156 ) = 99,8 Гц !!!
TCCR1A |= (1 ‹‹ WGM11);
TCCR1B |= (1 ‹‹ WGM12) | (1 ‹‹ WGM13);
OCR1A = 416; // Начальное значение уровня 30%
OCR1B = 416; // Начальное значение уровня 30%
}
Использован 16 разрядный таймер. Arduino NANO это таймер "1".
Выход ШИМ берем на Пин - D10.
Описание таймеров взял тут
https://sites.google.com/site/qeewik...-the-atmega328
Изменяя значения делителя указанное в ( TCCR1B |= (1 ‹‹ CS12)| (1 ‹‹ CS10); ) значения ( ICR1 = 156; ) в моем случае легко меняется частота ШИМ с шагом 1 Гц.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:20.
|
|