Jump to content

Влияние температуры на АЦП в РІС


Терентенко Андрей
 Share

Recommended Posts

Добрый день! Имею следующую ситуацию : на базе  PIC16f676  создал приблуду для "управления нештатной магнитолой с руля", а именно  сигнал с руля это 4,8в и в зависимости от нажатой кнопки падает дискретной до 0.8в мк с помощью АЦП отслеживает  на магнитолу паралельно кнопкам кинул оптрони которыми управляет МК. Питание от LM с фильтрующими конденсаторами. При тестових прогонах всё работало как надо (программно реализовано защиту от дребезга аж на 0.1 сек в поисках решений) и в машине  и от штатного БП . Но заметил закономерность сейчас на улице - 2 и при первом запуске минут 5, МК "шумит" несоотвецтвует нажатия на руле кнопке  на магнитоле ! Сигнал с руля смотрел стабильный без дребезга , притом когда тестил вынес магнитолу подключил всё работало гуд но пока устанавливал закручивал она остыла и начинались эти тацы . Кто что подскажет? МК или ЛМ могут так реагировать на температуру ? Прошу прощения у модераторов за повторение теми (может в этом разделе будет актуальней)

Link to comment
Share on other sites

А схему устройства можно показать?

Как у вас вывод VREF задействован?

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Link to comment
Share on other sites

(исходник проект в протеусе печатка остались на ноуте на роботе) набросал схему от руки , VREF- никак просто весит в воздухе ! Наверное нужно так как на втором фото ? 

IMG_20190117_105417.jpg

IMG_20190117_105852.jpg

Link to comment
Share on other sites

Вебинар «Новые тенденции сетевых технологий: Ethernet по одной витой паре» (09.12.2021)

Приглашаем 9 декабря всех желающих посетить вебинар, посвященный технологии Ethernet и её новому стандарту 10BASE-T1S/L. Стандарт 802.3cg описывает передачу данных на скорости до 10 Мбит в секунду по одной витой паре. На вебинаре будут рассмотрены и другие новшества, которые недавно вошли в семейство технологий Ethernet: SyncE, PTP, TSN. Не останется в стороне и высокоскоростной 25G+ Ethernet от Microchip.

Подробнее

исходник проект в протеусе печатка остались на ноуте на роботе) набросал схему от руки , VREF- никак просто весит в воздухе  (перепроверил в исходнике ) 

            banksel     ADCON1         ; переходим в регистр ADCON1
            movlw       b'00110000'   ;          vcfg-0-VDD        
            movwf       ADCON1        ; -//- ) !

или не так понял ?

 

Edited by Терентенко Андрей
Link to comment
Share on other sites

DC/DC-преобразователи Mornsun со склада Компэл

В сложный период для рынка электронных компонентов, когда производители увеличивают сроки поставки продукции, со склада Компэл можно приобрести широкий ассортимент DC/DC-преобразователей производства компании Mornsun. На складе представлены наиболее популярные семейства изолированных и неизолированных DC/DC-преобразователей новых поколений R3 и R4, а также предыдущего, но по-прежнему востребованного поколения R2.

Подробнее

IMG_20190117_105852.jpg

 

Нет, на vref нужно повесить ион . Например mcp1525. И переделать инициализацию модуля АЦП. И нужно также применять хорошие резисторы в цепи делителя.

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Link to comment
Share on other sites

Новые компоненты STMicroelectronics для учета электроэнергии

Внедрение автоматизированных систем контроля и учета всех видов энергоресурсов, невозможно без инструментов, позволяющих помимо измерения параметров, преобразовывать их для обработки цифровыми интеллектуальными системами. Микросхемы STPM32, STPM33 и STPM34 STMicroelectronics являются наиболее точными и высокопроизводительными представителями своего семейства и способны максимально точно измерять параметры электросети в системах электроснабжения переменного тока, а также осуществлять их первичную обработку. Рассмотрим подробнее их преимущества и средства разработки.

Подробнее

