Система измерения давления на основе PSoC cy8c29466 фирмы Cypress и mpx5010 (mpx2010) фирмы Freescale

Система измерения давления на основе PSoC CY8C29466

фирмы Cypress и MPX5010 (MPX2010) фирмы Freescale

Алексей ПАНКРАШКИН

Alexey.Pankrashkin@macrogroup.ru Дмитрий КИЛОЧЕК Геннадий РЕВИН

В статье рассмотрен вариант создания устройства, контролирующего давление, в частности при проведении медицинского обследования, полосных операциях, а также в медицинском оборудовании, когда давление меняется от атмосферного до 10 кПа. Устройство реализовано на основе датчиков давления фирмы Freescale и программируемой системы на кристалле PSoC фирмы Cypress.

Полупроводниковые датчики давления компании Freescale Semiconductor изготавливаются с использованием технологии МЭМС (формирование микро-механических структур на поверхности кристалла кремния). Датчики разработаны для измерения относительного, дифференциального, абсолютного вакуумного давлений влажных и сухих газов в диапазонах от 2,0 кПа до 0-1 МПа. Устройства созданы на основе чувствительного элемента (преобразователя) X-ducer, представляющего собой Х-образную тензорезистивную структуру на кремниевой мембране. X-ducer имеет хорошие показатели линейности, чувствительности и отношения сигнал/шум. Он монтируется в пластмассовый корпус, который в зависимости от типа измеряемого давления имеет один или два порта подвода давления или выполнен без порта подвода давления. Большинство датчиков давления Freescale Semiconductor содержат элементы температурной компенсации характеристики, калибровки смещения и диапазона, а также схемы нормализации выходного сигнала, реализованные на том же кристалле, что и X-ducer.

В качестве датчиков давления в соответствии с требованиями были выбраны два типа — MPX5010 и MPX2010. Такие датчики являются относительными, они измеряют разность между абсолютным давлением и местным атмосферным давлением. Поскольку MPX5010 имеет встроенный усилитель, то обработка выходного сигнала не представляет особой сложности. Выходной сигнал для этого датчика, соответствующий диапазону от 0 до 10 кПа, находится в диапазоне 0,2-4,7 В при напряжении питания 5 В. В случае использования датчика MPX2010 обработка его выходного сигнала немного усложняется. Датчик MPX2010 оснащен двумя дифферен-

циальными выходами, изменяющимися относительно половины напряжения питания. Выход датчика является масштабируемым и зависит от напряжения питания. При напряжении питания 10 В полный диапазон выходного напряжения, соответствующий диапазону 10 кПа, составляет 25 мВ, а при питании 5 В - 12,5 мВ [1, 2].

С появлением программируемых систем на кристалле (PSoC) фирмы Cypress разра-

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

став 8-битных микроконтроллеров, например фильтры, усилители, генераторы случайных чисел также можно разместить в этих чипах. Соответственно, одна микросхема PSoC заменяет несколько компонентов схемы, построенной на стандартных микроконтроллерах. Все функции, внутренние соединения, внутренняя конфигурация и даже контакты ввода/вывода перепрограммируются пользователем. Данные системы — идеальный вариант для обработки сигналов с различных типов датчиков. Аналоговая периферия PSoC фирмы Cypress позволяет легко усиливать и оцифровывать аналоговые сигналы. Кроме того, наличие в библиотеке готовых модулей API-функций для управления LCD-индикатором со стандартным протоколом Hitachi HD44780 позволяет без труда осуществить отображение измеряемых величин. Присутствие USB-контроллера в одном кристалле с PSoC позволяет создать гибкую систему с минимальным набором внешних компонентов и реализовать три независимых канала измерения давления на трех датчиках давления MPX5010 или MPX2010 и выводить значения на ЖК-индикатор, сравнивать давление по трем независимым каналам в режиме реального времени на экране PC через USB-интерфейс [3], [4].

Схема оцифровки в PSoC элементарна (рис. 1): 8-битный АЦП интегрирующего типа и буферный усилитель для передачи сигнала от контакта микросхемы к АЦП, что обусловлено архитектурой PSoC.

