Я пытаюсь изменить частоту цифрового вывода pwm № 9 на Arduino Uno до 70 Гц. Я нашел несколько примеров кода для изменения частоты контактов, но ничего не очень ясно. Может ли кто-нибудь объяснить это? СпасибоИзмените частоту цифрового pwm на Arduino Uno rev 3
1
A
ответ
0
Аппаратные возможности Atmel ATMega Pulse-wide modulation (PWM) в основном поддерживают изменение рабочего цикла. Частоты можно выбирать только из нескольких фиксированных вариантов.
Существует очень хорошее и подробное объяснение на arduino.stackexchange.com. Посмотрите сообщение: How can I set two PWM at two different frequencies?.
0
Вы можете изменить значение штырька 9 PWM на 70 Гц, изменив значения IRC1 и OCRA1.
double freq = 70.0; // Set frequency to 70Hz
// Set Timer1 to phase and frequency correct mode. NON-inverted mode
TCCR1A = _BV(COM1A1) | _BV(COM1B1);
// Set Timer1 prescaler to clk/8 (outputs from 15,259Hz to 500000Hz
TCCR1B = _BV(WGM13) | _BV(CS11);
//ICR Register, which controls the PWM total pulse length
double icr = 8000000.0/8.0/freq; //ICR1 = (clk/2)/tmr_prescaler/freq.
ICR1 = round(icr); // defines total PWM length in clock/8
// Now to change the PWM output value (duty cycle):
double pwm_duty = 50.0 // Set PWM duty cycle to 50% (higher precision)
// OR (delete line above or below)
double pwm_duty = 120 /255.0; // is the same as analogWrite(9, 120)
//OCR Registers, which control the PWM duty cycle.
OCR1A = round(icr * pwm_duty/100.0);
OCR1B = round(icr * (100.0-pwm_duty)/100.0);
СОВЕТ: Вы можете использовать другие значения FREQ для других частот.
Просто помните, что чем выше частота, тем ниже разрешение рабочего цикла.
ПРИМЕЧАНИЕ: Любой код Arduino, который использует TIMER1, не будет работать после этого (или будет работать неустойчиво). Arduino использует TIMER1 для Servo-библиотеки.
Смежные вопросы
- 1. Arduino Uno PWM контакты конфликт
- 2. Arduino Uno PWM - Странные результаты
- 3. Arduino Uno такая же частота на всех выводах PWM
- 4. Arduino uno overheating
- 5. Основы Arduino UNO для C#
- 6. Arduino Uno Timing Issues
- 7. Arduino Due PWM
- 8. Arduino PWM to Android IOIO PWM
- 9. Два ISR на Arduino Uno
- 10. Программа помощи на Arduino Uno
- 11. Нужна помощь Arduino UNO
- 12. Arduino Uno R3 + SIM900
- 13. Выберите случайный вывод pwm в Arduino
- 14. Arduino-uno project
- 15. Adb for arduino UNO
- 16. Arduino Uno array failed
- 17. Arduino Uno - переключатель освещения
- 18. Arduino Uno Код клавиатуры
- 19. Arduino Uno - WebService (AzureML)
- 20. Arduino Uno Serial Monitor
- 21. Загружатель Arduino Uno Rev3
- 22. Arduino UNO последовательной связь
- 23. Ошибка Arduino UNO
- 24. Arduino Uno & NFC Shield
- 25. arduino uno + GSM sim900
- 26. Arduino uno not uploading
- 27. Arduino Uno R3 error
- 28. Arduino Uno - Max Sensors
- 29. Arduino Uno или php
- 30. Arduino считывает частоту импульсов и рабочий цикл с одного цифрового входа
Неверно, вы можете изменять частоту, используя TIMER1 с режимом правильной фазы и частоты. Вы можете выводить частоты от 0,119 до 4 МГц. [Проверить этот ответ] (http://stackoverflow.com/a/41769490/4932683) – cyberponk