Учебно-методическое пособие Томск 2007


Скачать 1.7 Mb.
Название Учебно-методическое пособие Томск 2007
страница 14/16
Тип Учебно-методическое пособие
rykovodstvo.ru > Руководство эксплуатация > Учебно-методическое пособие
1   ...   8   9   10   11   12   13   14   15   16

Использование пакета Матлаб для разработки программного обеспечения сигнального процессора
Ниже будет показано, каким образом возможно создавать программы для DSP TMS320F2812 используя средства Матлаб, в частности приложение Simulink и его блок-бокс Embedded target for TI C2000 DSP. В данном блок-боксе находятся средства конфигурирования системных регистров, регистров периферийных устройств, процедуры библиотеки псевдоплавающей запятой IQmath, процедуры библиотеки управления двигателем DMClib.

Необходимо иметь плату eZdsp2812 и установленные на компьютере MatlabR2006a, CCS3.1

Будет показано, каким образом можно создать программу в среде Simulink/Matlab, позволяющую плавно изменять яркость свечения светодиода платы eZdsp2812, с заданной периодичностью наращивая и снижая яркость свечения светодиода, то есть светодиод будет не загораться/гаснуть, а периодически плавно изменять яркость свечения во времени. Светодиод будет подключен к пину процессора IOPF15, работающего в режиме дискретного выхода. Соответственно будет иметься возможность только либо включить светодиод, либо выключить. Яркость свечения будет изменяться визуально за счет изменения продолжительности включения светодиода за малый период времени. Последовательно изменяя скважность включения светодиода, за этот период времени удастся достигнуть визуального эффекта плавного изменения яркости.

Заданием на яркость свечения будет синусоидальный сигнал с частотой порядка 1 Гц. Параллельно будет запущен пилообразный сигнал высокой частоты (порядка 100 Гц). Сравнивая сигнал синусоиды и пилы, возможно определить время включения светодиода – если пилообразный сигнал больше значения синусоидального, то происходит включение светодиода, если меньше – то выключение. Соответственно светодиод будет «плавно» загораться с частотой 1 Гц.

Подразумевается, что вы уже знакомы с CCS и Симулником (в частности, механизмом создания )

Открываем Simulink, создаем в нем новое рабочее окно.

Находим компонент F2812 eZdsp (см.рисунок), перетаскиваем его в рабочее окно Simulink.



Рис.60
Раскрываем компонент, устанавливаем необходимые настройки согласно рисунку.



Рис.51

Собираем схему моделирования в Simulink согласно рисунку ниже. В ней Subsystem – это подсистема для генерирования синусоидального сигнала на базе процедур с псевдофиксированной запятой из библиотек DMClib и IQmath_lib, Digital Output – готовый драйвер вывода сигнала на дискретную ножку, S-Function builder – блок генерирования пилообразного сигнала посредством S-функции, Relation Operator – стандартный компонент Simulink «если меньше, то…», Scope – стандартный компонент визуализации графиков Simulink.



Рис.62
Драйвер дискретного выхода находится согласно рисунку:



Рис.63
Вытаскиваем его в рабочее окно и двойным щелчком открываем его окно конфигурации, где необходимо выбрать IO port как GPIOF и установить галочку напротив bit14 и снять галочку напротив bit0 (см.рисунок). Последнее означает, что сигнал, пришедший на вход драйвера, будет выдан на ножку GPIOF14, сконфигурированную как дискретный выход.


Рис.64
Генератор пилы собираем через S-function builder, при этом необходимо выставить настройки вычисления кода S-функции как вычисление строго дискретное, с периодичностью 0,001с (см.рисунок)



Рис.65
В закладке Output набираем текст программы генерации пилы:



Рис.66

Для завершения построения S-функции необходимо установить ее имя (в данном случае показано имя sss111) и нажать клавишу Build (перед тем как нажать Build, необходимо в главном окне MatLab в Command Windows прописать mex -setup (обратить внимание на пробелы) и на предложенные вопросы ответить следующее: y, 1, y соответственно).
Переходим к построению блока генерации синусоидального сигнала. Так как вычисления Simulink выполняются в точном формате с плавающей запятой, а имеющийся DSP эффективно работает с целыми числами, собираем генератор синусоидального сигнала на базе процедур с псевдоплавающей запятой.
Рис.67

