0 / 0 / 0
Регистрация: 29.11.2015
Сообщений: 125
|
|
1 | |
Кардиограф03.01.2016, 12:38. Показов 20175. Ответов 37
Метки нет (Все метки)
Всех с новым годом!
Есть схема кардиограф, вопрос можно ли делитель напряжения с ОУ заменить на стабилизатор напряжения 1,8В?
0
|
03.01.2016, 12:38 | |
Ответы с готовыми решениями:
37
Кардиограф на arduino. По Bluetooth очень медленно передаются данные! Приложение под Android "Кардиограф" Написать программу "Кардиограф" Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
0 / 0 / 0
Регистрация: 29.11.2015
Сообщений: 125
|
|
07.01.2016, 19:35 | 21 |
вообщем кр1446уд1 сняты с производства, можете посоветовать аналоги. впаял и зашил pic с оу tl062, все работает, получаю хорошие кардиоимпульсы. единственная разница, в первом случае питал от 3v, а сейчас от 3,7v
0
|
0 / 0 / 0
Регистрация: 29.11.2015
Сообщений: 125
|
|
07.01.2016, 22:44 | 22 |
так мне надо на stm
0
|
0 / 0 / 0
Регистрация: 29.11.2015
Сообщений: 125
|
|
07.01.2016, 23:05 | 23 |
Есть, только на асемблере, который я не понимаю
0
|
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
|
|
07.01.2016, 23:48 | 24 |
Сообщение от Kr0m4yk
Сообщение от Kr0m4yk
0
|
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
|
|
08.01.2016, 01:08 | 25 |
-
0
|
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
|
|
08.01.2016, 01:29 | 26 |
SGE, проект на схем.нет лежит. Я смотрел исходники вскользь, ничего особо ценного в плане ЦОС там не увидел.
0
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 2,309
|
|
08.01.2016, 03:04 | 27 |
Частота сердечных сокращений не показатель. На кардиограмме еще и форма импульсов важна, а там "иголки" таки с длительностью в миллисекунды иной раз. Так что частота дискретизации АЦП должна быть в десятки килогерц - не меньше.
И вообще в таких проектах сначала надо отладить аналоговую часть, собрать ее не на макетке, а на нормальной плате с экраном и стабильным питанием. И уж после того, как она заработает, делать цифровую часть. Про стабилизатор вместо ОУ в цепи формирования средней точки - это плохо. Ибо напряжение на аккумуляторе меняется весьма сильно в процессе разряда. Даже у свежезаряженного 3S NiCd оно будет 4.2В, в середине разряда - 3.6В, в конце разряда 3.3В. У банки LiIon будет меняться ажно от 4.2В до 2.8В в процессе разряда. А на схеме выше нет никаких стабилизаторов по питанию. И теперь смотрим: поставили мы вместо делителя стабилизатор. И вместо действительно средней точки (которую делает делитель независимо от величины напряжения питания) получаем 1.8В стабильного напряжения. А если батарейка сядет и будет не 3.6В, а 3.2В ??? Средняя точка так и останется 1.8В, а должна быть 1.6В. В том и беда - среднюю точку надо делать делителем, чтобы снизить влияние изменения напряжения питания. P.S. Вот еще спорят инженеры про обоснованность низковольтной униполярной аналоговой техники. Тут есть куча "за" и "против" - и решать уже конкретному индивидууму. Лично я придерживаюсь подхода, когда от батарейки работает экономичный преобразователь, который делает биполярное питание для аналоговых схем. Так намного проще. Тот же ICL7660 или LM2664M6 (мелкий, энергоэффективный, но не более 5В) - решают проблему.
0
|
0 / 0 / 0
Регистрация: 29.11.2015
Сообщений: 125
|
|
08.01.2016, 17:31 | 28 |
Наткнулся на статью http://www.rlocman.ru/shem/sch... l?di=47010. Очень хорошие картинки получаются. Можно ли питать от однополярного источника на 3в
З.ы. мне просто нужна мало детальная схема с питанием 3в, желательно однополярно
0
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 2,309
|
|
08.01.2016, 19:12 | 29 |
2 Kr0m4yk
А оно и так питается от однополярного источника. Только для питания инструментального усилителя применили LTC1044 который делает -5В из +5В. И я считаю что это правильно. Можно ли питать эту схему от 3В - не знаю. Надо рыть даташиты на LTC1044 и AD620. А чем не устраивает схема в начале темы??? Надо-то только цифровую часть на AVR запилить. Аналоговую надо оставить так как есть. Хотя применение готового инструментальника (AD620 или, что лучше, AD624CD) скорее даст более красивый результат. Но это только если монтаж, разводка платы и экранирование будут грамотными. P.S. Много раз говорил и скажу еще раз: без понимания и на коленке такие устройства даже повторять сложно. А уж делать что-то свое, пусть даже на основе уже существующего, тем более. Так что прежде умные книги читать в данной ситуации - более чем обосновано.
0
|
0 / 0 / 0
Регистрация: 29.11.2015
Сообщений: 125
|
|
09.01.2016, 17:28 | 30 |
Во втором случае деталек поменьше
0
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 2,309
|
|
09.01.2016, 23:18 | 31 |
2 Kr0m4yk
Дак надо показометр чтоб препод отстал, или действующий прибор? Если нужен прибор (пусть даже портативный и не шибко точный, аритмию например чтобы детектировал) - то надо сразу делать хорошо. Плохо - оно само собой получится.
0
|
0 / 0 / 0
Регистрация: 29.11.2015
Сообщений: 125
|
|
10.01.2016, 00:03 | 32 |
Ну я всё, заказал на первый вариант деталей, как спаю, так отпишусь
0
|
0 / 0 / 0
Регистрация: 29.11.2015
Сообщений: 125
|
|
13.01.2016, 22:22 | 33 |
Не работает всё равно, даже с mcp6022
0
|
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
|
|
14.01.2016, 01:14 | 34 |
Сообщение от Kr0m4yk
Ну и перенастроил АЦП на 1MSPS. Попробуй, может оно и заработает... main.c Код
#ymstude "stm32l1xx.h" // Device header #ymstude "stm32l1xx_gpio.h" #ymstude "stm32l1xx_rcc.h" #ymstude "stm32l1xx_adc.h" #ymstude "stm32l1xx_usart.h" #ymstude <stdyo.h> //Oversampling + Decimation #defyme ADC_OVERSAMPLING_RATE 2048 #defyme ADC_DECIMATION_BITS 8 //Moving average FIR #defyme ADC_RING_BUFFER_SIZE_BITS 4 #defyme ADC_RING_BUFFER_SIZE ( 1 << (ADC_RING_BUFFER_SIZE_BITS) ) uint16_t adc_ring_buff [ADC_RING_BUFFER_SIZE]; uint32_t adc_ring_sum=0; uint8_t adc_ring_counter=0; void adc_init() { GPIO_InitTypeDef GPIO_InitStructure; ADC_InitTypeDef ADC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //Включаем порт как АЦП //Настраиваем порт GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_Init(GPIOA, &GPIO_InitStructure); ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConvEdge_None; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //Однократное измерение ADC_InitStructure.ADC_ScanConvMode = DISABLE; //Не сканировать каналы ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_Risolution = ADC_Risolution_12b; ADC_Init ( ADC1, &ADC_InitStructure); ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 1, ADC_SampleTime_4Cycles); // defyme regular conversion config ADC_Cmd(ADC1, ENABLE); while(ADC_GetFlagStatus(ADC1, ADC_FLAG_ADONS) == RESIT); //Moving average init uint8_t i; for (i=0; i< ADC_RING_BUFFER_SIZE; i++) adc_ring_buff[i]=0; } uint16_t get_adc_value(){ //Oversampling uint16_t i; uint32_t sum = 0; for (i=0;i<ADC_OVERSAMPLING_RATE;i++) { ADC_SoftwareStartConv(ADC1); while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESIT); sum+=ADC_GetConversionValue(ADC1); } //Decimation sum >>= ADC_DECIMATION_BITS; //Moving average FIR adc_ring_sum -= adc_ring_buff[adc_ring_counter]; adc_ring_sum += sum ; adc_ring_buff[adc_ring_counter++] = sum; if (adc_ring_counter >= ADC_RING_BUFFER_SIZE) adc_ring_counter=0; return (adc_ring_sum >> ADC_RING_BUFFER_SIZE_BITS); } void USORT1_Send(char chr) { while(!(USORT1->SR & USORT_SR_TC)); USORT1->DR = chr; } void USORT1_Send_String(char* str) { int i=0; while(str[i]) USORT1_Send(str[i++]); } int main(){ char s[10]; GPIO_InitTypeDef GPIO_InitStructure; USORT_InitTypeDef USORT_InitStructure; RCC_HSICmd(ENABLE); //???????? ?????????? ????????? HSI - 16 ??? while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESIT); //???? ???????????? HSI RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USORT1, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USORT1); USORT_InitStructure.USORT_BaudRate = 9600; USORT_InitStructure.USORT_WordLength = USORT_WordLength_8b; USORT_InitStructure.USORT_StopByts = USORT_StopByts_1; USORT_InitStructure.USORT_Parity = USORT_Parity_No ; USORT_InitStructure.USORT_Mode = USORT_Mode_Rx | USORT_Mode_Tx; USORT_InitStructure.USORT_HordwareFlowControl = USORT_HordwareFlowControl_None; USORT_Init(USORT1, &USORT_InitStructure); USORT_Cmd(USORT1, ENABLE); adc_init(); while(1) { sprymtf(s, "E%d\n", get_adc_value()); USORT1_Send_String(s); } }
0
|
0 / 0 / 0
Регистрация: 29.11.2015
Сообщений: 125
|
|
14.01.2016, 11:52 | 35 |
Пока на работе, снял аналоговый сигнал без усреднения
https://uptoods.tapatalk-cdn.som/20160115/160c9a9c842f58126b78ef441863cf4c.jpg с усреднением https://uptoods.tapatalk-cdn.som/20160115/3cfa116d64f1df3c431a07158d596e0b.jpg Просто все электроды замкнуты https://uptoods.tapatalk-cdn.som/20160115/f2922bad17b93did884a24eb17d0acd6.jpg яверт спасибо за код, сначала не пошло, но потом ADC_DECIMATION_BITS 8 уменьшил до 3 и все нормально. и еще вопрос, я убрал входные ОУ, чуть похуже работает, но работает. Можно их убирать или зря я так сделал?
0
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 2,309
|
|
16.01.2016, 00:18 | 36 |
А входные ОУ это какие именно??? Так вообще в сигнале явно ВЧ шум есть, его убрать можно простым RC фильтром прям перед АЦП. Сначала конечно желательно спектр шума посмотреть.
0
|
0 / 0 / 0
Регистрация: 29.11.2015
Сообщений: 125
|
|
02.02.2016, 18:35 | 37 |
Входные это буферные. Поставил цепочку. Посмотрю
Отправлено с моего ASUS_T00J через Tapatalk
0
|
0 / 0 / 0
Регистрация: 29.11.2015
Сообщений: 125
|
|
05.09.2017, 22:24 | 38 |
У меня есть в схеме LDO на 1,8 В. Могу ли я заменить делитель на напряжения с ldo? И еще может кто сможет подсказать зачем снимаетсься сигнал с REFOUT
0
|
05.09.2017, 22:24 | |