Всех приветствую, сегодня мы будем подключать и настраивать MEMS-акселерометр LIS3DSH от известной компании ST Microelectronics. Акселерометр довольно интересный и более функциональный в сравнении со своим братом LIS3DH. Ну немного пробежим по параметрам: тип датчика 3х осевой; чувствительность 0.06mg/dig.; разрешение 16 bit; напряжение питания от 1,7 до 3,6 в; диапазон измерения ±2g/±4g/±6g/±8g/±16g; работает по I2C и SPI интерфейсам; имеет две 16 шаговые машины состояний, которые могут производить операции над входными данными усреднять их, сравнивать с порогом, обнаруживать максимумы и отсчитывать временные интервалы выдавая сигнал лишь в случае наступления заранее определенного события.. Все это снижает требования к вычислительной способности управляющего микроконтроллера разгружая программу. Для настройки машины состояний не нужно составлять программу в классическом виде – необходимо просто занести требуемые параметры в специальные регистры. Но несмотря на относительную простоту, с помощью машины состояний можно реализовать довольно сложные алгоритмы анализа движения. Благодаря машине состояний можно понизить общее энергопотребление системы, путем ввода управляющего контроллера в сон, так как ток потребления LIS3DSH не превышает 11 мкА в активном режиме (3.125 Гц). А при обнаружении удара, или свободного падения, машина состояний подаст сигнал для пробуждения микроконтроллера и выполнения необходимых действий. Вообщем перспективный чип)).
Чтобы получить от акселерометра какой-то толк его необходимо настроить, сконфигурировав регистры под свои нужды. И так.., для начала спросим кто он такой и хочет ли он с нами работать)). Подключаться будем через I2C интерфейс.
'--------------------------------------------------------------------------------------------- Const Lis3dsh_addressw=H3A Const Lis3dsh_status_reg = &H27 Const Lis3dsh_ctrl_reg4 = &H20 Const Lis3dsh_ctrl_reg5 = &H24
Dim DataBuffer(6) As Byte Dim Out_x As Integer , Out_y As Integer , Out_z As Integer
I2creceive Lis3dsh_addressw , DataBuffer(1) , 1 , 1 If DataBuffer(1) = &H3F Then ' Print "LIS3DSH_OK" Else Print "LIS3DSH_ERROR" End If '-------------------------------------------------------------------------------------------- |
Если подключение прошло успешно и датчик ответил, то в терминале выведется "LIS3DSH_OK", если нет "LIS3DSH_ERROR" - проверяйте схему подключения, питание, и настройку I2C интерфейса.
Схема подключения датчика
Далее настраиваем регистры :
'---------------------------------------------------------------------------------------------- 'включение осей XYZ и частотой семплирования данных 100 Гц.(10ms)
I2cstart I2cwbyte Lis3dsh_addressw I2cwbyte Lis3dsh_ctrl_reg4 I2cwbyte &H67 I2cstop
'фильтр 800Гц, ускорение 2g, без теста I2cstart I2cwbyte Lis3dsh_addressw I2cwbyte Lis3dsh_ctrl_reg5 I2cwbyte &H00 I2cstop
Do DataBuffer(1) = Lis3dsh_status_reg I2creceive Lis3dsh_addressw , DataBuffer(1) , 1 , 1
If DataBuffer(1).7 = 1 Then
DataBuffer(1) = &HA8 I2creceive Lis3dsh_addressw , DataBuffer(1) , 1 , 6 Out_x = Makeint(DataBuffer(1) , DataBuffer(2)) Out_y = Makeint(DataBuffer(3) , DataBuffer(4)) Out_z = Makeint(DataBuffer(5) , DataBuffer(6))
Shift Out_x , Right , 8 Shift Out_y , Right , 8 Shift Out_z , Right , 8
Print "x=" , Out_x Print "y=" , Out_y Waitms 300 Loop
End '---------------------------------------------------------------------------------------------- |
В терминал получаем значения ускорений по трем осям.
|