Спасибо ! буду пробовать переделать ! Но мне наверное больше подойдёт 1541+ минимальный делитель, (максимальное измеряемое напряжение 4.85V а опорное с MCP1541= 4.098V ) + переделка АЦП вычислений под делитель... И всё же не могу понять почему если в МК есть возможность привязаться к VDD как опорному почему такие проблемы там градация между кнопками  почти  в 1V (как на меня не мега точность при 10 разрядах)  ,  и почему оно так реагирует на температуру или я неправильно понимаю причину  проблемы? может запитать чем то более стабильным и ровным..?     

Link to comment
Share on other sites

Карбид кремния позволяет повысить КПД и удельную мощность ИБП с двойным преобразованием

Построение источников бесперебойного питания с двойным преобразованием, широко используемых в современных хранилищах данных, на базе карбид-кремниевых MOSFETs производства Wolfspeed позволяет уменьшить мощность потерь в них до 40%, а также значительно снизить занимаемый ими объем и стоимость комплектующих.

Подробнее

46 минут назад, Терентенко Андрей сказал:

Спасибо ! буду пробовать

Господа, вы вообще что тут обсуждаете?  :crazy:

Какой, туды его в качель, ИОН?  :lol2:

Как вообще формируется сигнал на руле? Почему на схеме с руля идет только один проводник? Откуда руль получает питание для формирования сигнала? 

 

Link to comment
Share on other sites

Стоит штатная магнитола с неё на руль идёт питание подсветка кнопок на руле + сами кнопки ! С руля возвращается  на магнитолу для управления ею (от 4.8 до 0.75) в зависимости от нажатой кнопки на руле ! В магнитоле есть канал для подключения телефона (при замыкании определённых контактов в шлейфе магнитола переходит в режим телефон) к нему подключёна периферия которой и должен управлять МК. сигнал с руля берёста в разъёме магнитолы, питание  МК (+-12) тоже с магнитолы . Штатная магнитола работает в штатном режиме и управляться с руля тоже, при зажатии клавиши на руле и удержании более минуты МК  оптроном замыкает и переводит магнитолу в режим телефон (в этом режиме магнитола не реагирует на команды с руля кроме звука +-  а мк управляет схемой подключённой к каналу телефона  ) 

Link to comment
Share on other sites

Вся история с аналоговым интерфейсом кнопок состоит в том, что делитель напряжения на кнопках выполняется по ратиометрической схеме. Сиречь, когда опорное напряжение АЦП и является питанием делителя оных кнопок. Таким образом, на величину опорного напряжения становится БОЛТ ПОЛОЖИТЬ. АЦП измеряет не напряжение, а КОЭФФИЦИЕНТ ДЕЛЕНИЯ в аналоговом делителе кнопок. Никакого ИОН там не требуется. 

Идея с тем, чтобы задействовать входы опорного напряжения не имеет никакого смысла еще и потому, что эти входы придется подключить к АЦП в качестве опоры (в соответствующем регистре), иначе АЦП их проигнорирует. Но это так, лирическое отступление.

Что касается линии сигнала, то ИМЕННО НА ДЕЛИТЕЛЬ должны идти ТРИ ВЫДЕЛЕННЫХ проводника - общий, питание, сигнал - (причем их желательно свить, поместить в экран, который соединить с общим АНАЛОГОВЫМ проводником схемы (в районе пина AVss, либо просто Vss, если отдельного вывода AVss у МК не предусмотрено). Никакие другие "общие" проводники и уж тем более "масса" для этого не пригодны от слова СОВСЕМ.

Edited by my504
Link to comment
Share on other sites

11 минуту назад, my504 сказал:

Никакого ИОН там не требуется. 

Это радует! А то я тут уже два часа про ИОН читаю :wacko:

МК вместе с схемой размещены  в нутри самой магнитолы длина проводов не более 4 см . 

 

Основной вопрос почему (шум, дребезг, шайтан ...) только на холодную если снять магнитолу и подержать в помещении или когда в салоне малость потеплеет то работает как швейцарские часы !!! А на холодную вот такая ерунда !!!!!!!

 

Link to comment
Share on other sites

Я не понимаю как выполнена топология шин от руля к магнитоле, где размещена плата с МК.

Нужен не тот рисунок, что Вы привели выше, а указание на принадлежность земель и питаний участков схемы.  Что откуда берется и куда идет, включая провода на руль и от руля.

И то, что Вы видите никакого отношения к дребезгу не имеет.

Кроме всего прочего, измерения АЦП должны идти сплошным потоком в кольцевой буфер. После каждого измерения нужно находить среднее значение буфера. Оно и будет собственно отфильтрованным значением подлежащем анализу на предмет определения нажатия. Длина буфера должна быть выбрана такой, чтобы достаточно быстро реагировать на кнопку.  Ну, положим, 10...30 мс. Количество измерений в буфере, например, - 16. То есть каждое преобразование должно идти с интервалом 10 мс/16= 525 мкс.

Как то так.

Link to comment
Share on other sites

41 минуту назад, my504 сказал:

Никакого ИОН там не требуется. 

Ну, ну :) расскажите. 

