Лабораторная работа №3 аналоговые датчики и msp430 launchpad

Лабораторная работа №3 аналоговые датчики и msp430 launchpad

В этой работе мы изучим сопряжение аналоговых датчиков с микроконтроллером серии MSP430. Схема и программа будет

разработана с использованием фото-резистора (LDR) и MSP430 Launchpad. Функционально схема представляет простой измеритель освещенности. Когда освещение LDR превышает установленный порог, LaunchPad включает красный светодиод. Если освещенность LDR ниже этого порога, индикатор не горит. Схема работы будет основываться на микроконтроллере Texas Instruments MSP430G2231.


G2231 поставляется спредустановленным на Launchpad и имеет 10-битный аналого-цифровой преобразователь (АЦП). Код будем разрабатывать с помощью Code Composer Studio от TI (CCS). Принципы, представленные здесь, будут применимы ко многим процессорам MSP430 и могут быть реализованы с использованием других сред программирования.



1. Аналого-цифровое преобразование.



Часто возникает необходимость в робототехнике и других встраиваемых приложениях в обработке реальных аналоговых данных.

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

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

диапазона возможных значений.


Основная функция микроконтроллера при аналого-цифровом преобразовании, сравнить переменное напряжение с опорным напряжением и возвратить число, которое отражает соотношение между ними. Для 10-разрядного АЦП на G2231, это число будет находиться в диапазоне от 0 до 1023. Например, если аналоговый вход 2 вольт, а Launchpad питается от 3,6 Vcc, которое используется в качестве опорного напряжения, то операция АЦП будет возвращать 568, потому что 2 /3.6 это в той же пропорции, как 568/1023.




2. Фотодатчик LDR на основе сульфида кадмия



Датчик из сульфида кадмия (CdS) LDR является основой хоббийных датчиков. Эти датчики легко доступны, недороги и просты в использовании. Электрическое сопротивление в LDR изменяется со светом - чем больше света, попадающего на на поверхность датчика CdS , тем ниже его сопротивление. Существует значительная разница в характеристиках доступных LDR. В большинстве случаев LDR может иметь сопротивление 300 kОм в полной темноте и упасть до 3 kОм в полном свете. Однако на некоторых участках темноты сопротивление может быть в диапазоне МОм или с другой стороны, LDR может иметь падение сопротивления на несколько сотен Ом в полном свете.




Рис 1.1



Хотя мы используем LDR здесь несколько обобщенно, как пример аналогового датчика, эти элементы очень полезны, и вы увидите, как они используются в ряде интересных коммерческих и хобби приложений. В качестве детекторов освещенности они находятся во всем, от датчика солнечного света сада до роботов. Более сложные роботизированные приложения включают в себя отслеживание линии движения, обнаружение движения, зондирование цвета, и зондирование расстояния. CdS LDR даже были использованы для передачи и приема в схемах с использованием модулированного видимого света.




3. Аналоговые датчики и делитель напряжения



Для того, чтобы использовать MSP430 для измерения света, попадающего на LDR, изменение сопротивления должно быть использовано таким образом, чтобы оно производило изменение напряжения - это может быть достигнуто с помощью схемы делителя напряжения. Стандартная схема делителя напряжения показана на на рисунке 1.2.





Рис.3.2 Схема включения датчика освещенности








В этих схемах выход соединен с двумя резисторами и напряжение этого выхода пропорционально величине резисторов. Если два

резистора имеют одинаковое значение, то напряжение на выходе будет составлять половину напряжения на входе. Чем больше сопротивления резистора R1 по отношению к резистору R2, тем ниже напряжению на выходе. Когда LDR используются как резистор R1 в цепи, напряжение на выходе будет увеличиваться по мере увеличения освещенности датчика LDR. Выходное напряжение резистивных схем делителя может быть рассчитано по следующей формуле:





Существует некоторая свобода в выборе правильного значения резистора для R2 в этом проекте - отчасти потому, что нет точного уровня освещенности, который мы знаем, что он запустит схему, и отчасти, потому, что мы будем калибровать цепь в нашей программе позже. Если вам хочется, вы можете проверить LDR с помощью мультиметра на различных уровнях освещенности и выбрать значение резистора близкое к уровню освещенности, на котором вы хотите переключать светодиод LaunchPad . В противном случае, вы можете взять значение грубо «на глазок» выбрав, например значения резистора от 5k до 50k Ом. Как правило, в этих пределах работают резисторы в такой схеме. Если у вас под рукой в вашей коробке с деталями есть резистор 10k или 22k , можно начать и с этих номиналов.




Изображенная на рис. 1.3 иллюстрация LaunchPad, показывает подключение к цепи резисторного делителя напряжения LDR, собранного на макетной плате. Выход схемы делителя идет к контакту 1.7 на LaunchPad,. Питание обеспечивается от 3,6 вольт получаемых через USB разъем подключения к компьютеру.









