Содержание
Урок 1. Первый проект
Урок 2. Управление кнопками
Урок 3. Подключение LCD
Урок 4. Использование ШИМ
Урок 5. Таймеры
Урок 6.1. Статическая индикация
Урок 6.2. Динамическая индикация
Урок 7.1. Генерация звука
Урок 7.2. Генерация звука. Продолжение
Урок 8.1. Передача данных через UART
Урок 8.2. Передача данных через UART. Продолжение»
Урок 9. Передача данных через SPI
Урок 10. Изучение АЦП. Простой вольтметр
Урок 11. Получение синуса при помощи ШИМ
Урок 12. Измерение температуры
Урок 13. Внешние прерывания.
Урок 14. Использование отладчика
Урок 15.1. Управление инкрементальным энкодером
Урок 15.2. Управление громкостью, при помощи энкодера
Урок 16. Управление RGB светодиодом
Урок 17. Использование ИК
Урок 18.1. Знакомство с графическим дисплеем
Урок 18.2 Вывод изображения на графический дисплей
Урок 18.3 Вывод русскоязычного текста
Урок 19. Формирование сигнала, при помощи ЦАП (R2R)
Урок 20. Опрос матричной клавиатуры
Урок 21. Сторожевой таймер
Урок 22.1 Воспроизведение wav. Введение.
Урок 22.2 Воспроизведение wav. Продолжение.
Урок 23.1 Работа с внешней памятью
Урок 23.2 Работа с файловой системой Fat

sin_logoВ уроке 11, мы уже изучали принцип формирования произвольного сигнала, при помощи ШИМ. Однако, у такого метода есть недостаток — низкое быстродействие. Когда необходимо получить высокую скорость применяют цифро-аналоговое преобразование (ЦАП).

Для начала попробуем решить простенькую задачку. Есть схема из резисторов. Два входа и один выход. Как вы думаете сколько уровней напряжения можно получить на выходе?

19-3-2

Рассуждаем логически, вход может быть либо включен, либо выключен, т.е. 2 состояния, количество входов 2. Таким образом, правильный ответ 2^2=4. Рассмотрим эти варианты, в порядке возрастания напряжения на выходе.

Первый вариант получается при подаче на вход1 и вход2 нуля. На выходе, соответственно тоже ноль.

Вариант 2. Самым минимальным напряжение на выходе будет, если подключить источник напряжения к входу1, в этом случае часть тока пойдет через резистор R1, и часть через R3 и R4, соответственно на всех резисторах будет падать напряжение. Расписывать расчет не буду, иначе получится слишком длинно.

19-4-2

Вариант 3. Чуть больше напряжение будет, если подать напряжение на вход2, в этом случае резисторы R2 и R1 оказываются подключены параллельно, так как они имеют одинаковое сопротивление, то их общее сопротивление будет в 2 раза меньше, соответственно напряжение будет падать меньше. Без бумаги видно, что сопротивление цепочки R3, R2, R1 будет 10К, т.е. R4 с R321 будет образовывать делитель из одинаковых резисторов, что и видно на вольтметре.

19-5-2

Следующий вариант. Здесь выходное напряжение будет определяться, только падением напряжения на резисторе R4.

19-6-2

Подобная схема называется R2R. Обратите внимание, что напряжение изменяется с одинаковым шагом. Количество задействованных входов, называется разрядностью ЦАП и  напрямую влияет на количество уровней напряжений на выходе. Если бы у нас было 3 входа, то количество уровней напряжения стало бы 2^3=8. Так как сигнал имеет только определенные уровни, то формировать сигнал можно только ступенчато. Соответственно, чем выше разрядность, тем более плавно мы сможем изменять сигнал на выходе.

Теперь к основной схеме. Задача получить треугольный сигнал. Универсальным решением, на все случаи жизни — использование 8-битного ЦАП, позволяющего получить 256 значений напряжения. Крайне важно, чтобы резисторы имели не большие различия в номиналах, желательно не более 1%.

19-2

#include <mega8.h>
#include <delay.h>
int triangle[10] = {0,1,2,3,4,5,4,3,2,1};
int i=0;
void main(void)
{
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
PORTD=0x00;
DDRD=0xFF;
 
while (1)
      {
       for(i=0;i<10;i++)
       {
       PORTD=triangle[i];
       delay_ms(1);
       };
      };
}

Все просто, есть массив с значениями функции, эти значения по очереди заносятся в порт. Задержка влияет на частоту сигнала. Если необходим точный сигнал задержку можно сформировать, при помощи таймера. Также важно количество используемых значений в функции, оно напрямую будет влиять на результирующую частоту.
Для наглядности пример треугольника использующего 10 значений, и 32.

19-7-2

19-8-2

Поэтому нужно искать компромисс между скоростью и качеством. Подобным образом можно сформировать любой тип сигнала, в том числе, подобный подход применяется при воспроизведении wav файлов. О чем мы поговорим позже.

Прошивка

4 комментария: Урок 19. Формирование сигнала, при помощи ЦАП (R2R).

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Свежие записи
Последние комментарии
  • Загрузка...
Архивы
Счетчик
Яндекс.Метрика