Примечание: при использовании блока constant необходимо в его свойствах (двойной клик мышью) на закладке Signal Data Types в поле output data type mode выбрать режим single.

Задания на такие процедуры происходят в формате с плавающей запятой, но перед тем как непосредственно передать значение в блок с фиксированной запятой, необходимо выполнить преобразование форматов, что осуществляется блоками Float to IQN.

Для генератора пилообразного сигнала, являющегося заданием изменения угла в диапазоне 0…2 для функции синуса от угла, используем процедуру RampGen из библиотеки DMC_lib (см.рисунок ниже)


Рис.68
Для задания параметров (установить как на рисунке) модуля генератора пилообразного сигнала необходимо также выполнить преобразование форматов, здесь это выполнено в виде подсистемы «преобразователь форматов» (см.рисунок ниже).

Рис.69
Для генерации синусоидального сигнала в функции от изменяющегося во времени угла используем стандартную процедуру генерации тригонометрического сигнала Trig Fcn IQN (см. рисунок ниже).


Рис.70
Для генерации проекта в CCS из Simulink необходимо воспользоваться приложением Matlab с названием Real-Time Workshop. Для этого заходим в настройки меню Simulation, Configuration Parameters рабочего окна в набранной схеме Simulink, выставляем следующие параметры: в поле System target file прописать ti_c2000_grt.tcl (см. рисунок ниже):


Рис.71
Перед тем как запустить генерацию проекта для CCS, существует возможность промоделировать работу будущего кода DSP. Для этого выставляем время моделирования в окне конфигурации как 10 секунд. Также необходимо выставить метод решения как дискретный (поле Solver), величину шага расчета задать как 0,001 секунда. Задание шага расчета также определяет шаг расчета в DSP (период дискретизации расчета). В данном примере с шагом расчета должен совпасть и шаг расчета S-функции.


Рис.72
После запуска моделирования в окне SCOPE появится график, при увеличении которого можно понять принцип изменения скважности (см.рисунок ниже, верхний график – синусоидальное задание на яркость, нижний – генератор пилообразного сигнала для сравнения, средний – результирующее смоделированное мигание светодиода).


Рис.73

Для генерации кода проекта CCS необходимо вызвать окно конфигурации Simulation, Configuration Parameters и, убедившись в настройках согласно рисунку ниже, нажать кнопку Generate code.



Рис.74
При нажатии этой кнопки запускается CCS, в нем создается проект с тем названием, которым была названа модель при создании в приложении Simulink из пакета MatLab, происходит компиляция и загрузка файла в процессор (плата должна быть предварительно подключена и проверена работоспособность). Запустив программу на выполнение в DSP, светодиод начинает визуально постепенно набирать/уменьшать яркость с периодичностью 1 секунда.
В результате было показано, что при программировании DSP можно использовать Simulink для следующих целей:

1. Автоматическое создание проекта с включением всех необходимых файлов

2. Конфигурация системных регистров

3. Конфигурации периферии (была показано конфигурация прерывания таймера и дискретный вывод )

4. Использование стандартных блоков (показан блок больше-равно) для программирования DSP

5. Создание собственных процедур для DSP на основе механизма S-функций

6. Использование псевдоплавающей запятой.

7. Использование процедур специальной библиотеки для управления электродвигателями.
Создание полноценных приложений посредством такого подхода невозможно, однако при быстром создании прототипов программ и проверки работы алгоритмов на основе использования готовых блоков Симулинка, данный подход является весьма полезным.

Примечание: проект для CCS автоматически создается в рабочей директории work пакета MatLab при генерировании кода. Перед повторным генерированием кода одного и того же проекта для исключения появления ошибок старый проект для CCS необходимо удалить вручную из рабочей директории МаtLab work.

При генерации кода в CCS автоматически создается основной файл S-функции следующего содержания (название его зависит от названия S-функции в MatLab, в данном случае это sss111_wrapper.c), который находится в папке проекта Source рабочей директории work:
#if defined(MATLAB_MEX_FILE)

#include "tmwtypes.h"

#include "simstruc_types.h"

#else

#include "rtwtypes.h"

#endif

#include

#define u_width 1

#define y_width 1