Рис. 3.3 Подключение датчика освещенности к LaunchPad




4. АЦП и msp430


Модуль ADC10 микроконтроллера MSP430 является мощным и гибким периферическим устройством, которое обеспечивает быстрые и точные аналоговые измерения. Есть множество вариантов настройки, связанных с восемью регистрами модуля, которые обеспечивают этот процесс, чтобы поддерживать большое разнообразие вариантов обработки данных и правильного функционирования в схемах с низким напряжением. Выбор включать в себя множественные источники синхронизации, ссылки на внутренние и внешние опорные напряжения, одноканальные, повторные одноканальные, последовательные и повторяющиеся последовательности режима преобразования.

Хотя все эти варианты могут показаться сложными , в основных приложениях для цифровой обработки, таких, как наш люксометр на MSP430, на самом деле это просто. Здесь мы представим конфигурацию, которая будет полезна для взаимодействия многих простых датчиков и вы,, я надеюсь,сможете его легко понять и интегрировать в свои собственные проекты.



В примере ниже разработана программа с использованием Assembler Code Composer Studio. Если вы не знакомы с синтаксисом MSP430 ассемблера, вам необходимо изучить LaunchPad MSP430 ассемблере Учебное пособие [1] . Большая часть описания здесь будет сосредоточена на настройках регистров и работы модуля АЦП, поэтому информация должна быть в равной степени полезны и при разработке на языке Си.




;------------------------------------------------------------------------------
; Эта программа демонстрирует аналоговое преобразование сигнала
; с фоторезистора (LDR) с использованием отладочной платы MSP430 Launchpad.
; Схема функционирует, как измеритель светового потока. Когда всетовой поток попадает на
; LDR и превышает заданный порог, красный светодиод на плате LaunchPad's включается.
; Когда световой поток на LDR ниже заданного порога LED выключается.
;
; Написано для использования в среде Code Composer Studio
;------------------------------------------------------------------------------

.cdecls C,LIST,"msp430g2231.h" ; cdecls дает указание ассемблеру подключить заголовочный файл Си
;------------------------------------------------------------------------------
; Инициализация MSP430
;------------------------------------------------------------------------------

.text ; старт программы
.global _main ; определение точки входа

_main mov.w #0280h,SP ;инициализация стека
mov.w #WDTPW+WDTHOLD,&WDTCTL ; остановка сторожевого таймера

;------------------------------------------------------------------------------
; Конфигурация управляющих регистров ADC10 - ADC10CTL0 и ADC10CTL1
; ADC10ON = задействован ADC10
; ADC10SHT_2 = выбор частоты преобразования of 16x
; ADC10IE = разрешение прерывания
;------------------------------------------------------------------------------

mov.w #ADC10SHT_2+ADC10ON+ADC10IE,&ADC10CTL0

mov.w #INCH_7,&ADC10CTL1 ;канал 7 настроен на ввод

;------------------------------------------------------------------------------
; Выбор и конфигурация входов и выходов
;------------------------------------------------------------------------------

bis.b #BIT7,&ADC10AE0 ; P1.7 как аналоговый вход A7
bis.b #BIT0,&P1DIR ; P1.0 выход

;------------------------------------------------------------------------------
; Чтение датчика LDR
; Сравнение результата с пороговой величиной
; Включение или выключение светодиода на LaunchPad LED
; Повтор
;------------------------------------------------------------------------------

Mainloop bis.w #ENC+ADC10SC,&ADC10CTL0 ; инициировать преобразование
bis.w #CPUOFF+GIE,SR ; выкл. CPU (Перейти в режим пониженного энергопотребления 0)
; И разрешить прерывания - ждать низкий уровень
; до тех пор, пока преобразование ADC не будет завершено

bic.b #BIT0,&P1OUT ; LED выкл. (P1.0 = 0)
cmp.w #01FFh,&ADC10MEM ; проверка результата ADC Результат сохраняется в ADC10MEM

; снова от порогового значения


jnc Mainloop ; переход, если результат меньше порогового значения
; Замкнутый цикл с выключенным светодиодом

bis.b #BIT0,&P1OUT ; Если результат превышает пороговое значение
; то выкл. светодиод
jmp Mainloop ; начать процесс преобразования снова
;------------------------------------------------------------------------------
; Процедура обслуживания прерывания для прерывания ADC10
;------------------------------------------------------------------------------
ADC10_ISR bic.w #CPUOFF,0(SP) ; когда ADC преобразование завершено
reti ; Выход из режима низкого энергопотребления и возобновление работы
;------------------------------------------------------------------------------
; Векторы прерываний
;------------------------------------------------------------------------------