Зависимость выходного напряжения от давления для датчика MPX5010 имеет следующий вид: Vout = Vs (0,09 х P + 0,02), где Vs — напряжение питания. При Vs, равном 5 В, определить давление по выходному напряжению датчика можно следующим образом: P = (Vout - 0,2)/0,45. Эту зависимость легко задать в программе в табличном виде, предварительно рассчитав значения P для всех выходных значений АЦП. Опорные напряжения для аналоговых блоков и, соответственно, диапазон входных напряжений устанавливается параметром Vref в среде PSoC Designer как Vref = (Vdd/2)±(Vdd/2), то есть размах входного сигнала равен напряжению питания [5]. Библиотечный модуль ADCINC настроен как 8-разрядный АЦП. Выход модуля ADCINC может быть сконфигурирован либо как число со знаком в дополнительном коде (от -127 до +127), либо как беззнаковое двоичное число (от 0 до 254). В данном случае удобен второй вариант, тогда выбор соответствующего значения давления из таблиц осуществляется инструкцией Index процессора M8C. Шаг дискретизации давления при использовании 8-битного АЦП составляет примерно 0,0437 кПа.

include «m8c.inc» ; part specific constants and macros

include «memory.inc» ; Constants & macros for SMM/LMM

; and Compiler

include «PSoCAPI.inc» ; PSoC API definitions for all User Modules

AREA bss

Pressure_V: blk 1

LCD_String: blk 9 ;8 characters + '\0'

Hundreds : blk 1 Tens : blk 1 Units : blk 1

area text

.LITERAL

Pressure_Str:

ASCIZ «Pressure»

Empty_Str:

ASCIZ « «

.ENDLITERAL

export _main _main:

; инициализация LCD, усилителя и АЦП

mov A, INSAMP_MEDPOWER lcall INSAMP_Start

mov A, PGA_MEDPOWER lcall PGA_Start

mov A, ADC_MEDPOWER lcall ADC_Start

mov A, DAC_MEDPOWER call DAC_Start mov A, 13 call DAC_WriteBlind

lcall LCD_Start lcall LCD_Init

;выводим строку «Pressure» на LCD mov A,00h mov X,00h lcall LCD_Position mov A,>Pressure_Str mov X,<Pressure_Str lcall LCD_PrCString

M8C_EnableGInt

.loop:

mov A, 255 mov X, 255 .wait: ; программная задержка dec A jnc .wait dec X jnc .wait

lcall Measure_Pressure ; измеряем давление lcall Show_Pressure ; выводим результат на LCD

jmp .loop ; вечный цикл

; функция измеряет давление Measure_Pressure:

and reg[AMX_IN], 0ЫШ0011 mov A, 1

lcall ADC_GetSamples

.wait_data_1:

lcall ADC_fIsDataAvailable jz .wait_data_1

lcall ADC_wClearFlagGetData mov [Pressure_V], A

ret

; функция выводит результат на LCD Show_Pressure:

; берем из таблицы целую часть рассчитанного значения P mov A, [Pressure_V]

Index Pressure_Table

; переводим число в двоичном виде в десятичное

lcall bin8_to_dec3imp_unsigned mov [LCD_String],[Tens] add [LCD_String], 30h mov [LCD_String+1],[Units] add [LCD_String+1], 30h mov [LCD_String+2],'.'

l берем из таблицы дробную часть рассчитанного значения P mov A, [Pressure_V]

Index Pressure_fr_Table

lcall bin8_to_dec3unp_unsigned

mov [LCD_String+3],[Tens] add [LCD_String+3],30h mov [LCD_String+4],[Units] add [LCD_String+4],30h mov [LCD_String+5],'k' mov [LCD_String+6],'P' mov [LCD_String+7],0

l выводим значение P в десятичном виде на LCD

mov A,01h

mov X,00h

lcall LCD_Position

mov A,>LCD_String

mov X,<LCD_String

lcall LCD_PrString

ret

bin8_to_dec3unp_unsigned:

mov [Hundreds], 0 mov [Tens], 0 .h:

cmp A, 100 jc .t

sub A, 100 inc [Hundreds] jmp .h .t:

cmp A, 10 jc .u

sub A, 10 inc [Tens] jmp .t .u:

mov [Units], A ret

.LITERAL

Pressure_Table:

db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0

db 0,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1, 2,2,2,2, 2,2,2,2

db 2,2,2,2, 2,2,2,2, 2,2,2,2, 2,2,2,3, 3,3,3,3, 3,3,3,3, 3,3,3,3, 3,3,3,3

db 3,3,3,3, 3,3,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,5,5,5

db 5,5,5,5, 5,5,5,5, 5,5,5,5, 5,5,5,5, 5,5,5,5, 6,6,6,6, 6,6,6,6, 6,6,6,6