void sss111_Outputs_wrapper(const real_T *u0,

real_T *y0)

{

y0[0] = y0[0]+10;

if (y0[0]>150) y0[0]=0;

}

В теле программы (последние две строчки) прописан тот же текст программы генерации пилы, что был прописан нами в S-function builder при создании модели проекта в MatLab.

При генерации кода в CCS автоматически создается код блока «если не то» (Relational Operator) в основном файле eZdsp.c (названием файла является название модели проекта в MatLab), который находится в папке проекта Source рабочей директории work, состоящий из следующих строчек:

// вход на сравнение пилы с синусоидой

/* RelationalOperator: '/Relational Operator' */

eZdsp_B.RelationalOperator = ((real_T)rtb_Sum <= eZdsp_B.SFunctionBuilder);

// выход сигнала сравнения

/* S-Function Block: /Digital Output (c28xgpio_do) */

{

GpioDataRegs.GPFDAT.bit.GPIOF14 = eZdsp_B.RelationalOperator;

}

Опять же при генерации кода в CCS автоматически создается код блока Subsystem (блока генерации синусоидального напряжения на базе процедур с псевдофиксированной запятой из библиотек DMClib и IQmath_lib) в основном файле eZdsp.c, который находится в папке проекта Source рабочей директории work, состоящий из следующих строчек:
/* Model output function */

static void eZdsp_output(int_T tid)

{

/* local block i/o variables*/

real32_T rtb_IQNtoFloat;

real32_T rtb_Sum;

int32_T rtb_FloattoIQN;

int32_T rtb_IQNxIQN;

int32_T rtb_TrigFcnIQN;

int32_T rtb_FloattoIQN_d;

// блок преобразования форматов

/* C28x IQmath Library (stiiqmath_iq) - '/Float to IQN' */

{

rtb_FloattoIQN = _IQ10 (eZdsp_P.k_Value);

}
/* C28x IQmath Library (stiiqmath_iq) - '/Float to IQN1' */

{

rtb_IQNxIQN = _IQ10 (eZdsp_P.smech_Value);

}
/* C28x IQmath Library (stiiqmath_iq) - '/Float to IQN2' */

{

rtb_TrigFcnIQN = _IQ10 (eZdsp_P.frec_Value);

}
// генератор пилообразного сигнала

/* C28x DMC Library (tidmcrampgen) - '/Ramp Generator' */

{

int32_T* angleregPtr = &eZdsp_DWork.RampGenerator_ANGLE_REG;
*angleregPtr += _IQ10mpy (rtb_TrigFcnIQN, _IQ10(0.5));
if (*angleregPtr > _IQ10(1))

*angleregPtr -= _IQ10(1);

else if (*angleregPtr < _IQ10(-1))

*angleregPtr += _IQ10(1);
rtb_FloattoIQN_d = _IQ10mpy (*angleregPtr++, rtb_FloattoIQN) + rtb_IQNxIQN;
if (rtb_FloattoIQN_d > _IQ10(1))

rtb_FloattoIQN_d -= _IQ10(1);

else if (rtb_FloattoIQN_d < _IQ10(-1))

rtb_FloattoIQN_d += _IQ10(1);

}
// процедура генерации тригонометрического сигнала

/* C28x IQmath Library (stiiqmath_iqtrig) - '/Trig Fcn IQN' */

{

rtb_TrigFcnIQN = _IQ10sin(rtb_FloattoIQN_d);

}

// процедура преобразования форматов

/* C28x IQmath Library (stiiqmath_iq) - '/Float to IQN' */

{

rtb_FloattoIQN_d = _IQ10 (eZdsp_P.amplit_Value);

}
//процедура перемножения сигнала амплитуды и тригонометрического сигнала

/* C28x IQmath Library (stiiqmath_iqmpy) - '/IQN x IQN' */

{

rtb_IQNxIQN = _IQ10mpy (rtb_TrigFcnIQN, rtb_FloattoIQN_d);

}
// процедура обратного преобразования форматов

/*C28x IQmath Library (stiiqmath_iqtof) - '/IQN to Float' */

{

rtb_IQNtoFloat = _IQ10toF (rtb_IQNxIQN);

}
// блок суммирования сигналов

/* Sum: '/Sum' incorporates:

* Constant: '/smech sin'

*/

rtb_Sum = rtb_IQNtoFloat + eZdsp_P.smechsin_Value;

}
В данной работе приведено использование процедур с псевдофиксированной запятой из стандартных библиотек DMClib и IQmath_lib MatLab (подключение их показано на 5 странице данной методики).