.sect ".reset" ; MSP430 RESET Vector
.short _main
.sect ".int05" ; ADC10 Vector
.short ADC10_ISR
.end




Процесс преобразования АЦП, разбитый на несколько основных этапов:

Настройка регистров управления ADC10

Инициализация преобразования и установка прерывания, ожидание результатов

Чтение результатов из регистра ADC10MEM
Модуль ADC10 имеет два связанных 16-разрядных регистра управления, ADC10CTL0 и ADC10CTL1, где производится основная часть настроек конфигурации. Начальная настройка для этих регистров происходит в следующих двух строках кода:



mov.w #ADC10SHT_2+ADC10ON+ADC10IE,&ADC10CTL0


mov.w #INCH_7,&ADC10CTL1 ; канал 7 на ввод



Первая строка перемещает значения ADC10SHT_2, ADC10ON и ADC10IE в регистр ADC10CTL0. В таблице ниже показано состояние регистра после этой операции перемещения.




Табл. 4.1 Состояние битов регистра статуса после инициализации конфигурации



Биты Select Reference (SREFx) используются для выбора эталонного напряжения. Эти биты остаются по умолчанию в состоянии «000», что означает, что будет использоваться напряжение источника 3.6 В.


Биты времени выборки и хранения ADC10 (ADC10SHTx) со значением ADC10SHT_2 установленым «10» , которое определяет время выборки в 16 тактов. Процесс аналого-цифрового преобразования не является мгновенным,а занимет несколько тактов. Время, требуемое для точного преобразования, зависит от ряда факторов:


чем выше импеданс (сопротивление) входа, тем больше времени требуется для фазы выборки. В этом случае мы настраиваем задержку в середине диапазона, которая должна хорошо работать приментительно к датчикам LDR и подобным резистивным датчикам.


Включение бита ADC10 (ADC10ON) включает модуль, а бит разрешения прерывания ADC10 (ADC10IE) активирует систему прерываний ADC10.

Два дополнительных бита в этом регистре - бит разрешения включения (ENC) и бит начала преобразования (ADC10SC) - будут задействованы позже в программе.

Вторая строка кода перемещает значение INCH_7 в регистр ADC10CTL1. На диаграмме ниже показано состояние регистра после этой операции перемещения.





Табл. 4.2 Состояние битов регистра статуса после инициализации конфигурации





Биты выбора входного канала (INCHx) выбирают канал для одного преобразования или самый главный канал для последовательности преобразований. В этом случае INCH_7 выбрал «0111» или «7», что соответствует выводу, который мы будем использовать для входа.

Биты выбора источника выборки и хранения (SHSx) остались по умолчанию «00», что означает, что модуль будет использовать состояние бита ADC10SC (а не выход таймера) для запуска процесса выборки.

Биты выбора источника тактового сигнала ADC10 (ADC10SSELx) остались по умолчанию «00», что означает, что модуль будет использовать внутренний генератор ADC10, который работает на частоте около 5 МГц.

Биты выбора режима конверсии (CONSEQx) были оставлены по умолчанию «00», которая выбирает одноканальное одиночное преобразование, простейшее из режимов преобразования. В этом режиме один канал, выбранный INCHx, опрашивается и преобразуется один раз, и результат записывается в регистр ADC10MEM. Для повторной выборки и считывания входного сигнала в программном обеспечении необходимо сбросить бит преобразования при запуске.

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

Следующие две строки программы устанавливают контакты, необходимые для ввода и вывода:


bis.b #BIT7,&ADC10AE0 ; P1.7 как аналоговый вход A7

bis.b #BIT0,&P1DIR ; P1.0 выход




Биты регистра DC10AE0 активируют соответствующий вывод как аналоговый вход. Бит 0 соответствует A0, бит 1 соответствует A1 и т. Д.


Осталось, - выполнить чтение с аналогового входа, который мы настроили, и применить к нему некоторую логику работы программы:



Mainloop bis.w #ENC+ADC10SC,&ADC10CTL0 ; инициировать преобразование
bis.w #CPUOFF+GIE,SR ; выкл. CPU (Перейти в режим пониженного энергопотребления 0)
; И разрешить прерывания - ждать низкий уровень
; до тех пор, пока преобразование ADC не будет завершено

bic.b #BIT0,&P1OUT ; LED выкл. (P1.0 = 0)
cmp.w #01FFh,&ADC10MEM ; проверка результата ADC Результат сохраняется в ADC10MEM

; снова от порогового значения


jnc Mainloop ; переход, если результат меньше порогового значения
; Замкнутый цикл с выключенным светодиодом