4 минуты назад, Терентенко Андрей сказал:

Основной вопрос почему (шум, дребезг, шайтан ...) только на холодную если снять магнитолу и подержать в помещении или когда в салоне малость потеплеет то работает как швейцарские часы !!! А на холодную вот такая ерунда !!!!!!!

Кстати , эту проблему можно исправить программно . Только конечно если обвязка позволит. 4.8в формируется через делитель? Или питание там 4.8в  .

Если 4.8в через делитель , то можно использовать как калибровку при перепадах температуры . Так как при изменении температуры меняется сопротивление и соответственно напряжение . Программно нужно делать пересчет , чтобы компенсировать "уплывание" напряжения .

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Link to comment
Share on other sites

Только что, artos5 сказал:

Ну, ну :) расскажите. 

А тут и рассказывать нечего. Без ратиометрии эта приблуда работать нормально не будет. А ратиометрии не требуется конкретная опора. Нужна лишь стабильность на интервале преобразования. Но ИОН не гарантирует низкий шум. Поэтому он тут не пришей, ни пристегни.

Link to comment
Share on other sites

2 минуты назад, my504 сказал:

Кроме всего прочего, измерения АЦП должны идти сплошным потоком в кольцевой буфер. После каждого измерения нужно находить среднее значение буфера. Оно и будет собственно отфильтрованным значением подлежащем анализу на предмет определения нажатия. Длина буфера должна быть выбрана такой, чтобы достаточно быстро реагировать на кнопку.  Ну, положим, 10...30 мс. Количество измерений в буфере, например, - 16. То есть каждое преобразование должно идти с интервалом 10 мс/16= 525 мкс.

Усреднение обязательно нужно делать . Можно и каждых 50мс усреднять по 20-40 значений , этого будет достаточно.

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Link to comment
Share on other sites

11 минуту назад, artos5 сказал:

Можно и каждых 50мс усреднять по 20-40 значений

50 мс - это многовато. Могут успевать сформироваться промежуточные значения при росте выходного сигнала фильтра. И 20-40 тоже неудобно. Потребуется деление. значит либо 16, либо 32.

ЗЫ. Кстати. Фильтрация сигнала с аналогового делителя кнопок - это не совсем тривиальная задача. Выход КИХ ФНЧ (с прямоугольным окном), коим и является простое усреднение, дает задержку в половину длины буфера. Ответом на функцию Хевисайда (единичный перепад) будет линейный рост выходного сигнала вплоть до заполнения буфера.  а теперь подумайте что с этим делать... :bye:

Edited by my504
Link to comment
Share on other sites

Ну , я антидребезг всегда делаю на значении 50мс. Когда делал опрос при помощи АЦП , то делал по моему около 50мс.  За этот период 40 опросов и выдача усредненного результата . Можно применить ещё и чуток другой метод:

5 опросов и выдача самого среднего значения. Например так:

100

110

130

120

130

После фильтра

= 120

 

Или выдача максимально одинакового значения:

После такого фильтра:

= 130

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Link to comment
Share on other sites