Цифровая фильтрация на основе FFT-преобразования
FFT-преобразование – один из наиболее эффективных среди классов алгоритмов цифрового преобразования Фурье для N-точек (DFT). В основном, входные последовательности являются комплексными. Комплексное DFT берет два сигнала во временной области размером в N-точек и создает два сигнала размером в N-точек в частотной области:



Рис.75
Также существует так называемое real
FFT-преобразование (т.е. действительное). Отличие его от комплексного заключается в том, что оно подставляет действительные числа для действительных составляющих и нули для мнимых. Поэтому с помощью действительных
FFT-алгоритмов расчет FFT-преобразования действительных входных последовательностей происходит почти в два раза быстрее.



Рис.76

Далее приведен пример использования блока FFT для цифровой фильтрации (программное обеспечение разработано компанией TI). *Для работы с данным преобразованием необходимо установить следующие компоненты: FFT Library и STB Support Library.

Для корректного запуска установленных FFT-проектов из директории C:\tidcs\c28\dsp_tbox\fft\cstb необходимо проделать следующее:

1. Изначально необходимо с помощью утилиты CodeComposerStudioSetup ввести в CCS применяемые устройства. Нужно (как показано на рисунке справа) выбрать симулятор F28xx Simulator Tutorial и переименовать его в окне System Configuration (как показано на рисунке слева) в F28xx Simulator (Texas Instruments) и затем нажать Save&Quit.


Рис.77
2. При запуске CCS и открытии установленных проектов из указанной директории через File– Workspace –Load Workspace… программа выдает следующую ошибку:

GEL: Error loading file 'D:\ti28x\cc\gel\sim2812.gel': function 'StartUp()' already defined – таким образом, необходимо до загрузки проекта удалить уже существующий GEL-файл и либо создать директорию D:\ti28x\cc\gel\sim2812.gel, если CCS установлен на С-диск (примечание: sim2812.gel – General Extension Language File (*.gel)), либо просто перезагрузить его из С:\ti28x\cc\gel\sim2812.gel после открытия проекта, а если CCS установлен на D-диск, то оставить все как есть.

3. После открытия проекта до его компиляции необходимо добавить в него следующие файлы через Project – Add Files to Project…:

Для Real FFT проектов:

Из директории C:\tidcs\c28\dsp_tbox\fft\clib\src файлы rfft32s.asm, rfft32m.asm, rfft32w.asm, cfft32c.asm, cfft32i.asm, rfft32br.asm, rfft32aq.asm.

Для Complex FFT проектов:

Из директории C:\tidcs\c28\dsp_tbox\fft\clib\src файлы cfft32m.asm, cfft32w.asm, fft32z.asm, cfft32c.asm, cfft32i.asm, cfft32aq.asm, cfft32br1.asm и cfft32br2.asm.

Как для Real, так и для Complex FFT-проектов также необходимо добавить следующие файлы:

Из директории C:\tidcs\c28\dsp_tbox\fft\clib\lib файл fft.lib.

Из директории C:\tidcs\c28\stb_lib\lib файл stb.lib.

Из директории C:\tidcs\c28\stb_lib\src файлы DLOG4CHC.ASM, SINTB360.asm, sgti1c.asm.

  1. Далее необходимо откомпилировать проект через Project – Build. В случае успешного завершения трансляции и компоновки в появившемся окне сообщений будет показано:

----------------------------- build.pjt - Debug ------------------------

Build Complete,

0 Errors, 0 Warnings, 0 Remarks.
Ниже приведен пример создания проекта для выделения гармоник основного синусоидального и вторичного шумового сигналов на основе проекта fft512r (где 512 – количество точек расчета).

  1. Проделываем все вышеописанное для проекта fft512r из директории C:\tidcs\c28\dsp_tbox\fft\cstb. То есть разбираемся с GEL-файлом, загружаем сохраненное Workspace под именем build.wks, добавляем необходимые файлы в проект, закрываем уже выведенные окна графиков IPCB: Even Sequence (Real Part) и IPCB: Odd sequence (Imaginary Part).

  2. Компилируем проект через Project – Build или клавишей F7. В случае отсутствия ошибок проект должен содержать представленные на рисунке каталоги и файлы:



