Система измерения давления на основе PSoC CY8C29466
фирмы Cypress и MPX5010 (MPX2010) фирмы Freescale
Алексей ПАНКРАШКИН
[email protected] Дмитрий КИЛОЧЕК Геннадий РЕВИН
В статье рассмотрен вариант создания устройства, контролирующего давление, в частности при проведении медицинского обследования, полосных операциях, а также в медицинском оборудовании, когда давление меняется от атмосферного до 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 (RAM,REL,CON)
Pressure_V: blk 1
LCD_String: blk 9 ;8 characters + '\0'
Hundreds : blk 1 Tens : blk 1 Units : blk 1
area text (ROM,REL)
.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.