Розроблення цифрового диктофону

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКТА
Факультет:
ЗІ
Кафедра:
Не вказано

Інформація про роботу

Рік:
2015
Тип роботи:
Розрахункова робота
Предмет:
Системи запису та відтворення інформації
Варіант:
5

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА"  Розрахункова робота з курсу: "Системи запису та відтворення інформації" на тему: “Розроблення цифрового диктофону” Варіант №5 Львів – 2015р. Мета роботи: Закріпити отримані теоретичні знання на практиці; розробити цифровий диктофон і отримати навички розробки пристроїв, які можна використовувати в системах запису і відтворення інформації. Завдання: Розробити принципову електричну схему цифрового диктофону згідно завдання та навести усі необхідні розрахунки. Скласти специфікацію елементів схеми. Навести АЧХ розрахованого мікрофонного підсилювача + фільтра. Написати на мові MatLab або C функції запису файлу у MMC/SD-карту, на якій встановлена файлова система FAT16. Написати на мові MatLab або C функцію запису файлу у wav-форматі. Розрахувати орієнтовну споживну потужність диктофону та час неперервної роботи від заданого джерела живлення. Завдання: Варіант Тип джерела живлення Частота дискретизації, Гц Степінь стиску Час запису, год Тип мікрофону Мікрофонний підсилювач + фільтр  5 LIR3048 8000 8 350 Електрентний Варіант 1   Розробити принципову електричну схему цифрового диктофону згідно завдання та навести усі необхідні розрахунки. Оцінка споживаної потужності компонентів диктофону Знаходимо небхідний об’єм NAND – Flash пам’яті: час запису = 350год; кількість вибірок = 8000; компресія = 8; об’єм пам’яті =  З таблиці 7.1 вибираємо мікросхему K9G8G08U0M (Samsung) з організацією 1Gb x 8. Таблиця 1 Елементи схеми Споживаний струм, мА  Мікроконтролер ≤ 10  MMC/SD карта пам’яті ≤ 100  Мікросхема NAND-Flash пам’яті ≤ 30  Мікрофон ≤ 1  ОП та пасивні елементи ≤ 5  Світлодіоди та органи управління ≤ 10  Кола управління живленням ≤ 5  Всього ≤ 161 мА  Отже кола живлення будуть розраховані на струм навантаження не менше 200 мА. Вибираємо робочу напругу живлення елементів диктофону Таблиця 2 Елементи схеми Напруга живлення, В  Мікроконтролер 2.7-3.6  MMC/SD карта пам’яті 2.7-3.6  Мікросхема NAND-Flash пам’яті 2.7-3.6  Мікрофон 2.0-10.0  ОП 2.7-8.0  Світлодіоди 2.0  Приймаємо робочу напругу VCC = 3.3 В 1.3 Вибираємо мікросхеми для формування напруг живлення елементів схеми Оскільки батарея типу LIR3048 забезпечує напругу в діапазоні 2.75 – 4.2 В, а робоча напруга схеми 3.3 В, то необхідно взяти два LDO – стабілізатори, для роз’єднання аналового та цифрового кіл живлення. В одному візьмемо вихідну напругу рівну 3.0 В (LDO – стабілізатор LP3985IBP-3.0), а в іншому - 2.7 В (LDO – стабілізатор LP3985IBP-2.7) 1.4 Синтез принципової схеми кіл живлення та розрахунок її параметрів На підставі типових схем включення, наведених в DataSheet, синтезуємо принципову схему кіл живлення (Рис. 1). Рис. 1. Схема електрична принципова кіл живленння Живлення аналогових кіл мікрофону та підсилювача здійснюється від напруги AVCC=2.7 B, яка формується LDO-стабілізатором DA2, а цифрових – від напруги AVCC=3.0 B, яка формується LDO-стабілізатором DA1 . Згідно рекомендацій Data Sheet вибираємо для кожного LDO – стабілізатора керамічні котушки з ємністю : С5 = 1мкФ (SMD - конденсатор, 0805, 10%, 10 В, X7R); С6 = 1мкФ (SMD - конденсатор, 0805, 10%, 10 В, X7R); С7 = 1мкФ (SMD - конденсатор, 0805, 10%, 10 В, X7R); С8 = 1мкФ (SMD - конденсатор, 0805, 10%, 10 В, X7R); С9 = 1мкФ (SMD - конденсатор, 0805, 10%, 10 В, X7R); С10 = 1мкФ (SMD - конденсатор, 0805, 10%, 10 В, X7R); Синтез схеми мікрофонного підсилювача та фільтра Визначаємо необхідний коефіцієнт підсилення схеми. Для цього приймемо, що максимальний рівень звукового тиску SPL (Sound Pressure Level) становить 100 дБ. Знаходимо абсолютне значення звукового тиску:  При типовій чутливості мікрофону S=-48 дБ (0 дБ=1 В/Па), будемо мати напругу  Оскільки вбудований АЦП мікроконтролера ATmega16 має діапазон перетворення від 0 до AVCC, а сигнал підсилюється відносно середнього рівня AVCC/2, то коефіцієнт підсилення:  Згідно технічних даних мікрофона резистор R1 повинен бути рівний 2.2 кОм. Вибираємо резистор R1 (SMD-резистор, 0805, 5%, 0.125 Вт). Подільник напруги на резисторах R4 та R3 формує напругу зміщення рівну AVCC/2=1.5 В. Вибираємо R3=R4=100 кОм (SMD-резистори, 0805, 5%, 0.125 Вт). Значення ємності конденсатора С2 згідно даних становить 1 мкФ. Вибираємо конденсатор С2=1 мкФ (SMD-конденсатор, 0805, 10%, 16 В, X7R). Коефіцієнт підсилення та смуга пропускання фільтра низьких частот (ФНЧ) задається резисторами R2, R5 та конденсаторами С1, С4. Визначимо частоту зрізу фільтру з теорема Котельникова: . Згідно завдання частота дискретизації становить 8000 Гц. Отже  Приймемо частоту зрізу дещо меншою, оскільки АЧХ фільтра повільно спадає. Отже . Частота зрізу фільтру визначаться за формулою:  Отже  Вибираємо резистор R2=45 Ом (SMD-резистор, 0805, 5%, 0.125 Вт) Коефіцієнт підсилення ФНЧ становить 188 і визначається за формулою:  Звідси  Вибираємо резистор R5=8460 Ом (SMD-резистор, 0805, 5%, 0.125 Вт). Ємність конденсатора С4 визначається за формулою:  Вибираємо конденсатор С4=5 нФ (SMD-конденсатор, 0805, 10%, 16 В, X7R). Резистор R6 та конденсатор C3 утворюють собою додатковий RC-фільтр низьких частот, тому приймаємо їх значення такими: R6=8460 Ом, C3=5 нФ. Вибираємо конденсатор С3=5 нФ (SMD-конденсатор, 0805, 10%, 16 В, X7R) та резистор R6=8460 Ом (SMD-резистор, 0805, 5%, 0.125 Вт).  Рис. 2. Схема електрична принципова мікрофонного підсилювача та фільтра Синтез схеми підключення MMC/SD-карти до МК Мікроконтролер ATmega16 містить вбудований SPI-інтерфейс, який можна використати для підключення до MMC/SD-карти пам’яті (Рис. 4). Призначення виводів МК: Вивід PB4 – #CS. Вивід PB5 – MOSI. Вивід PB6 – MISO. Вивід PB7 – CLK. Вибираємо R13-R17=51 кОм (SMD-резистор, 0805, 5%, 0.125 Вт). В якості SD-слоту X1 вибираємо MMC/SD-слот CCM05-5507 (Рис. 3).  Рис. 3. Схема електрична принципова інтерфейсу з MMC/SD-картою пам’яті  Рис. 4. MMC/SD-слот CCM05-5507 1.7 Синтез схеми підключення MMC/SD-карти до МК Схема підключення NAND-Flash пам’яті до МК наведена на Рис. 6. Для виводів даних І/О0-І/О7 використаємо порт С мікроконтролера, для підключення керуючих виводів – порт D.  Рис. 5. Схема підключення мікросхеми NAND-Flash пам’яті Вибираємо R18=R19=51 кОм (SMD-резистор, 0805, 5%, 0.125 Вт). 1.8 Синтез схеми органів управління та індикації та їх підключення до МК. Для індикації наявності живлення використовується світлодіод червоного кольору LED1 підключений до виводу РВ0 мікроконтролера (Рис. 5). У випадку розряду джерела живлення нижче встановленого порогу світлодіод починає блимати. Режим запису відображається світлодіодом синього кольору LED2, підключеним до виводу РВ1. Запис без компресії – неперервне світіння, з компресією – блимання з частотою 1 Гц.  Рис.6. Кола індикації диктофону Використаємо світлодіоди з низьким споживанням струму: D1 – SML-311UT (SMD-світлодіод, 0603, IF<10 мА) та D2 – SML-311BT (SMD-світлодіод, 0603, IF<10 мА). Вибираємо R20-R21=470 Ом (SMD-резистор, 0805, 5%, 0.125 Вт). В якості перемикача подачі живлення SW1, включення/виключення запису SW2 (вивід РВ2 мікроконтролера) та вибору режиму запису (вивід РВ3 мікроконтролера) застосуємо вертикальні Slide-Switch типу SS-11G05 (0.5 А, 12 В) компанії Wealth Metal Factory Ltd (http://www.wealthmetal.com) – Рис.7.  Рис. 7. Зовнішній вигляд та електрична схема Slide-Switch типу SS-11G05 Схема підключення перемикачів управління до МК наведена на Рис. 8.  Рис. 8. Схема органів управління Вибираємо R22-R23=51 кОм (SMD-резистор, 0805, 5%, 0.125 Вт). Навести АЧХ розрахованого мікрофонного підсилювача + фільтра.  Рис. 9. Ачх розрахованого фільтра та підсилювача  Написати на мові MatLab або C функції запису файлу у MMC/SD-карту, на якій встановлена файлова система FAT16. Програма запису файлу у MMC/SD-карту, на як й встановлена файлова система FAT16: clear all; BytesPerSec = 512; Buffer = zeros(BytesPerSec, 1); s = MMC_SD_Init('D:\Student\SD_512\SD_512.bin');  VBR_Addr = 0; LBA = 0; [Buffer, cl] = MMC_SD_Read_Sector(s, LBA); if (Buffer(511)  </span>~= hex2dec('55')| Buffer(512)  </span>~= hex2dec('AA'))     disp ('VBR FAT Error1'); return; end;  BytesPerSec = Buffer(hex2dec('b') + 1) + 2^8 * Buffer(hex2dec('b') + 2); z = sprintf ('Кількість байт в секторі : %d', BytesPerSec); disp(z) ; SecPerClus = Buffer(hex2dec('d') + 1); z = sprintf ('Кількість секторів в кластері : %d', SecPerClus); disp (z) ;  RsvdSecCnt = Buffer(hex2dec('e') + 1) + 256 * Buffer(hex2dec('f') + 1); z = sprintf ('Кількість зарезервованих секторів від початку карти: %d', RsvdSecCnt); disp (z); NumFATs = Buffer(hex2dec('10') + 1); z = sprintf ('Кількість таблиць FAT:   %d', NumFATs); disp (z); RootEntCnt = Buffer(hex2dec('11') + 1) + 256 * Buffer(hex2dec('12') + 1); z = sprintf ('Кількість записів в кореневому каталозі Root Directory: %d', RootEntCnt); disp(z); TotSec = Buffer(hex2dec('13') + 1) + 256 * Buffer(hex2dec('14') + 1); if TotSec ==0     </span>TotSec = Buffer(hex2dec('20') + 1) + 256 * Buffer(hex2dec('21') + 1) + 2^16 * Buffer(hex2dec('22') + 1) + 2^24 * Buffer(hex2dec('23') + 1); end; z = sprintf ('Загальна кількість секторів MMC/SD-карти: %d', TotSec); disp (z);  SecPerFAT = Buffer(hex2dec('16') + 1) + 256 * Buffer(hex2dec('17') + 1); z = sprintf ('Розм р таблиц FAT y ceктоpax: %d', SecPerFAT); disp (z); if  (Buffer(hex2dec('36')+1)~= 'F'|Buffer(hex2dec('37')+1)~='A'|Buffer(hex2dec('38')+ 1)~= 'T'|Buffer(hex2dec('39') + 1) ~='1'|Buffer(hex2dec('3A')+ 1)~='6')     disp('FAT16 Error'); end; temp = Buffer ((hex2dec('36') + 1):(hex2dec ('3A' + 1))); z = sprintf ('Тип файлової системи: %s', char(temp)); disp (z) ;  FAT_Sect1 = VBR_Addr + RsvdSecCnt; z = sprintf ('Перший сектор FAT1:  %d', FAT_Sect1); disp (z) ; if   (NumFATs > 1)     </span>FAT_Sect2 = FAT_Sect1 + SecPerFAT;     </span>z = sprintf ('Перший сектор FAT2 :  %d', FAT_Sect2);     disp (z) ; end;  RootDir_Sect = VBR_Addr + RsvdSecCnt + SecPerFAT * NumFATs; z = sprintf ('Перший сектор Root Directory:  %d', RootDir_Sect); disp(z) ;  RootDir_SectCnt = RootEntCnt * 32 / BytesPerSec; z = sprintf('Кількість секторів в Root Directory: %d', RootDir_SectCnt); disp (z) ; Data_Sect = VBR_Addr + RsvdSecCnt + SecPerFAT * NumFATs + RootDir_SectCnt; z = sprintf ('Номер сектора початку областіданих: %d',  Data_Sect) ; disp (z) ;  %Шукаємо 1-ий вільний запис в RootDirectory  Byte_F = 1;            % початoк запису в байтах Flag = 0;          % прапорець знаходження вільного запису в RootDirectory  for jj = 1 : RootDir_SectCnt        %в д 1-го до останнього сектору RootDirectory     [Buffer, cl] = MMC_SD_Read_Sector(s, RootDir_Sect + jj - 1);      %читаємо поточний сектор     for ii = 1 : BytesPerSec/32              % лічильник записів         </span>temp = Buffer(1);              % читаємо перший байт            if (temp == 0 | temp == hex2dec('E5'))              </span>z = sprintf('Вільний запис знайдено');             disp(z);                        </span>Free_Sect_RootDir = RootDir_Sect + jj - 1;             </span>z = sprintf('Сектор вільного запису в RootDirectory: %d', Free_Sect_RootDir);             disp(z);                        </span>Free_Num_RootDir = ii;             </span>z = sprintf('Номер вільного запису: %d', Free_Num_RootDir);             disp(z);                        </span>Flag = 1;             break;         end;                </span>Byte_F = Byte_F + 32;       %наступний запис  (1 запис--32байти)        end;        if (Flag == 1)     %файл знайдено         break;     end;    </span>Byte_F = 1;  end; if (Flag == 0)     </span>z = sprintf('Неможливо записати файл: нема вільної памят ');     disp(z);     return;     %вихід з програми end; Our_File = zeros(512,1); %створюємо файл File_Size = length(Our_File ); % довжина файл for i = 1 : ceil(File_Size / (SecPerClus * BytesPerSec))%від 1-го до останнього кластеру файлу     %шукаємо вільний кластер First = 1; Flag = 0; temp = FAT_Sect1; Free_Cluster = 0; for jj = 1 : SecPerFAT      [Buffer, cl] = MMC_SD_Read_Sector(s,  temp + jj - 1);      for ii = 1 : 2 : SecPerFAT * BytesPerSec          </span>free = Buffer (First);          if (Buffer(ii) + 256 * Buffer(ii + 1) == 0)     %якщо кластер вільний                 </span>Flag = 1;                 break;          end;         </span>Free_Cluster = Free_Cluster + 1;      end;           if (Flag ==1)          break;      end; end z = sprintf('1-ий вільний кластер у таблиці FAT: %d', Free_Cluster); disp(z); end; % запис  в FAT  </span>Buffer(ii) = 255;        Buffer(ii + 1) = 255;  </span>wr = MMC_SD_Write_Sector(s,   FAT_Sect1 + jj - 1, Buffer);      % запис  в Rood Directory [Buffer, cl] = MMC_SD_Read_Sector(s, Free_Sect_RootDir); Our_File_1 = zeros (32,1); % м'я файлу Our_File_1(1) = 'N'; Our_File_1(2) = 'A'; Our_File_1(3) = 'M'; Our_File_1(4) = 'E'; Our_File_1(5) = 32; Our_File_1(6) = 32; Our_File_1(7) = 32; Our_File_1(8) = 32; %розширення файлу Our_File_1(9) = 'W'; Our_File_1(10) = 'A'; Our_File_1(11) = 'V'; %номер першого кластеру Our_File_1(28) = fix(Free_Cluster/256); Our_File_1(27) = Free_Cluster - 256 * Our_File(28); % розмір файлу  </span>Our_File_1(29) = 512;  </span>Our_File_1(30) = 0;  </span>Our_File_1(31) = 0;  </span>Our_File_1(32) = 0; Buffer(32*(Free_Num_RootDir-1) + 1 : 32*(Free_Num_RootDir-1) + 1 +31) =Our_File_1; wr = MMC_SD_Write_Sector(s, Free_Sect_RootDir, Buffer);   fclose(s);   Написати на мові MatLab або C функцію запису файлу у wav-форматі. Програма запису файлу у wav-формат : clear all; % відкрити файл для запису [y,Fs,bits]=wavread(D:\laba1\Lab_1_5.wav); d=fopen(D:\laba1\Wav\My.wav','wb');  % заповнити поле RIFF_ID  52494646 fwrite(d, hex2dec('46464952'),'int 32'); % заповнити поле FILE_Length  fwrite(d, 110480, 'int32'); % заповнити поле WAVE_ID   57415645 fwrite(d, hex2dec('45564157'), 'int32'); % заповнити поле FMT_ID   666d7420 fwrite(d, hex2dec('20746d66'), 'int32'); % заповнити поле FMT_Length fwrite(d, 16, 'int32'); % заповнити поле Type 0x0001 - просто вибірки fwrite(d, 1, 'int16'); % заповнити поле Channels >>> Mono = 1, Stereo = 2, fwrite(d, 1, 'int16'); % заповнити поле SamplesPerSec>>> частота дискретизації - Гц  лаб 1 fwrite(d, 11025 , 'int32'); % заповнити поле AvgBytesPerSec >>>   </span>== Channels * SamplesPerSec * BitsPerSample/8 fwrite(d, 11025, 'int32'); % заповнити поле Align  >>> вирівнювання (якщо кількість вибірок не кратна2, в кінці файлу додаються нульове значення). Переважно рівне 0х0001 fwrite(d, 1, 'int16'); % заповнити поле BitsPerSample  >>>    0х0008 - 8 біт на вибірку fwrite(d, 8, 'int16'); % заповнити поле DATA_ID  >>> Завжди рівний "data" =0x64617461 fwrite(d, hex2dec('61746164'), 'int32'); % заповнити поле DATA_Length >>> == NumSamples * Channels * BitsPerSample/8    к-сть вибірок fwrite(d, 110421, 'int32'); %вибірки сигналу for ii = 1 : 110421     fwrite(d,y(ii)*128+128,'uchar'); end; fclose(d);   Програма стиснення аудіосигналу з потрібною степінню компресії : [y,Fs,bits]=wavread(D:\laba1\Lab_1_5.wav); % Виводимо основну інформацію про файл Fs; % Частота дискретизації bits; % Біт \ вибірку % Відтворюємо файл в синхронному режимі wavplay(y,Fs,'sync'); [Y, F, B] = wavread(D:\laba1\Lab_1_5.wav '); % Будуємо гістограму hist(Y*128, -128:127) % Обчислюємо ймовірність появи відліків P=hist(Y*128, -128:127) / length(Y); % Оцінюємо досяжну кількість біт на вибірку n(опт) Nopt = 0; for ii=1:256 if(P(ii) > 0) Nopt = Nopt - P(ii)*log2(P(ii)); end;end; ks=bits/Nopt Y = Y * 128; % Операція для цілого Y N = 128; % розмір блоку L = 40; % к-сть збережених коефіцієнтів ДКП на блок nn = fix(length(Y)/N) % к-сть блоків mm = 1; kk = 1; % Компресія for ii = 1 : nn-1 x = dct( Y(kk : kk + N-1) ); y(mm : mm + L-1) = x(1 : L);% В y записуємо лише "великі" відліки mm = mm + L; kk = kk + N; end; % Квантування y = round(y); % До цілого [A, X] = hist(y, min(y) : max(y)); NN = length(y); Ls = 0; for ii = 1 : length(A) if(A(ii) > 0) Ls = Ls + (A(ii)/NN) * log2(A(ii)/NN); end; end; disp('-Ls = '); -Ls CR2 = (7 / -Ls) * (N / L) % CR2 -- cтепінь стиснення % Відновлений сигнал YC = Y * 0; dx = Y(1 : N) * 0; mm = 1; kk = 1 % ...*0 -- це "малі" відліки for ii = 1 : nn - 1 dx(1 : L) = y(mm : mm + L-1); x1 = idct( dx ); YC(kk : kk + N-1) = x1; dx = dx * 0; mm = mm + L; kk = kk + N; end; YC = YC / 128; YC = round(YC * 128) / 128; wavplay(YC, F, 'sync'); Розрахувати орієнтовну споживну потужність диктофону та час неперервної роботи від заданого джерела живлення. Таблиця 1 Елементи схеми Споживана потужність, Вт  Мікроконтролер 0.036  MMC/SD карта пам’яті 0.36  Мікросхема NAND-Flash пам’яті 0.108  Мікрофон 0.01  ОП та пасивні елементи 0.04  Світлодіоди та органи управління 0.02  Кола управління живленням 0.165  Всього 0.739 Вт  Отже орієнтовна споживна потужність диктофону буде рівна 0.739 Вт. Визначаємо час неперервної роботи диктофону від джерела живлення LIR053449А:8  Висновок: В системах захисту широко використовуються прилади призначені для запису та відтворення інформації. Важливою складовою є акустична інформація як така і технічні пристрої призначені для її збору, зберігання та відтворення. На прикладі цифрового диктофону, я отримав основні навички розробки пристроїв що можуть використовуватись в системах запису і відтворення інформації, засвоїв теоретичний матеріал і використав отримані знання на практиці. В роботі я склав електричні схеми складових елементів цифрового диктофону, таких як: Мікрофон і мікрофонний підсилювач; Фільтр; Мікроконтролер з вбудованим 10-бітним АЦП; MMC/SD-карта; NAND-Flash пам’ять; Кола живлення; Органи управління. Також розробив програмне забезпечення необхідне для роботи пристрою.
Антиботан аватар за замовчуванням

24.12.2015 20:12-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!