db 6,6,6,6, 6,6,6,6, 6,6,6,7, 7,7,7,7, 7,7,7,7, 7,7,7,7, 7,7,7,7, 7,7,7,7

db 7,8,8,8, 8,8,8,8, 8,8,8,8, 8,8,8,8, 8,8,8,8, 8,8,8,8, 9,9,9,9, 9,9,9,9

db 9,9,9,9,9,9,9,9, 9,9,9,9, 9,9,9,10, 10,10,10,10, 10,10,10,10, 10,10,10,10, 10,10,10,10

Pressure_fr_Table:

db 0,0,0,0, 0,0,0,0, 0,0,0,4, 8,12,17,21, 26,30,34,39,

43,47,52,56, 61,65,69,74, 78,82,87,91

db 96,0,4 ,4,9, 13, 17 7,22,26, 31,35,39,44, 48,52,57,61, 66,70,74,79,

83,87,92,96, 1,5,9,14, 18,22,27,31

db 36,40,44,49, 53,57,62,66, 71,75,79,84, 88,92,97,1,

6,10,14,19, 23,27,32,36, 41,45,49,54, 58,62,67,71

db 76,80,84,89, 93,97,2,6, 10,15,19,24, 28,32,37,41,

45,50,54,59, 63,67,72,76, 80,85,89,94, 98,2,7,11

db 15,20,24,29, 33,37,42,46, 50,55,59,64, 68,72,77,81,

85,90,94,99, 3,7,12,16, 20,25,29,34, 38,42,47,51

db 55,60,64,69, 73,77,82,86, 90,95,99,4, 8,12,17,21,

25,30,34,39, 43,47,52,56, 60,65,69,74, 78,82,87,91

7,22,26, 7 ,1 13 ,4,9, 95,0,4 db 30,35,39,44, 48,52,57,61, 65,70,74,79,

83,87,92,96, 0,5,9,14, 18,22,27,31

db 35,40,44,49, 53,57,62,66, 70,75,79,84, 88,92,97,1,

5,10,14,19, 23,27,32,36, 40,45,49,54, 58,62,67,71

.ENDLITERAL

1 GND \ LCD VEE 3

GND Vout+ vcc Vout-

2 PRESSURE+ \ 5_ \ LCD RS 6

3 5V \

4 PRESSURE- \ \ LCD D7 7

\ \ LCD D5 8

9V 1

GND 2

D2

IN OUT

GND GND

X

С1

22икф

GND

P0[7] Vdd

P0[5] P0[6]

P0[3] P0[4]

P0[1] P0[2]

P2[7] P0[0]

P2[5] Vref.P2[6]

P2[3] ExtAGND.P2[4]

P2[1] P2[2]

SMP P2[0]

P1[7].SCL XRES

P1[5].SDA P1[6]

PICT ECLK.P1[4]

P1[1].XTLi PI [2]

Vss XTLo.P1[0]

GND 1 v \ GND 1

4 5V 2

\LCD VEE 3

ч LCD RS 4

\LCD RW 5

\ LCD E 6

0,1 мкФ 28 1 5v 7 8 9 10 4LCD_D4 11

27 \ 26 25 24 PRESSURE+

ч 12

23 LCD RW\ ч 13

22 LCD_E \ 4 LCD D7 14

Vss

Vdd

RS

R/W _i

DB0 CO r-

DB1 a

DB2 X

DB3 -C и

DB4 .t;

DB5 1

DB6

DB7

HD44780 X2

\ 5V 1 1 VCC

4 GND 2 2 GND

4 xRES 3 3 xRES

4SSP SCL 4 4 SCL

\ 5 5 SDA

ISSP

Рис. 3

В случае использования датчика МРХ2010 обработка его выходного сигнала немного усложняется. Датчик МРХ2010 имеет два дифференциальных выхода, изменяющихся относительно половины напряжения питания. Выход датчика является масштабируемым и зависит от напряжения питания. При напряжении питания 10 В полный диапазон выходного напряжения, соответствующий диапазону 10 кПа, составляет 25 мВ, а при питании 5 В — соответственно 12,5 мВ. Рекомендованная схема включения, приведенная в [6], реализуется внутри микросхемы Р8оС без использования каких-либо внешних элементов (рис. 2).

Библиотечный модуль инструментального усилителя 1ШАМР реализует первую сту-