15 минут назад, my504 сказал:

Кроме всего прочего, измерения АЦП должны идти сплошным потоком в кольцевой буфер. После каждого измерения нужно находить среднее значение буфера. Оно и будет собственно отфильтрованным значением подлежащем анализу на предмет определения нажатия. Длина буфера должна быть выбрана такой, чтобы достаточно быстро реагировать на кнопку.  Ну, положим, 10...30 мс. Количество измерений в буфере, например, - 16. То есть каждое преобразование должно идти с интервалом 10 мс/16= 525 мкс.

Как то так.

Этого автору топика скорее всего (с долей вероятности 95%) будет недостаточно для решения его проблемы. Ему нужно кроме усреднения ввести самокалибровку . И ион лишним кстати не будет :) зря вы забраковали мое предложение (хотя для кнопок возможно ион и избыточен).

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Link to comment
Share on other sites

а можно кусок кода как усреднить в ассемблере ? У меня там  немного примитивно всё 

Скрытый текст



;===============================================
	;програми контроля напряжения на руле
   ;===============================================
	
Prov_V   
    CLRF       FL_KNOPKA ; очистка флагов кнопок перед измерениэм
    
	
    banksel     ADCON0        ; переходим в регистр ADCON0
	nop
    movlw       b'10001101'   ; правое виравнивание включаем модуль АЦП, , AN1 - вход
    movwf       ADCON0        ; -//-  
	
	call        del_20mcs

    bsf         ADCON0,1      ; включаем преобразование АЦП
    btfsc       ADCON0,1      ; ожидаем завершения
    goto        $-1           ; преобразования
 	
	CLRF	ANALIZ_H
	MOVF	ADRESH,0		; Загрузили измеренное значение в регистр
	MOVWF 	ANALIZ_H	
	
;------------------------------------------------------------------------------
	BTFSS   ANALIZ_H,0    ;  измеренное значение в регистр H = 0 (0)
	GOTO   P_X_0               ; бит0=0 на пп проверки бита1
	BTFSC   ANALIZ_H,1    ;  измеренное значение в регистр H = (0) 0
	GOTO   P_1_1               ; бит 1 =1 
	

P_0_1  ;--- бит 1=0 бит 0=1 

	bsf	    STATUS,RP0            ; вибор банка 1
	CLRF	ANALIZ_L
	MOVF	ADRESL,0		; Загрузили измеренное значение в регистр
	MOVWF 	ANALIZ_L
	bcf	    STATUS,RP0            ; вибор банка 0
	ADDLW	D'87'		; Добавили число 87 (проверка напряжениэ  више 2.07v (425))
	BTFSS	STATUS,C
	GOTO   B_1
	B_2
	bsf     FL_KNOPKA,1  ; флаг  "кнопка  (>)   нажата"
	return
	
	
	B_1
	bsf	STATUS,RP0            ; вибор банка 1
	CLRF	ANALIZ_L
	MOVF	ADRESL,0		; Загрузили измеренное значение в регистр
	MOVWF 	ANALIZ_L
	bcf	   STATUS,RP0            ; вибор банка 0
	ADDLW	D'199'		; Добавили число 199 (проверка напряжениэ  више 1.52v (425))
	BTFSC	STATUS,C
	GOTO   A_ret
	
	bsf     FL_KNOPKA,2  ; флаг  "кнопка   (+)   нажата"
	return
	
	A_ret
	bsf     FL_KNOPKA,3  ; флаг  "кнопка   (0)   нажата"
	return
	
	
	
;------------------------------------------------------------------------------


P_1_1  ; пп проверки при бит 1=1 бит 0=1 	
	
    bsf	STATUS,RP0            ; вибор банка 1
	CLRF	ANALIZ_L
	MOVF	ADRESL,0		; Загрузили измеренное значение в регистр
	MOVWF 	ANALIZ_L
	bcf	   STATUS,RP0            ; вибор банка 0
	ADDLW	D'103'		; Добавили число 103 (проверка напряжениэ  више 1.52v (773))
	BTFSS	STATUS,C
	GOTO    pysto  ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	bsf     FL_KNOPKA,4  ; флаг  "кнопка   (p)   нажата"
	return
	
	

	
;=========================================================================================================================================
	
P_X_0               ; пп проверки бита1 при бит0=0	
	
	
	BTFSC ANALIZ_H,1    ;  измеренное значение в регистр H = (0) 0
	GOTO   P_1_0               ; бит 1 =1 
	
P_0_0   ;--- бит 1=0 бит 0=0
    bsf	STATUS,RP0            ; вибор банка 1
	CLRF	ANALIZ_L
	MOVF	ADRESL,0		; Загрузили измеренное значение в регистр
	MOVWF 	ANALIZ_L
	bcf	   STATUS,RP0            ; вибор банка 0
	ADDLW	D'87'		; Добавили число 87 (проверка напряжениэ  више 1v (204))
	BTFSS	STATUS,C
	GOTO A_1
	bsf     FL_KNOPKA,2  ; флаг  "кнопка   (+)   нажата"
	return
	
	A_1
	bsf	STATUS,RP0            ; вибор банка 1
	CLRF	ANALIZ_L
	MOVF	ADRESL,0		; Загрузили измеренное значение в регистр
	MOVWF 	ANALIZ_L
	bcf	   STATUS,RP0            ; вибор банка 0
	ADDLW	D'179'		; Добавили число 179 (проверка напряжениэ  више 0.37v (76))
	BTFSS	STATUS,C
	GOTO	pysto          ;на пп "пусто"
	bsf     FL_KNOPKA,5  ; флаг  "кнопка   (-)   нажата"
	return
;------------------------------------------------------------------------------
    
    P_1_0   ;--- бит 1=1 бит 0=0 
	
	bsf	STATUS,RP0            ; вибор банка 1
	CLRF	ANALIZ_L
	MOVF	ADRESL,0		; Загрузили измеренное значение в регистр
	MOVWF 	ANALIZ_L
	bcf	   STATUS,RP0            ; вибор банка 0
	ADDLW	D'104'		; Добавили число 104 (проверка напряжениэ  више .0v (773))
	BTFSS	STATUS,C
	GOTO   A_2
	bsf     FL_KNOPKA,4  ; флаг  "кнопка   (p)   нажата"
	return
	
	
	A_2
	bsf	STATUS,RP0            ; вибор банка 1
	CLRF	ANALIZ_L
	MOVF	ADRESL,0		; Загрузили измеренное значение в регистр
	MOVWF 	ANALIZ_L
	bcf	   STATUS,RP0            ; вибор банка 0
	ADDLW	D'225'		; Добавили число 225 (проверка напряжениэ  више .v (542))
	BTFSS	STATUS,C
	GOTO  B_2
	
	bsf     FL_KNOPKA,6  ; флаг  "кнопка   (<)  нажата"
	return
	
	
pysto          ;на пп "пусто"
    bsf FL_KNOPKA,7        ; флаг НЕ нажатих кнопок
	return

 


 

а защита от "дребезга " состоит в задержке 0.1 сек (проверки условия флага сработавшей кнопки) с выходом если условие не выполнено  (кнопка скорее будет не нажата чем нажата ) но увы в протэусэ и теории это так а на практике нет!

Link to comment
Share on other sites

27 минут назад, Терентенко Андрей сказал:

а можно кусок кода как усреднить в ассемблере ?

Не знаю как на ассемблере , но на си выглядит так:

Цитата

int filtr(int data, int filtr){

Int filtr_cnt, data_buff;

data_buff+=data;

if(++filtr_cnt>filtr)data=filtr_cnt=0;

return data_buff/filtr;

}

Ps: может быть с ошибками , на скорую и с телефона написал. Но суть ясна .

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Link to comment
Share on other sites

здесь речь скорее идёт не о единичных "проскоках" а о закономерносте! притом повторюсь сигнал с руля стабилен без изменений чётко в пределах 0.05V  колебания!   Впечатление что МК просто те так считает в этот период ! при стабильном сигнале с руля может выдавать команду на один с оптронов постоянно как будто зажата какая то кнопка на руле или при нажатии одной кнопки срабатывает другая ..... и всё это пока не нагрета (проработала минут 5+- ) схема (LM8705 + PIC16f676 +PC817) всё на одной плате. 

2 минуты назад, artos5 сказал:

Не знаю как на ассемблере , но на си выглядит так

В том то и проблема что + - в ассемблере как раз плюнуть умножить пол беды а  делить целая наука, :wacko: ну по крайней мере для меня !

Ех знал бы СИ подпелил бы на ардуинке и не морочил бы вам голову :blink: 

Link to comment
Share on other sites

28 минут назад, Терентенко Андрей сказал:

У меня там  немного примитивно всё 

 у вас там бред какойто написан...  начиная с настройки АЦП:

movlw       b'10001101'   ; правое виравнивание включаем модуль АЦП, , AN1 - вход
movwf       ADCON0        ; -//-  

начнем с того что комментарий не соответствует включенному каналу  АЦП ну да бог с ним,  нахрена вообще правое выравнивание в задаче определения "трех кнопок" , для этого 8бит АЦП выше крыши и на порядок упрощает сам код обработки, самое главное  не настроено тактирование АЦП по дефолту оно у вас в запредельном режиме работает. :spiteful:

 

Link to comment
Share on other sites

 

49 минут назад, IMXO сказал:

не настроено тактирование АЦП

banksel     ADCON1         ; переходим в регистр ADCON1
            movlw       b'00110000'   ; RC- генератор,                  
            movwf       ADCON1        ; -//-

в шапке при инициализации контролера !

 

49 минут назад, IMXO сказал:

комментарий не соответствует включенному каналу  АЦП

в процессе создания печатки изменил с АN1 на АN3 комментарий не поправил ! 

49 минут назад, IMXO сказал:

нахрена вообще правое выравнивание в задаче определения "трех кнопок" , для этого 8бит АЦП выше крыши и на порядок упрощает сам код обработки

Да потому что  я профи в в этом :D:D!  Скорей от глупости точнее от незнания ассемблер и пик знаю на уроне "поморгать светодиодом" ну если так можно сказать ну как мой воспальонний мозг допЁр реализовать задуманное так и написал:wacko: 

почитал примеры там 10бит было вот по аналогии и ...

