Шукати в цьому блозі

пʼятниця, 3 серпня 2012 р.

PDM ( Pulse density modulation ) controller, besed on error diffusion algorithm ( Part II ).


 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.


Simple PDM ( Pulse Density Modulation ) controller on CPLD ( Part I ).



Простий PDM (Модуляція щільності імпульсів) контроллер на CPLD MAX3000 Altera.

[1] http://www.icct.ru/Practicality/Papers/01-11-2010/Invertor-03.php
Модуляція щільності імпульсів (PDM – Pulse Density Modulation)

Проект розроблено в Altera MAX+plusII. 
Download project  -->  PDM.rar

В [1] описано дуже детально принцип функціонування PDM і реалізація модулятора на базі мікроконтроллера. В даній статті приведена розроблена схема простого PDM модулятора на основі CPLD Altera  із довжиною кадра в 127 імпульсів. Принципова схема приведена на рис.1. 

Рис. 1 

Основний принцип роботи PDM це рівномірний розподіл вказаної кількості імпульсів по всій довжині кадру. Тому самий простий алгортм роботи пристрою буде, полягати у визначенні кількості кроків - імпульсів "0" між імпульсами "1". Розрахунок було проведено в програмі Excel  файл  проекту pulse_density_moduletion.xls в архіві pdm.rar. На рис.2 зображена таблиця розрахунку і відповідна часова діаграма роботи пристрою. Із за округлення значень  стовпчика D і запису результату в стовпчик F , відповідно в стовпчику G приведеныі значення похибок які потім і  впливають на нерівномірність розподілу. Це видно із результату обчислення і наведеної часвої діаграми для вхідного значення 16 модулятора  PDM. 127/16= 7,9375, після округлення крок між сусідніми імпульсами буде 7 імпульсів, при цьому після 16 імпульсів із значенням "1", буде додано ще 15 "0"-их імпульсів. 

Рис. 2
Схема розроблена так, що вхідні значення відповідають відповідним значенням кроків між імпульсами і записані в таблицю, елемент проекту input_table. При цьому нам потрібно тільки значення першої половини таблиці тобто для довжини кадру в 127 імпульсів нам потрібно від 0 до 63 елементу. Іншу частину результатів можна отримати інвертувавши результат, і  перепризначивши другу половини вхідних значень до першої на рис.2 це стовпчик A і B за це відповідає елемент схеми input_table_inv. Переконатись що такий метод дієвий і працює можна із результатів симуляції схеми на наведених нижче рисунках часових діаграм рис.3 - рис.11. 




Рис. 3




Рис. 4




Рис. 5




Рис. 6




Рис. 7





Рис. 8





Рис. 9 




Рис. 10  



 Рис. 11