пень усиления с коэффициентом 8, а модуль программируемого усилителя PGA — вторую, с коэффициентом усиления 48. Результирующий коэффициент усиления равен 384, при этом диапазон входного сигнала АЦП составляет Vc/2 ±2,4 В. Соответственно значение давления в килопаскалях можно определить по формуле: P = (Vin - 0,1)х10/4,9. При использовании датчика MPX2010 программа практически не изменится — добавится лишь включение модуля INSAMP инструкциями mov A, INSAMP_MEDPOWER и call INSAMP_Start, а также изменится содержимое таблицы рассчитанных значений давления. Шаг дискретизации давления в данном случае составляет примерно 0,0402 кПа.

.LITERAL

Pressure_Table:

db 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,1,1 db 1,1,U, 1,1,1,1, U,U, U,U, U,U, 1,1,1,2,2,2,2,2, 2,2,2,2 db 2,2,2,2, 2,2,2,2, 2,2,2,2, 2,2,2,2, 3,3,3,3, 3,3,3,3, 3,3,3,3, 3,3,3,3

db 3,3,3,3, 3,3,3,3, 3,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4, 4,4,4,4

db 4,4,5,5, 5,5,5,5, 5,5,5,5, 5,5,5,5, 5,5,5,5, 5,5,5,5, 5,5,5,6, 6,6,6,6

db 6,6,6,6, 6,6,6,6, 6,6,6,6, 6,6,6,6, 6,6,6,6, 7,7,7,7, 7,7,7,7, 7,7,7,7

db 7,7,7,7, 7,7,7,7, 7,7,7,7, 7,8,8,8, 8,8,8,8, 8,8,8,8, 8,8,8,8, 8,8,8,8

db 8,8,8,8, 8,9,9,9, 9,9,9,9, 9,9,9,9, 9,9,9,9, 9,9,9,9, 9,9,9,9, 9,9,10,10

Pressure_fr_Table: db 0,0,0,0,

0,0,4,8,

12,16,20,24, 28,32,36,40, 44,48,52,56,

76,80,84,88, 92,96,0,4

db 8,12,16,20,

56,60,64,68, 72,76,80,84, 88,93,97,1

05,09,13,17, 21,25,29,33

db 37,41,45,49,

85,89,93,97, 1,5,9,13,

17,21,25,29, 33,37,41,45, 49,53,57,61

60,64,68,72,

24,28,32,36, 40,44,48,52,

53,57,61,65, 69,73,77,81,

db 65,69,73,77, 81,85,89,93, 97,1,5,9,

13,17,22,26, 30,34,38,42,

46,50,54,58, 62,66,70,74, 78,82,86,90

db 94,98,2,6, 10,14,18,22,

26,30,34,38, 42,46,50,54, 58,62,66,70, 74,78,82,86,

90,94,98,02, 6,10,14,18

db 22,26,30,34, 38,42,46,50, 55,59,63,67,

71,75,79,83, 87,91,95,99, 3,7,11,15,

19,23,27,31, 35,39,43,47

db 51,55,59,63, 67,71,75,79, 83,87,91,95,

99,3,7,11, 15,19,23,27,

31,35,39,43, 47,51,55,59, 63,67,71,75

db 79,83,88,92, 96,0,4,8,

12,16,20,24, 28,32,36,40, 44,48,52,56,

60,64,68,72, 76,80,84,88, 92,96,0,4

.ENDLITERAL

Схема устройства с датчиком МРХ2010 и макет устройства приведены на рис. 3 и 4 соответственно. Авторы статьи не ставили

Рис. 4

перед собой цели описать готовое устройство, а хотели показать на основе практического примера идеологию и преимущества использования систем на кристалле фирмы Cypress, предназначенных для сенсорики и обработки сигналов с различных датчиков. Сейчас изготавливается установочный трехканальный вариант образца устройства с USB-интерфейсом для передачи и обработки данных на PC. Тестирование модели пройдет в Военно-медицинской академии в Санкт-Петербурге.

Литература

1. w ww .freescale.com/webapp/sps/site/ prod_summary.jsp?code=MPX5010&nodeId= 01126990368716

2. w ww .freescale.c om/webapp/sps/site/ prod_summary.jsp?code=MPX2010&nodeId= 01126990368710

3. ww w .macro-peterburg.ru/cypress/PSoC/ PSoC.ht ml

4. w ww.cypress.c om

5. Килочек Д. Проектирование на программируемых системах на кристалле PSoC Cypress // Компоненты и технологии. 2006. № 4.

6. Freescale Semiconductor Application Note AN4010. Low-pressure sensing using MPX2010 series pressure sensors.