4 сообщения в этой теме

Дано: отладочная плата STM32F303VC, индукционный датчик.

Доброго времени суток, суть моего проекта в  детектировании вибраций(ударов) при помощи аналогового датчика.

Код отслеживания удара написан, но я не пойму то ли я ошибся с алгоритмом его работы то ли не правильно сконфигурировал отладочную плату.

image.png.6c5dfd3015fe1e7c39610351e9d8a5fb.png

Информация по датчику.

Индукционный датчик удара, шок сенсор, Arduino может использоваться в проектах на микроконтроллерах (в т.ч. Arduino), в которых нужно следить за уровнем вибрации или подобных механических возмущений. Принцип действия датчика основан на электромагнитной индукции. Движущийся стальной, ферритовый или магнитный сердечник относительно катушки создает в катушке ЭДС, подходящую по амплитуде ударного воздействия на систему. Чувствительный элемент датчика установлен в прозрачный пластиковый параллелепипед для защиты от действий внешней среды.
Для использования датчика нужно подключить его к Arduino контроллеру или другому микропроцессорному управляющему устройству, подать питание, создать программу для работы с датчиком или использовать готовое решение. На корпусе датчика есть два отверстия, с помощью которых можно жестко закрепить датчик на плоской поверхности. В состоянии покоя напряжение на выходе из датчика около 5 В, при возмущении напряжение на датчике падает пропорционально силе возмущения.
Индукционный датчик удара, шок сенсор, Arduino имеет один 3-контактный разъем для подключения к контроллеру и питания:

контакт обозначенный «–» – общий контакт;

средний контакт – напряжение питания;

контакт S – аналоговый выходной сигнал датчика.

Датчик может питаться как от Arduino контроллера (другого микропроцессорного управляющего устройства), так и от внешнего источника питания. Напряжение питания 3,3 – 5 вольт постоянного тока.

Характеристики:

принцип действия: индукционный;
выходной сигнал: аналоговый;
напряжение питания: 3,3 – 5 вольт постоянного тока;
размеры: 30 х 18 х 11;
вес: 2 г.

Shock.7z

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Yurkin2015    320
37 минут назад, Kirill Lubinets сказал:

то ли я ошибся с алгоритмом его работы

А какой алгоритм используется в программе? Если можно, напишите коротко своими словами. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Инициализирую порт А(там находится АЦП) и порт В(там находятся распаянные светодиоды), конфигурирую светодиоды и АЦП1(ножна PA0).

АЦП 10-битный значит он сможет детектировать 1024 различных  напряжений на амплитуде 0-5 V. 
Из этого выходит что чувствительность(шаг квантования) равен 5мВ.

Когда датчик приводят в возбуждение(трисут, стукают,дергают) в нем возникает ЭДС самоиндукции что гасит напряжение:

1.Датчик в работе значит на выходе будет менее 5V(напряжение питания);

2.Датчик в спокойствие на выходе будет 5V(напряжение питания);
 

 

АЛГОРИТМ(while)

 

1.Считываю значение с АЦП1, делаю паузу, запрещаю дальнейшие преобразование
2.Делаю расчет текущего потенциала на датчике ( значение АЦП * 5(напряжение питания)/1024(разрядность АЦП) )
3.Сравниваю с условием состояния датчика
3.1. Зажигаю один из светодиодов(в зависимости от состояния датчика)

3.2. Делаю паузу

3.3.Тушу светодиод, включаю на АЦП1 преобразования

 

Думаю я ощибся в условии срабатывания датчика среагировавшего на удар.

 

if(u <  1400)

тогда удар был зажечь зеленый светодиод

else

удара не было зажечь красный светодиод

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Yurkin2015    320
16 минут назад, Kirill Lubinets сказал:

в нем возникает ЭДС самоиндукции

В Вашем датчике нет никакой самоиндукции. Это просто контакт, который замыкается при тряске. Упругая пружинка в датчике расположена так, что её свободный конец не касается контактов. При резком движении пружинка начинает колотиться по контакту, кратковременно замыкая электрическую цепь.

Тут даже не нужно АЦП использовать, потому что при срабатывании датчик выдаёт серию импульсов 5В-0В -5В-0В-5В ... Надо просто подать этот сигнал на ножку порта и включить прерывания на этой ноге. Тогда при появлении импульсов на ноге сработает прерывание, и в обработчике прерывания уже можно включать светодиод. 

 

