реклама на сайте
подробности

 
 
 
Closed TopicStart new topic
> stm32 + датчик холла
Alexsandr000
сообщение Oct 27 2014, 12:52
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 23-10-12
Пользователь №: 74 054



Здравствуйте уважаемые форумчане!

Кто может посоветовать, как подружить датчик Холла и STM.
Датчик подключен к ноге PB6
вот код:
CODE
int main(void){
init_timer();
init_gpio();
init_clock();
init_uart();
for(i = 0; i < 200000; i++);
if(!RCC_CFGR_SWS_HSE){ GPIOA->ODR ^= GPIO_Pin_0; }
Usart2_Send_String("Hello, world!"); //Передаем строку, сообщающую о готовности микроконтроллера к обмену данными
NVIC_SetPriority(TIM3_IRQn, 1);
while(1){
if(State == 1){
NVIC_DisableIRQ(TIM4_IRQn);
State = 0;
while(!(USART2->SR & USART_SR_TC)); //Проверяем установку флага TC - завершения предыдущей передачи
USART_SendData(USART2, tt);
NVIC_EnableIRQ(TIM4_IRQn);
}
for(i = 0; i < 50000; i++);
}
return 0;
}
void init_gpio(void){
GPIO_InitTypeDef gpio_cfgLED, gpio_cfgHOLE;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_StructInit(&gpio_cfgLED);
GPIO_StructInit(&gpio_cfgHOLE);
gpio_cfgLED.GPIO_Mode = GPIO_Mode_Out_PP;
gpio_cfgLED.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
gpio_cfgLED.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOA, &gpio_cfgLED);
gpio_cfgHOLE.GPIO_Pin = GPIO_Pin_6;
gpio_cfgHOLE.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB, &gpio_cfgHOLE);
}
void init_timer(){
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); /* Не забываем затактировать таймер */
TIM_TimeBaseInitTypeDef timer_base2;
TIM_TimeBaseStructInit(&timer_base2);
timer_base2.TIM_Prescaler = 72 - 1; /* Делитель учитывается как TIM_Prescaler + 1, поэтому отнимаем 1 */
timer_base2.TIM_Period = 10;
TIM_TimeBaseInit(TIM3, &timer_base2);
/* Настраиваем захват сигнала: - канал: 1 - счёт: по нарастанию - источник: напрямую со входа - делитель: отключен - фильтр: отключен */
TIM_ICInitTypeDef timer_ic2;
timer_ic2.TIM_Channel = TIM_Channel_1;
timer_ic2.TIM_ICPolarity = TIM_ICPolarity_Rising;
timer_ic2.TIM_ICSelection = TIM_ICSelection_DirectTI;
timer_ic2.TIM_ICPrescaler = TIM_ICPSC_DIV1;
timer_ic2.TIM_ICFilter = 100;
TIM_PWMIConfig(TIM2, &timer_ic2); /* Эта функция настроит канал 1 для захвата периода, а канал 2 - для захвата заполнения. */
TIM_SelectInputTrigger(TIM4, TIM_TS_TI1F_ED) ; /* Выбираем источник для триггера: вход 1 (PA6) */
TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_Reset); /* По событию от триггера счётчик будет сбрасываться. */
TIM_SelectMasterSlaveMode(TIM4, TIM_MasterSlaveMode_Enable); /* Включаем события от триггера */
TIM_ITConfig(TIM4, TIM_IT_CC1, ENABLE); /* Разрешаем таймеру генерировать прерывание по захвату */
TIM_Cmd(TIM4, ENABLE); /* Включаем таймер */
NVIC_EnableIRQ(TIM4_IRQn); /* Разрешаем прерывания таймера TIM3 */
}
void TIM4_IRQHandler(){
uint8_t sample1, sample2;
if (TIM_GetITStatus(TIM4, TIM_IT_CC1) != RESET) {
TIM_ClearITPendingBit(TIM4, TIM_IT_CC1);
GPIOA->ODR ^= GPIO_Pin_1;
do {
sample1 = ReadHole();
sample2 = ReadHole();
} while (sample1!=sample2);
if(state == 0){
GPIOA->ODR ^= GPIO_Pin_1;
tt = 1;
state = 1;
}
else{
tt = 0;
}
}
}
uint8_t ReadHole(){
return GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6);
}




--------------------
Go to the top of the page
 
+Quote Post
KnightIgor
сообщение Oct 27 2014, 21:14
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 643
Регистрация: 29-05-09
Из: Германия
Пользователь №: 49 725



Цитата(Alexsandr000 @ Oct 27 2014, 14:52) *
Здравствуйте уважаемые форумчане!
Кто может посоветовать, как подружить датчик Холла и STM.

Ни что за датчик, ни что за цель. Какая уж тут дружба.
Кстати, датчик не дыры (Hole), а эффекта Холла (Hall).
Go to the top of the page
 
+Quote Post
Alexsandr000
сообщение Oct 28 2014, 06:06
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 23-10-12
Пользователь №: 74 054



Датчик нужен для подсчета частоты вращения двигателя. Модель SS495


--------------------
Go to the top of the page
 
+Quote Post
kovigor
сообщение Oct 28 2014, 09:29
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Alexsandr000 @ Oct 28 2014, 09:06) *
Модель SS495

Так ведь он линейный:

http://www.sumzi.com/upload/files/2013/01/...19170343315.pdf

К нему еще компаратор нужен. Альтернатива - подавать сигнал с датчика на вход АЦП, а не на простой порт GPIO ...
Go to the top of the page
 
+Quote Post
Alexsandr000
сообщение Oct 30 2014, 08:53
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 23-10-12
Пользователь №: 74 054



В общем, сначала я пустил импульс с датчика Холла через разделительный конденсатор и подтягивающий резистор на FT порт МК. Однако, этот вариант не подошел, так как возникали ложные срабатывания. Поэтому я остановился на компараторе.


--------------------
Go to the top of the page
 
+Quote Post
kovigor
сообщение Oct 30 2014, 09:31
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(Alexsandr000 @ Oct 30 2014, 11:53) *
... импульс с датчика Холла ...

Там не будет импульсов, будет синусоида. Почитайте документацию на датчик. Вам нужен компаратор ...
Go to the top of the page
 
+Quote Post
Alexsandr000
сообщение Dec 9 2014, 10:09
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 97
Регистрация: 23-10-12
Пользователь №: 74 054



Поставил компаратор и все стало ОК. Огромное всем спасибо!


--------------------
Go to the top of the page
 
+Quote Post

Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 10:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.01415 секунд с 7
ELECTRONIX ©2004-2016