Занятие 4. Среда программирования CodeComposerStudio. Использование симулятора

Среда программирования CodeComposerStudio (CCS) предназначена для создания программного обеспечения, запускаемого на DSP-процессорах фирмы Texas Instruments. CCS содержит все необходимые инструменты для набора и редактирования программ, конфигурирования ядра реального времени DSP|BIOS, получения машинного кода с использованием компилятора языка С, загрузки машинного кода в процессор, запуска и отладки программ, в том числе и в режиме реального времени. CCS позволяет работать как с реальным устройством, так и его моделью в режиме симулятора. Симулятор позволяет заниматься отладкой программного обеспечения без наличия реального процессора, но при этом не поддерживает периферийные устройства на борту процессора и осуществляет вычисления со скоростью, отличной от скорости реального процессора. Таким образом, при работе с симулятором скорость выполнения программы будет в несколько раз меньше (поскольку компьютеру приходится моделировать работу всех системных устройств архитектуры ядра процессора), входные сигналы возможно только смоделировать, выходные сигналы не могут быть физически переданы во внешний мир и могут наблюдаться только по значениям переменных, невозможно смоделировать многозадачность. Однако для отработки логики работы расчетных процедур и некоторых других случаев симулятор оказывается доступным инструментом.

Изначально необходимо с помощью утилиты CodeComposerStudioSetup ввести в CCS применяемые устройства. На рисунке 1 (слева) показано, что CCS может работать с отладочной платой eZdsp и симулятором процессора F2812.

Занятие 4. Среда программирования CodeComposerStudio. Использование симулятора - student2.ru

Рис.1

После запуска CCS в появившемся окне Parallel Debug Manager необходимо выбрать устройство, с которым будет происходить работа (в нашем случае это F2812 Device Simulator, см.рис.2).

Примечание. Для установки драйвера платы eZdsp необходимо воспользоваться диском, поставляемым с платой. Драйвер с диска устанавливается поверх установленной версии CCS.

После запуска основного окна CCS необходимо создать проект, создать текст программы, подключить его к проекту, оттранслировать, загрузить его в память, запустить на исполнение, убедиться в правильности выполнения программы.

Занятие 4. Среда программирования CodeComposerStudio. Использование симулятора - student2.ru

Рис.2

Ниже приведены инструкции по созданию простейшего приложения, позволяющего продемонстрировать работу простейшего цифрового фильтра.

1. Создать проект Project-New… В появившемся окне указать имя проекта, зафиксировать каталог проекта.

2. Создать текстовый файл File-New и ввести в него следующий код программы:

//для использования чисел с плавающей запятой

#include <float.h>

#include <math.h>

//объявление переменных программы

float t=0, //время

u, //входной сигнал

filtr=0, //отфильтрованный сигнал

k0=0.1, // коэффициент фильтра k0

k1=0.9; // коэффициент фильтра k1

void main()

{

while(1)// организация безусловных циклов вычислений

{ // начало цикла

t=t+0.1; // имитация времени

u=50*sin(t)+15*sin(100*t);// входной сигнал

filtr=k0*u+k1*filtr;// отфильтрованный сигнал

} // конец цикла

}

3. Сохранить данный файл под именем sim_1, в качетсве типа файла выбрать из предложенного C/C++ Source file (*.c). Сохранение должно быть выполнено в каталог проекта.

4. Добавить только что сохраненный файл исходного текста программы в проект с помощью меню Project-Add files to project.

5. Добавить в проект аналогичным образом файл библиотеки rts2800.lib

6. Открыть окно настроек CCS через Option-Customize и на закладке Program|Project Load установить галочку для свойства Load Program After Build.

7. Выполнить трансляцию проекта через нажатие F7 или Project-Build. В случае успешного завершения трансляции и компоновки в появившемся окне сообщений будет показано:

----------------------------- sim_1.pjt - Debug ----------------------

Build Complete,

0 Errors, 0 Warnings, 0 Remarks

После чего произойдет загрузка программы в память модели процессора.

8. Если программа содержит ошибки, их необходимо исправить и повторить трансляцию.

9. Для наблюдения за программой необходимо вывести окно WatchWindow, на нем открыть закладку Watch1, в клетки окна ввести переменные u и t.

10. Для наблюдения за формой изменения сигналов необходимо открыть графическое окно через View-Graph-TimeFrequency, в окне настроек сделать изменения согласно приведенному ниже окну (свойства Display Type – Dual Time, Start address – upper display - &u, Start address – lower display - &filtr, Acquisition Buffer Size – 1, DSP Data type – 32-bit floating points, см.рис.3).

11. Для отладки кода необходимо установить точку зондирования. Для этого необходимо щелкнуть левой клавишей мыши по строчке программы «t=t+0.1», затем правой клавишей и в появившемся контекстном меню выбрать Toggle Software Probe Point. Зелено-голубая точка появится слева от строчки, показывая место установки точки зондирования (при выполнении данной строчки будет происходить обновление показаний привязанных к данной точке окон).

12. Для привязки данной точки зондирования к окнам отображения графиков и переменных (WatchWindow) необходимо вызвать окно привязки через Debug-ProbePoints, в появившемся окне щелкнуть мышью по слову NoConnection (для автоматической установки поля Location), после этого в поле Connect To выбрать Watch Window, нажать на окне кнопку Add. Аналогичным образом добавить вывод на графический дисплей. Нажать Ок.

Занятие 4. Среда программирования CodeComposerStudio. Использование симулятора - student2.ru

Рис.3

13. Для перезагрузки программы выполнить Project-Build.

14. Запустить программу клавишей F5 или через Debug-Run.