cxem_shock_sensor1.png

  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: CUBE
      Не могу запустить асинхронный режим. 
      Ниже будет представлен код которым пытаюсь отладить. Там в 1 коде идёт работа от внутреннего источника таков (стоит 1МГц).  После 5 миганий таймер должен перейти в асинхронный режим и мигать с частотой в 1 Гц. У меня происходит 5 миганий потом ничего. Фьюзы менять пробовал, ничего не дало, сейчас дефолт. Корпус кварца к земле тянуть пробовал - безрезультатно. 
      Возможно что-то в подключении накосячил, если не видно на фото ниже, спрашиваете, нужно будет - нарисую схему. 
      Компилятор Atmel Studio 7
      Шью через Sind Prog 2.1.1 + USBasp 2.0
      Вот код: 
      .macro outi 
       ldi r16, @1 
       out @0, r16 
      .endm 
      .org $000 
      rjmp reset 
      .org $001 
      reti 
      .org $002 
      reti 
      .org $003 
      reti 
      .org $004 
      rjmp timer2_ovf 
      .org $005 
      reti 
      .org $006 
      reti 
      .org $007 
      reti 
      .org $008 
      reti 
      .org $009 
      reti 
      .org $00A 
      reti 
      .org $00B 
      reti 
      .org $00C 
      reti 
      .org $00D 
      reti 
      .org $00E 
      reti 
      .org $00F 
      reti 
      .org $011 
      reti 
      .org $012 
      reti 
      .ORG INT_VECTORS_SIZE 
       
      reset: 
      .equ portout=portd 
      .equ ddrout=ddrd 
      .def led=r17 
      .def mask=r18 
      .def counter=r19 
       outi spl,low(ramend) 
       outi sph,high(ramend) 
       
       outi ddrout, 0xff 
       
       outi tccr2, 0b00000111 
       outi timsk, 1«toie2 
       
        
       
        
       ldi led,1«5 
       ldi mask,1«5 
       sei 
      cycle: 
      cpi counter, 10 
      breq offtim 
       rjmp cycle 
       
      timer2_ovf: 
      inc counter 
       out portout, led 
       eor led, mask 
      reti 
        
      offtim: 
      outi timsk, 0«toie2 
      rjmp asinxron 
       
      asinxron: 
       outi assr, 0b00001000 
      back: 
       in r16, assr 
       cpi r16, 0b00001000 
       brne back 
       
        outi tccr2, 0b00000101 
        outi tcnt2, 0 
        outi ocr2, 0 
        outi timsk, 1«toie2 
       
       
      m1: 
      rjmp m1


      Верх меги на фото слева. 
    • Автор: TheCoolKuid
      Здравствуйте.
      Часто прошивал МК, в один из моментов по программе должна была выставляться единица на 5Б пин. После этого убрал эту функцию, но теперь при включении к питанию МК на любой прошивки пин уходит в ноль и МК не отвечает ни на UART, ни на I2C. Пин не уходит в ноль только на чистом кристалле. Даже если в новой прошивке и слома нет про включение этого пина, он в единице. Может ли это означать, что программная память посыпалась?
      Спасибо.
    • Автор: Alex_Chpook
      Здравствуйте. Делаю бегущую строку на AVR и драйверах max7219 по этой статье. Исходный код есть в конце статьи. 
      Хотел бы доработать устройство чтобы можно было передавать сообщение через Bluetooth модуль HC-05 при помощи Bluetooth terminal. Сам знаю как это можно сделать, т.к. все примеры находил только под Arduino. 
      Прошу помочь кто знает как это  можно реализовать 
    • Автор: Alex_Chpook
      Всем привет. Хочу сделать светодиодную матрица с драйвером max7219 на Atmega324P. 
      При попытке смоделировать в Proteus вылазят ошибки:
      Собирал вроде всё правильно, текст в EEPROM загружен, но на матрицах выводится непонятно что и на всех одно и тоже. Может я что-то напутал, когда собирал((
      Подскажите пожалуйста кто знает))
      Проект со схемой Proteus и прошивку прикрепляю.
      И просто схема: 
       

      Строка c MAX7219.rar