PDM контроллер на основі алгоритму дефузії помилки.
[1] http://www.icct.ru/Practicality/Papers/01-11-2010/Invertor-03.php
Модуляція щільності іимпульсів (PDM – Pulse Density Modulation)
Проект розроблено в Altera MAX+plusII.
Download project --> PDM_error_diffusion.rar
Схему принципову PDM модулятора на основі алгоритма дефузії помилки було розроблено на основі інформації [1]. Де алгоритм роботи дуже детально описаний. Цей алгоритм був реалізований в статті на базі мікроконтроллера. Тому в цій статті буде запропонована схема рис.1 реалізації алгоритму для CPLD/FPGA фирми Аltera. Запропонована реалізація схеми вийшла достатньо компактною тому для синтезу схеми в конкретну CPLD достатньо серії MAX3064.
Рис.1 Схема принципова модулятора PDM на основі алгоритму дифузії помилки
Як і в [1] попередній розрахунок було проведено в Excel, файл error_diffusion.xls проекту доданий в архів. На рис. 2 наведено алгоритм роботи і часова діаграма симуляції проекту, з якого видно що при вхідному значенні 60 в комірці С4, бітова комбінація на виході модулятора стовпчик G ( позначено 4) співпадає з результатами часової діагарми, яка наведена під таблицею.
Рис.2 Таблиця із роботою алгоритма і часовою діаграмою.
Для синхронізації елементів схеми , алгоритм роботи було розбито на 4 кроки, відповідно в схемі було введено елемент лічильник prog_counter як мікропрограмний автомат, який синхронізує всі елементи схеми. При цьому вихідна частота модулятора в чотири рази менша в порівнянні із вхідною частотою. Тобто на один вихідний імпульс витрачається чотири вхідних.
Алгоритм роботи (псевдокод):
Крок1. Додаєм вхідне значення із значенням яке записане в регістрі помилки(dff_pdm елемент схеми), якщо в регістрі значення <149 . Якщо значення в регістрі >149 тобто записане відємне число, тоді віднімаєм від вхідного значення , яке записане в регістр помилки, але при цьому число інвертується і додається 1.
Крок2-3. Первірка якщо результат після Кроку1, >50 тоді відняти 100 , якщо <50 і >149 тоді відняти 0.
Крок4. Запис результату в регістр помилки після Кроку2-3.