Результатом работы программы должно быть окно, показанное ниже(графический экран и WatchWindow показывают изменения переменных), см. рис.4:

Занятие 4. Среда программирования CodeComposerStudio. Использование симулятора - student2.ru

Рис.4

Далее показан более сложный пример использования симулятора. В примере показана система позицирования между двумя конечными положениями (лифт на 2 этажа), созданная на основе модели двигателя постоянного тока, ПИ-регулятора скорости, контура положения на базе П-регулятора и логической системы управления.

В примере создается зацикленный расчет работы системы. Происходит моделирование времени, работы двигателя постоянного тока, далее происходит расчет регуляторов скорости и положения, в завершение – система логического управления на основе смены состояний режимов работы в зависимости от координат системы и команд. Пример показывает возможность отладки программного обеспечения без наличия реальной системы управления, при этом затрагиваются основные моменты разработки процедур управления. Нижнее положение соответствует значению «0» в переменной pos, верхнее – «10». Срабатывание кнопок происходит при вводе в соответствующие переменные значения «1».

#include <float.h>// в файле используются расчеты

// с плавающей запятой

// декларирование используемых переменных

float t=0,dt=0.001;

float w=0,i=0,u=0,R=3.6,L=0.034,Mc=1,Me=0,c=1.82,J=0.038,Mload;

float k0=2+0.001/0.01,k1=2,input=0,input_prev=0,output=0,w_error=0;

float w_set=0;

float pos_set=0,pos=0,pos_error;

int down_button=0,stop_button=0,up_button=0,mode=0;

int up_lamp=0,down_lamp=0,down_move_lamp=0,up_move_lamp=0;

void main()// процедура расчета

{

m1: // начало цикла

// модель времени

//--------------------------------------------------------------------

t=t+dt;

// модель двигателя постоянного тока

//--------------------------------------------------------------------

i=i+(u-R*i-c*w)/L*dt; // вычисление тока

Me=i*c;// вычисление крутящего момента

w=w+(Me-Mload)/J*dt;//вычисление скорости

pos=pos+w*0.1;//вычисление положения

// модель реактивной нагрузки (лифт с противовесом)

//--------------------------------------------------------------------

if (w<0) Mload=-Mc;else

if (w>0) Mload=Mc;else Mload=0;

// регулятор скорости

//--------------------------------------------------------------------

w_error=w_set-w;// расчет ошибки

input=w_error;// передача сигнала ошибки на вход регулятора

output=output+k0*input-k1*input_prev;// расчет регулятора

input_prev=input;//запоминание текущего значения как

// предыдущего

// для следующего цикла расчета

if (output>220) output=220; // ограничение

// максимального значения

if (output<-220) output=-220;

u=output; //соединение сигнала регулятора

// и напряжение якоря двигателя

// регулятор положения

//--------------------------------------------------------------------

pos_error=pos_set-pos;// расчет ошибки

w_set=pos_error*0.25;// расчет положения

// и передача задания на

// регулятор скорости

// управление сигнализацией положения

//--------------------------------------------------------------------

if (pos<1) down_lamp=1;else down_lamp=0;// лампа

//нижнего положения

if (pos>9) up_lamp=1;else up_lamp=0; // лампа

//верхнего положения

// режим работы «остановлен»

//--------------------------------------------------------------------

if (mode==0)

{

pos_set=pos_set;

u=0;//обесточиваем двигатель

w_set=0;//останавливаем регулятор скорости

down_move_lamp=0; // выключили лампы

// движения вниз

up_move_lamp=0; // выключили лампы

//движения вверх

if (up_button==1) mode=1; //реакция на

//нажатие

//кнопки up

if (down_button==1) mode=2; //реакция

//на нажатие

//кнопки down

if (stop_button==1) mode=0; // реакция

// на нажатие

// кнопки stop

}

// режим подъема

//--------------------------------------------------------------------

if (mode==1)

{

up_move_lamp=1; // включили лампы

//движения вверх

down_move_lamp=0; // выключили лампы

//движения вниз

pos_set=10;// задание целевого положения

if (up_button==1) mode=1; //реакция

// на нажатие

// кнопки up

if (down_button==1) mode=0; //реакция

//на нажатие

// кнопки down

if (stop_button==1) mode=0; // реакция

// на нажатие

// кнопки stop

if (pos>pos_set) mode=0;// требуемое

//положение достигнуто

}

// режим опускания

//--------------------------------------------------------------------

if (mode==2)

{

up_move_lamp=0; // выключили

//лампы движения вверх

down_move_lamp=1; // включили

//лампы движения вниз

pos_set=0; // задание целевого положения

if (up_button==1) mode=0; //реакция

// на нажатие кнопки up

if (down_button==1) mode=2; //реакция

// на нажатие кнопки down

if (stop_button==1) mode=0; // реакция

// на нажатие кнопки stop

if (pos<pos_set) mode=0;//требуемое

//положение достигнуто

}

goto m1;//конец цикла

}

При запуске программы и имитации включения кнопок возможно отслеживание отработки положения и срабатывания ламп сигнализации через окно WatchWindow. На графике, приведенном на рисунке 5, выводятся осциллограммы тока якоря и скорости.

Занятие 4. Среда программирования CodeComposerStudio. Использование симулятора - student2.ru

Рис.5

Внимание!В представленной системе содержатся ошибки различного характера (как минимум 3), которые не позволяют применить разработанную систему для управления реальным лифтом с гарантией обеспечения безопасности доставки груза. В качестве задания для самостоятельной работы предлагается выявить эти ошибки и предложить способы по их устранению, а также установить в данную систему ПИ-регулятор тока

Наши рекомендации