Рис.78


  1. Для начала необходимо убедиться в том, что созданный нами проект генерирует синусоидальный сигнал и выделяет его гармонику. Для этого необходимо помимо имеющегося окна графика Magnitude вывести еще одно окно графика через View – Graph – Time/Frequency… и настроить его согласно представленному ниже рисунку:


Рис.79


  1. Далее из каталога Source проекта открываем файл fftrd.c и в теле программы напротив последней строчки устанавливаем точку останова правым кликом мыши, выбрав закладку Toggle Software Breakpoint, а все предыдущие точки останова убираем:



Рис.80


  1. Запускаем программу клавишей F5 или через Debug – Run.

  2. На представленном ниже рисунке приведен результат генерирования синусоиды и величина ее гармоники:



Рис.81


  1. Далее необходимо на полученную синусоиду наложить помехи (шум). Для этого в файл fftrd.c из каталога проекта Source необходимо внести следующие изменения (выделено жирным шрифтом):

#include

#include
/* Create an instance of Signal generator module */

SGENTI_1 sgen = SGENTI_1_DEFAULTS;
/* Create an instance of Signal generator module */

SGENTI_1 sgen2 = SGENTI_1_DEFAULTS;
/* Create an instance of DATALOG Module */

DLOG_4CH dlog=DLOG_4CH_DEFAULTS;

/* Create an Instance of FFT module */

#define N 512

#pragma DATA_SECTION(ipcb, "FFTipcb");

#pragma DATA_SECTION(mag, "FFTmag");
RFFT32 fft=RFFT32_512P_DEFAULTS;

long ipcb[N+2];

long mag[N/2+1];
/* Define window Co-efficient Array and place the

.constant section in ROM memory */

const long win[N/2]=HAMMING512;
/* Create an instance of FFTRACQ module */

RFFT32_ACQ acq=FFTRACQ_DEFAULTS;

int xn,yn;

void main()

{
/* DATALOG module initialisation */

dlog.iptr1=&xn;

dlog.iptr2=&yn;

dlog.trig_value=0x800;

dlog.size=0x400; /* Can log 1024 Samples */

dlog.init(&dlog);
/* Signal Generator module initialisation */

sgen.offset=0;

sgen.gain=0x4CCC; // коэффициент=0.6*2^15

sgen.freq=400; // частота синусоиды

sgen.step_max=10000; // максимальный шаг расчета

sgen2.offset=0;

sgen2.gain=0x3332; // коэффициент=0.4*2^15

sgen2.freq=40000; // частота помех

sgen2.step_max=10000;

// максимальный шаг расчета

/* Initialize acquisition module */

acq.buffptr=ipcb;

acq.tempptr=ipcb;

acq.size=N;

acq.count=N;

acq.acqflag=1;
/* Initialize FFT module */

fft.ipcbptr=ipcb;

fft.magptr=mag;

fft.winptr=(long *)win;

fft.init(&fft);
/*---------------------------------------------------------------------------

Nothing running in the background at present

----------------------------------------------------------------------------*/
while(1)

{

sgen.calc(&sgen);

sgen2.calc(&sgen2);

xn=sgen.out+sgen2.out;

// сигнал синусоиды + сигнал помех

yn=sgen.out+sgen2.out;

// сигнал синусоиды + сигнал помех

dlog.update(&dlog);
acq.input=((unsigned long)xn)<<16;

acq.update(&acq);
if (acq.acqflag==0) // If the samples are acquired

{

RFFT32_brev(ipcb,ipcb,N);

RFFT32_brev(ipcb,ipcb,N);

// Input samples in Real Part
fft.win(&fft);

RFFT32_brev(ipcb,ipcb,N);

RFFT32_brev(ipcb,ipcb,N); // Input after windowing

fft.calc(&fft);

fft.split(&fft);

fft.mag(&fft);

acq.acqflag=1; // Enable the next acquisition

}
}
} /* End: main() */

