На плате Discovery установлен 3х-осевой датчик ускорения (LIS302DL). Примечание: "новые" платы оснащены микросхемами LIS3DSH, библиотека для работы с ними есть в блоге автора. Данный датчик позволяет измерять ускорение по осям X, Y и Z. Датчик имеет разрядность 8 бит и разрешение +/-2g или +/-8g. Данная библиотека позволяет легко использовать микросхему, достаточно циклически вызывать функцию "UB_LIS302_Read ()" и получить значение ускорения всех трех осей (в примере используется две оси в диапазоне значений от -2000 до 2000). Датчик может быть использован через опрос по прерыванию, но для разъяснения работы необходимо связаться с автором. Внимание: в руководстве пользователя к плате STM32F4 Discovery ошибка, как чипселект указан вывод PE2, на самом деле используется PE3. Для работы микросхемы необходима библиотека STM32_UB_SPI1.
Демонстрация работы:
Используемые выводы:
SCK как PA5
MOSI как PA7
MISO как PA6
ChipSelect как PE3
Требования:
Подключаемые модули CooCox-IDE: GPIO.
Поддерживаемые библиотеки: STM32_UB_SPI1.
Перечисления:
typedef enum { SCALE_2G =0, // Разрешение +/- 2g SCALE_8G // Разрешение +/- 8g }LIS302_SCALE_t; typedef enum { FILTER_OFF =0, // ФВЧ отключен FILTER_2Hz, // Фильтр включен (2 Гц) FILTER_1Hz, // Фильтр включен (1 Гц) FILTER_500mHz, // Фильтр включен (0,5 Гц) FILTER_250mHz // Фильтр включен (0,25 Гц) }LIS302_FILTER_t;
Функции:
ErrorStatus UB_LIS302_Init(LIS302_SCALE_t scale); // инициализация LIS302DL void UB_LIS302_Read(void); // зачитать значение ускорения void UB_LIS302_SetFilter(LIS302_FILTER_t filter); // настройка фильтра
Пример использования:
//-------------------------------------------------------------- // File : main.c // Datum : 06.03.2013 // Version : 1.0 // Autor : UB // EMail : mc-4u(@)t-online.de // Web : www.mikrocontroller-4u.de // CPU : STM32F4 // IDE : CooCox CoIDE 1.7.0 // Module : CMSIS_BOOT, M4_CMSIS_CORE // Funktion : Demo der LIS302DL Library // Hinweis : Diese zwei Files muessen auf 8MHz stehen // "cmsis_boot/stm32f4xx.h" // "cmsis_boot/system_stm32f4xx.c" //-------------------------------------------------------------- #include "main.h" #include "stm32_ub_lis302dl.h" #include "stm32_ub_led.h" int main(void) { ErrorStatus check; SystemInit(); // Инициализация настроек кварца UB_Led_Init(); // Инициализация светодиодов // Инициализация LIS302 (с разрешением +/-2G) check=UB_LIS302_Init(SCALE_2G); if(check==ERROR) { // LIS302 не найден // включить красный и зеленый светодиоды UB_Led_On(LED_RED); UB_Led_On(LED_GREEN); // СТОП while(1); } while(1) { // выбрать LIS302 UB_LIS302_Read(); // когда отладочная плата наклонена влево, включить красный светодиод if(LIS302.y_achse>250) UB_Led_On(LED_RED); else UB_Led_Off(LED_RED); // когда отладочная плата наклонена вправо, включить зеленый светодиод if(LIS302.y_achse<-250) UB_Led_On(LED_GREEN); else UB_Led_Off(LED_GREEN); // когда отладочная плата наклонена назад, включить синий светодиод if(LIS302.x_achse>250) UB_Led_On(LED_BLUE); else UB_Led_Off(LED_BLUE); // когда отладочная плата наклонена вперед, включить желтый светодиод if(LIS302.x_achse<-250) UB_Led_On(LED_ORANGE); else UB_Led_Off(LED_ORANGE); } }
В приложении проект CooCox и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.
Прикрепленные файлы:
- ub_stm32f4_spi_lis302dl_v100_rus.rar (8 Кб)
- Demo_17_SPI_LIS302DL_rus.rar (185 Кб)
Комментарии (0) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация