- •1. Задание на курсовой проект. Требования к структуре и содержанию пояснительной записки
- •Пример построения имитационной модели мпс
- •Пример построения функциональной схемы мпс
- •Пример разработки программного обеспечения мпс
- •Пояснения к выполнению вариантов заданий
- •Формирование сигнала с помощью цап.
- •Цифровой фильтр.
- •6. Справочные материалы
Формирование сигнала с помощью цап.
Пример: сформировать на выходе ЦАП периодический сигнал с заданными параметрами.
Рис.5.14 – Форма сигнала
t1, мс |
t2, мс |
t3, мс |
Um, В |
10 |
15 |
20 |
5 |
Программное обеспечение состоит из двух функций: основной системной функции main и системной функции-обработчика прерывания от Т0 – timer_0. В основной функции выполняется настройка таймера Т0 и системы прерываний, а также заполняется массив кодов ЦАП MasKodDAC[ ].
Циклически, через заданный интервал времени, будет вызываться функция timer_0, в которой будет выдаваться очередной код на ЦАП из массива кодов ЦАП.
Таким образом, задача сводится к тому, чтобы сформировать массив кодов ЦАП и обеспечить прерывание от таймера через заданный интервал времени.
Для заполнения массива кодов ЦАП выполним дискретизацию сигнала.
Аналитическое описание сигнала:
, (1)
Число уровней дискретизации N определяет размер массива кодов ЦАП и ограничено сверху объемом ОЗУ 128 байт. Примем N=100.
Массив кодов ЦАП MasKodDAC[] заполняется следующим образом:
i=0..N–1; (2)
ti=i*dt; (3)
Ui=U(ti); (4)
MasKodDAC[i]=255*Ui/Um. (5)
Период сигнала:
Т = t1+t2+t3 = 10+15+20 = 45 мс. (6)
Шаг дискретизации (интервал времени между срабатываниями Т0:
dt = T/N = 45/100 = 0,45 мс. (7)
Определим значения для перезагрузки счетных регистров таймера:
TH,TL = 65536 – dt[мкс] *7,37/12 =
65536 – 450*7,37/12 = 6526010 = FEEC16. (8)
Листинг программы на Си.
#include<reg51.h>//Подключили библиотеку с описанием SFR регистров МК 8051
//Исходные данные:
#define TH 0xFE
#define TL 0xEC
#define t1 10.0
#define t2 15.0
#define t3 20.0
#define Um 5.0
#define T 45.0
#define N 100
#define dt T/N
//Описание глобальных переменных
data unsigned char MasKodDAC[100];//Массив кодов ЦАП
data unsigned char j;//Счетчик кодов ЦАП
at 0xF000 unsigned char xdata DAC;//Адрес регистра данных ЦАП
//Функция-обработчик прерывания от таймера Т0 ******************************************
void timer_0() interrupt 1
{
TH0=TH;//Перезагрузили счетные регистры начальными значениями
TL0=TL;
DAC=MasKodDAC[j];//Выдали очередной код в ЦАП
j++;//Инкрементировали счетчик кодов ЦАП
if (j==100) j=0;//Проверка на выход за диапазон
}
//Основная системная функция **********************************************************
void main()
{
//Описание локальных переменных
float t;
float U;
unsigned char i;
TMOD=0b00000001;//Настройка таймера
ET0=1;//Разрешили прерывание от Т0
EA=1;//Общее разрешение прерываний
TH0=TH;//Загрузили в счетные регистры начальные значения
TL0=TL;
t=0;
//Цикл формирования массива кодов ЦАП
for(i=0;i<N;i++)
{
if (t<=t1) U=Um*t/t1;
if ((t>t1) && (t<=(t1+t2))) U=Um;
if (t>(t1+t2)) U=Um*(T-t)/t3;
MasKodDAC[i]=255*U/Um;
t=t+dt;
}
TR0=1;//Запуск Т0
while(1);
}
На рис.4 приведены результаты имитационного моделирования работы программы в Proteus.
Рис.5.15 - Осциллограмма выходного напряжения ЦАП