Edited by Терентенко Андрей
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Сообщения


  • Педальный переключатель, 220В, 10А

  • Similar Content

    • By Filinov Woea
      Схема

      1) Объяснить влияние температуры на параметры усиления каскада
      2) Объяснить влияние температуры на нелинейные искажения
    • By Yahont7
      Здравствуйте коллеги, друзья и единомышленики.
      Вообще моя специфика это электротехника и электрооборудование. Поскольку нередко приходится проектировать и изготовлять различные щиты, управления различного электрооборудования, то есть необходимость в различных контроллерах, которые бы измеряя параметры сети предпринимали те или иные функциональные процедуры. Да сегодня существую различные ПЛК, и прочие устройства под дин рейку на которых можно реализовать все, что угодно. Но к сожалению, либо, они дороги, либо недоступнн. Кроме того вообще ПЛК умеющих "из коробки" измерять сетевое напряжение по всем фазам (не говоря про ток)  в природе пока не встречал. Поэтому к ПЛК, приходится покупать т.н. датчики или измерители сетевых параметров, стоимость которых сопоставима с ПЛК, к тому же растет габарит щита где все это будет стоять. Так или иначе я решил научится делать хотябы простейшие контроллеры, с обычной прошивкой, которые бы могли реализовать все мои предпочтения. 
      Выбрав МК STM32, подобрав схемотехнику внешних интерфейсов и исполнительных устройств.
      Пока, я остановился перед выбором каким образом измерять, сетевое напряжение переменного тока. На первый взгляд почти, все производители реле напряжений используют вот такую схему:
       
      Но мнению специалистов, эта схема плоха наличия невысокого внутреннего сопротивления самого АЦП микроконтроллера.
      Поэтому рекомендуют добавить ОУ в режиме буфера:

      В обоих схемах, измеряемый сигнал смещают на половину питающего/опорного напряжения, в результате теряется один бит точности АЦП.
      Поиск в интернете, навел на следующие материалы:
      1. Диапазон преобразования АЦП микроконтроллера можно расширить вдвое без потери точности. В схеме используются два однопериодных выпрямителя на ОУ, соответственно необходимо два входа АЦП. Соответственно хочется схема по лучше.
      2. Двухполупериодный активный выпрямитель без диодов. Все прекрасно и просто, но рекомендуется использовать дорогой и труднодоступный ОУ. Простые и дешевые ОУ типа МСP6002/4, при моделировании этой, схемы (в Multisim) ее работоспособность не подтвердили. Я был не один, кто хотел ее реализовать, у котов на форуме есть обсуждение этой схемы, но там тоже судя по всему тоже успехов не достигли. Поэтому я продолжил поиск и попал на третий вариант, это...
      3. Учебный материал - Прецизионные выпрямители. Предложенная схема в идеальных условиях (когда на вход подключен генератор сигналов) показала работоспособность в среде Multisim. Однако когда я дочертил высоковольтный делитель, и подал высокое напряжение, то на выходе получил также модуль синусоиды, но его амплитуда была снижена на 35-40%, от того кот. был на выходе резист делителя. В итоге в эту схему я добавил буферный каскад ОУю В итоге, схема обрела следующий вид:

      В этот раз моделирование уже подтвердило ожидаемые результаты:
      - на выходе имеем, модуль синусоиды, причем с той же амплитудой, которая имеется на входном резистивном делителе.
      - если подать напряжение превышающее номинал резист делителя, то на входе МК оно будет срезанным на уровне 3вольт.
      - теперь можно использовать все 12бит АЦП, для оцифровки
      Но получилась схема какая-то громоздкая на один канал напряжения.
      Можно ли ее упростить, и есть ли более простые схемы решающие данную проблему??
       
    • By yakutyonok7
      Нужен аналог индикатора ИЖЦ4-14/7 и АЦП КР572ПВ13. Кто-нибудь может подсказать? Нужно для курсового проекта 
    • By Ivarrr
      Помогите понять где ошибка... не получается реализовать попеременный опрос 2ух каналов АЦП. Данные с одного канала должны передаваться на первый индикатор как напряжение, а со второго, соответственно на второй индикатор как сила тока.
       
      #define F_CPU 8000000U
      #include <avr/io.h>
      #include <avr/interrupt.h>
      #include <stdlib.h>
      #include <util/delay.h>
      #define INDICATOR PORTD
      #define RANK PORTB
      unsigned int UR1=0, UR2=0, UR3=0, UR4=0; //переменные для деления на разряды значения напряжения
      unsigned int IR1=0, IR2=0, IR3=0, IR4=0; //переменные для деления на разряды значения силы тока
      int GainControl=1;
      int current_ch=0;
      float I, U;
      unsigned char voltage, current;
      unsigned int NUMS [10] = {0b11000000, 0b11111001, 0b10100100, 0b10110000, 0b10011001, 0b10010010, 0b10000010, 0b11111000, 0b10000000, 0b10010000}; // от 0 до 9
      int main(void)
      {
          DDRB=0xFF; PORTB=0x00; //ножки порта B для разряда
          DDRC=0x00; PORTC=0x00; //ножки порта C для АЦП
          DDRD=0xFF; PORTD=0xFF; //ножки порта D для индикаторов
          
          TCCR0 |= (1<<CS01); TCCR0 &= ~((1<<CS00) | (1<<CS02)); //настройка частоты таймера f/8
          TIMSK |= (1<<TOIE0); //разрешение прерываний по переполнению таймера
          TCNT0=0; // обнуление счетчика
          
          ADCSRA |= ((1<<ADEN) | (1<<ADSC) | (1<<ADPS2)); // запуск АЦП, запуск преобразования, предделитель 16
          ADCSRA &= ~((1<<ADFR) | (1<<ADIF) | (1<<ADPS1) | (1<<ADPS0)); // режим преобразвания прерывестый, флаг перобразования опущен, предделитель 16
          ADMUX |= ((1<<REFS0) | (1<<REFS1)); //источник опорного напряжения 2.56В
          ADMUX &= ~((1<<ADLAR) | (1<<MUX0) | (1<<MUX1) | (1<< MUX2) | (1<<MUX3)); // направление записи, измерительная ножка ADC0;
          
          sei(); // вкл прерывания
          while (1) 
          {
              if (ADCSRA & (1<<ADIF))
              {
                          U_Convert((U*5.00/1024)*100);
                          I_convert((I*5.00/1024)*100);
              }
          }
      }
      void U_Convert (unsigned int U_num)  //деление на разряды напряжения
      {
          UR1=U_num/100;
          UR2=U_num%100/10;
          UR3=U_num%10;
      }
      void I_convert (unsigned int I_num) //деление на разряды тока
      {    IR1=I_num/100;
          IR2=I_num%100/10;
          IR3=I_num%10;
      }
      ISR (TIMER0_OVF_vect)
      {        
          if (GainControl == 1) {INDICATOR = 0b11111110; RANK = NUMS[UR1];} //отображение 1ого разряда напряжения
          if (GainControl == 2) {INDICATOR = 0b11111101; RANK = NUMS[UR2];} //отображение 2ого разряда напряжения
          if (GainControl == 3) {INDICATOR = 0b11111011; RANK = NUMS[UR3];} //отображение 3ого разряда напряжения    
          if (GainControl == 4) {INDICATOR = 0b11110111; RANK = NUMS[IR1];} //отображение 1ого разряды силы тока
          if (GainControl == 5) {INDICATOR = 0b11101111; RANK = NUMS[IR2];} //отображение 2ого разряды силы тока
          if (GainControl == 6) {INDICATOR = 0b11011111; RANK = NUMS[IR3];} //отображение 3ого разряды силы тока
          GainControl++;
          if (GainControl > 6) GainControl=0; //  мониторинг переменной для управления затворами    
      }
      ISR (ADC_vect) 
      {
          if (current_ch == 0)
            {
                U = ADC;
                voltage = (U*2.56/1024)*100;
                ADMUX |= (1<<MUX0);
                current_ch = 1;
                ADCSRA |= (1<<ADSC);
            }
            else
            {
                I = ADC;
                current = (I*2.56/1024)*100;
                ADMUX &= ~(1<<MUX0);
                current_ch = 0;
                ADCSRA |= (1<<ADSC);
            }
      }
    • By Александр Шилин
      Помогите, пожалуйста, со схемой подключения ПЗС-линейки к микроконтроллеру. Задача заключается в том, чтобы определить координату падения светового пятна, сформированного линзой, в пределах линейки.
      Модель линейки TCD132D на 1024 пикселя.
      Согласно даташиту необходимо три управляющих частоты - M, CCD, SH, питающее напряжение 12 В и опорное 5 В. Все эти условия были выполнены. Данные считываются.
      Выход данных с линейки пока просто выведен на осциллограф (красный канал). 
      Я плохо понимаю физические основы работы ПЗС-линейки, но ее работа кажется мне очень странной и нелогичной.
      1) При равномерной фоновой засветке при считывании получается равномерное низкое напряжение на всех пикселях. (Рисунок 1).
      2) При закрытии части линейки чем-либо напряжение на закрытых пикселях возрастает (Рисунок 2).
      3) При включении фонарика или лазерной указки все пиксели зашкаливают, определить максимум не удается (Рисунок 3).
      Если поместить линейку в темное место и светить очень тусклым лазером, то общий уровень напряжения на пикселях высокий, а в месте попадания света наблюдается едва заметный минимум. Возможно так и должно быть и нужно просто инвертировать и усилить сигнал?
      В чем может заключаться проблема? Как грамотно снимать выходной сигнал с линейки и заводить его на АЦП МК?
      Даташит приложен снизу.




      tcd132d.pdf
×
×
  • Create New...