ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
21 июля
451638 Топик полностью
koyodza (07.10.2013 21:31, просмотров: 60) ответил AVF на ну да, не повредит. а что за тонкости?
если хотите часто перезагружать ARR, то либо нужно включать ARPE, либо использовать счёт вниз, а не вверх если хотите минимальный джиттер, то лучше настроить DMA на перезагрузку ARR (и CCRn если нужно), при более слабых требованиях к джиттеру можно было бы вообще перезагружать асинхронно. В варианте с DMA делается буфер нужного размера, куда укладываются рассчитываемые в прерывании по DMA_IT_HT и DMA_IT_TC новые значения. Для тактовой 24МГц и выходного сигнала до 50 кГц я бы сделал буфер на 100 значений. Однако если МК ничем особенным не занят, можно вообще обойтись без DMA, настроить прерывания от TIM_UP и рассчитывать только одно новое значение. Рекомендую начать с этого варианта, потому что он проще в реализации. Вначале "снаружи" нужно посчитать одно из значений для ARR, а потом в DDS (не важно с помощью DMA или вручную) грузить либо это значение, либо на единицу большее (или меньшее) в зависимости от того, было переполнение аккумулятора фазы или нет. Значение прироста фазы тоже рассчитывается вначале, вместе с базовым значением для ARR Размерность аккумулятора фазы можно задать один раз и не трогать. Результат - возможность получения практически произвольных частот с джиттером на уровне одного периода тактовой таймера.