Таким образом, в данную программу внесены следующие изменения:

  1. для наглядности процесса частота синусоиды снижена с 10000 на 400 и для исключения переполнения разряда коэффициент с 1 снижен до 0,6;

  2. на синусоиду наложены помехи с коэффициентом 0,4 и частотой 40000;

  3. максимальный шаг расчета для синусоиды и помех остается неизменным.




  1. Компилируем проект через Project – Build или клавишей F7.

  2. Далее опять же в файле fftrd.c в теле программы напротив последней строчки устанавливаем точку останова правым кликом мыши, выбрав закладку Toggle Software Breakpoint.

  3. Запускаем программу клавишей F5 или через Debug – Run.

  4. На представленном ниже рисунке приведены результаты генерирования синусоиды и наложенных на нее помех, а также приведены величины их гармоник:



Рис.82
Необходимо также отметить, что исходя из специфики программы суммарный коэффициент не должен превышать 1, иначе произойдет переполнение разряда. Поэтому для того чтобы гармонику помех можно было увидеть на графике, коэффициент помех был увеличен до 0,4, а коэффициент синусоиды был уменьшен до 0,6.

1   ...   8   9   10   11   12   13   14   15   16

Похожие:

Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие Рекомендовано методической комиссией...
Методы молекулярной диагностики: Учебно-методическое пособие. Авторы: А. Д. Перенков, Д. В. Новиков, С. Г. Фомина, Л. Б. Луковникова,...
Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие Елабуга 2016 ббк 74. 58 Учебно-методическое...
Методическое пособие предназначено для студентов 1 курса высших учебных заведений неязыковых специальностей
Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие по клинической фармакологии Оренбург, 2007
Учебно-методическое пособие предназначено для самостоятельной работы студентов медицинских вузов, обучающихся по специальности «Лечебное...
Учебно-методическое пособие Томск 2007 icon Методическое пособие Саратов 2008 г. Организация комплексной системы...
Методическое пособие предназначено для руководителей и преподавателей- организаторов обж образовательных учреждений
Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие
...
Учебно-методическое пособие Томск 2007 icon Организация и технология документационного обеспечения управления учебно-методическое пособие
...
Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие «Учебные игры и ситуационные задачи в...
Учебные игры и ситуационные задачи в гинекологии: Учебно-ме­то­ди­чес­кое пособие / Под ред. А. А. Радионченко. – Томск: Сибгму,...
Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие Казань 2010 Печатается по рекомендации...
Учебно-методическое пособие по курсу «Организационное поведение» /Д. М. Сафина. – Казань: Казанский (Приволжский) федеральный университет;...
Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие. Новосибирск, 2006
Учебно-методическое пособие предназначено инструкторам детско-юношеского и спортивного туризма с целью повышения уровня знаний и...
Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие к лабораторным занятиям по курсу «Основы кристаллооптики»
Практическое руководство по работе с поляризационным микроскопом для исследования петрографических объектов: Учебно-методическое...
Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие организация инженерной защиты населения
Учебно-методическое пособие разработано применительно к Программе обучения слушателей на курсах гражданской защиты Копейского городского...
Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие Санкт-Петербург 2007 Автор: Черемисов...
Учебно-методическое пособие предназначено для подготовки руководящего состава, специалистов гочс и пб, руководителей служб, аварийно-спасательных...
Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие для студентов пм. 04.(07.) «Выполнение...
Учебно-методическое пособие составлено в соответствии с требованиями Федерального Государственного образовательного стандарта по...
Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие санкт-Петербург 2009г. Автор: Г. П. Подвигин...
Учебно-методическое пособие предназначено для должностных лиц, специалистов го и рсчс организаций
Учебно-методическое пособие Томск 2007 icon Учебно-методическое пособие Кемерово 2015 г. Согласовано: кроо «памск»
Учебно-методическое пособие предназначено для студентов стоматологического факультета, гигиенистов стоматологических со средним медицинским...
Учебно-методическое пособие Томск 2007 icon Федеральное государственное образовательное учреждение Высшего профессионального...
Вакуумный практикум: Учебно-методическое пособие.  Ростов-на-Дону, 2008.  55с

Руководство, инструкция по применению




При копировании материала укажите ссылку © 2024
контакты
rykovodstvo.ru
Поиск