bis.b #BIT0,&P1OUT ; Если результат превышает пороговое значение
; то выкл. светодиод
jmp Mainloop ; начать процесс преобразования снова
;------------------------------------------------------------------------------
; Процедура обслуживания прерывания для прерывания ADC10
;------------------------------------------------------------------------------
ADC10_ISR bic.w #CPUOFF,0(SP) ; когда ADC преобразование завершено
reti ; Выход из режима низкого энергопотребления и возобновление работы
;------------------------------------------------------------------------------
; Векторы прерываний
;------------------------------------------------------------------------------

.sect ".reset" ; MSP430 RESET Vector
.short _main
.sect ".int05" ; ADC10 Vector
.short ADC10_ISR
.end



Биты включения преобразования (ENC) и начала преобразования (ADC10SC) в первой строке этого фрагмента кода инициируют преобразование. Следующая строка устанавливает два бита в регистре состояния (SR): бит CPU off (CPUOFF) заставляет микроконтроллер прекратить обработку и устанавливает MSP430 в один из пяти режимов низкого энергопотребления. В то время как режимы с низким энергопотреблением действительно полезны для экономии энергии в приложениях для батарей, в этом случае главным преимуществом является приостановка обработки в ожидании завершения процесса аналогового опроса. Также установлен бит общего разрешения прерывания (GIE). Когда аналоговое преобразование завершено, прерывание ADC10, которое было сконфигурировано ранее, запускается, и поток программы переходит в подпрограмму обслуживания прерывания. (Обратите внимание, что внизу кода в разделе «Векторы прерывания» указано, что метка ADC10_ISR определена как назначение для .int05, который является жестко запрограммированным вектором прерывания для модуля ADC10.) Процедура обслуживания прерывания включает CPU и возвращается к основному циклу, где обработка была приостановлена. После завершения преобразования результаты будут доступны в регистре ADC10MEM.



5. Калибровка

После того, как ваша схема запрограммирована и собрана, вы можете проверить чувствительность, подавая больше и меньше света на датчик LDR и наблюдая за состоянием светодиода. Если все выполнено правильно, светодиод LaunchPad включится и выключится на определенном пороге. Иногда бывает, что цепь слишком чувствительна и светодиод будет всегда включен, или цепь будет недостаточно чувствительна, и светодиод всегда будет выключен. Чувствительность может быть изменена путем изменения значения операнда-источника в следующей строке:



cmp.w #01FFh,&ADC10MEM ; проверка результата ADC Результат сохраняется в ADC10MEM

; снова от порогового значения




Для примера мы использовали шестнадцатеричное значение 01FFh, которое составляет приблизительно половину опорного напряжения. Увеличение значения этого порога сделает схему менее чувствительной, уменьшение значения сделает ее более чувствительной.


Разумеется, можно регулировать пороговое значение методом проб и ошибок, пока не будет достигнута удовлетворительная работа. Однако инструмент отладки Code Composer Studio предоставляет более точный механизм калибровки, позволяющий нам просматривать значение регистра ADC10MEM в различных условиях и выбирать более подходящее пороговое значение.

Чтобы использовать отладчик, запустите CCS, как обычно, и выберите пункт меню: Target -> Debug Active Project. Отладка откроется с пятью окнами по умолчанию - «Отладка», «Переменные», «Исходный код», «Разборка» и «Консоль».





Рис.5.1


Окно «Регистры» не открывается по умолчанию, его необходимо загрузить через пункт меню «Вид» -> «Регистры». Как вы можете видеть на рисунке ниже, регистры организованы в древовидную структуру по модулю. Чтобы просмотреть регистры ADC10, вам нужно развернуть ветвь.




Рис.5.2



В окне отладки имеются различные знаковые элементы управления для основных функций, таких как запуск, остановка, включение,

выключение и сброс.









Рис.5.3.




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


6. Следующие шаги



Теперь, когда вы вооружены базовым пониманием модуля ADC10, вам следует по-новому взглянуть на главу ADC10 в Руководстве пользователя семейства MSP430x2xx (SLAU144). [2] Ознакомьтесь с подробной информацией о многих настройках регистров и о том, как их можно использовать для облегчения использования различных датчиков и измерительных приборов. Мы намеренно придерживались основ в этой лабораторной работе, но есть много хороших примеров ADC, опубликованных в литературе и на сайте [3], которые управляют гаммой от студенческих проектов до надежных медицинских устройств. Скорость и точность аналоговых и цифровых функций MSP430 являются одной из сильных сторон этой платформы. С небольшими затратами времени вы должны сами разработать и связать высокоэффективные сенсорные решения для ваших вариантов этого проекта.




7. Литература


1) LaunchPad MSP430 ассемблере Учебное пособие

2)Руководство пользователя семейства MSP430x2xx (SLAU144)

3)https://www.ti.com




1410
Нет комментариев. Ваш будет первым!