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

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> STM32F0 + датчик Холла SCM Sunfab
arthedza
сообщение Dec 1 2014, 16:57
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 1-12-14
Пользователь №: 83 922



Доброго времени суток всем! Товарищи, нужна ваша помощь.
Буду краток. В универе проходил курс АВРок, настало время диплома. Диплом делаю на предприятии (и кураторы тоже от предприятия), в виду этого приходится на ходу осваивать STM32F0. Да и в универском курсе ни разу не сталкивался с датчиками. Пока имеется один вопрос, с остальным вроде разобрался. Он заключается в следующем: как мне подключать сей
датчик скорости на эффекте Холла к СТМке? В программе MicroXplorer есть такой пунктик интересный — XORED Inputs Hall Sensor Interface (3 ноги под это дело заводится, 3 канала таймера). Что, все три ноги датчика на таймер МК подавать? Или лучше просто задействовать один канал таймера в режиме input capture? Если нужна дополнительная инфа — пишите, я укажу все, что знаю. Вот что написано в инсайдерском руководстве:

Цитата
5.1.4.2.2. Интерфейс датчика Холла
Каждый из таймеров, в т.ч. и расширенный, разработан с учетом простоты
подключения к датчику Холла, предназначенного для измерения угловой частоты
вращения электродвигателя. Первые три вывода захвата каждого таймера можно связать
с каналом 1 через логический элемент "исключающее ИЛИ". В этом случае, по мере
вращения двигателя и прохождения возле каждого датчика, в канале будет
генерироваться событие захвата. Это приведет к копированию текущего состояния
таймера в регистр захвата канала, а также к сбросу таймера. Таким образом, значение
счетчика, которое окажется в регистре захвата, можно пересчитать в частоту вращения
электродвигателя.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Dec 1 2014, 17:29
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



ну просто если брать мотор для которого положение определяют по датчику хола, то от него идут 3 датчика хола, мож потому и 3 ноги?

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

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

Потому что как вы сами, надеюсь понимаете, с помощью датчиков на эффекте Холла можно намерить от тока в проводнике до положения севера на земле...
Go to the top of the page
 
+Quote Post
kovigor
сообщение Dec 1 2014, 17:33
Сообщение #3


Гуру
******

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



Цитата(arthedza @ Dec 1 2014, 20:57) *
Что, все три ноги датчика на таймер МК подавать?

У него две ножки, а не три. Фазовый сдвиг между ними указывает на направление вращения (см. даташит, на который вы сослались). Если нужно определять частоту вращения, то вполне можно подключить эти ножки к Capture - входам таймера ...
Go to the top of the page
 
+Quote Post
arthedza
сообщение Dec 1 2014, 18:01
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 1-12-14
Пользователь №: 83 922



Цитата(Golikov A. @ Dec 1 2014, 19:29) *
ну просто если брать мотор для которого положение определяют по датчику хола, то от него идут 3 датчика хола, мож потому и 3 ноги?

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

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

Потому что как вы сами, надеюсь понимаете, с помощью датчиков на эффекте Холла можно намерить от тока в проводнике до положения севера на земле...


С датчика идет 4 провода: питание, земля и два информационных (разные направления вращения, 30 импульсов за оборот)

Цитата(kovigor @ Dec 1 2014, 19:33) *
У него две ножки, а не три. Фазовый сдвиг между ними указывает на направление вращения (см. даташит, на который вы сослались). Если нужно определять частоту вращения, то вполне можно подключить эти ножки к Capture - входам таймера ...


Направление вращения в конкретной задаче не важно, реализации реверса не требуется
Go to the top of the page
 
+Quote Post
kovigor
сообщение Dec 1 2014, 18:05
Сообщение #5


Гуру
******

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



Цитата(arthedza @ Dec 1 2014, 22:01) *
Направление вращения в конкретной задаче не важно, реализации реверса не требуется

Тогда на Capture - входы подключайте. А если все же направление потребуется (в будущем), то можно подать сигнал параллельно на две обычных ножки любого порта. Но вполне возможно, что средствами Capture удастся определить также и направление вращения ...
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Dec 1 2014, 18:26
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
С датчика идет 4 провода: питание, земля и два информационных (разные направления вращения, 30 импульсов за оборот)


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



эх... обломали образовательный процесс, ну да ладно...

Go to the top of the page
 
+Quote Post
arthedza
сообщение Dec 1 2014, 18:39
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 1-12-14
Пользователь №: 83 922



Цитата(Golikov A. @ Dec 1 2014, 20:24) *
по описанию похоже больше на энкодер, возможно магнитный на датчике холла, чем на датчик холла...


Ну, его "обозвали" датчиком скорости на эффекте Холла. Он двухканальный. Как я понял, датчик скорости этот контролирует зубцы шестерни гидромотора и содержит в себе магнит и ,собственно, датчик Холла в одном корпусе (смотри рисунок). Датчик Холла и магнит размещаются вблизи зубьев шестерни, как только зуб шестерни проходит вдоль устройства — магнитное поле между магнитом и датчиком усиливается, в результате чего на выходе блока формируется импульс. 30 зубьев = 30 импульсов за оборот.

Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Dec 1 2014, 19:28
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Вот.... теперь вопрос
в датчике стоят 2 магнита и 2 датчика холла, на расстояние в пол. зубца шестерни или там просто стоит 2 датчика на 2 шестерни? Что вы понимали под 2 канальностью?

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

1. можно по 1 проводу ловить импульсы, мерить время между импульсами и определять скорость вращения по этой величине. Вы получаете тут время на путь длинной в 1 зуб.
2. Если второй канал смещен на ползуба, то можно мерить время между 2 импульсами и определять скорость вращения по этой величине. Вы получаете время на путь длинной в 0.5 зуба.
3. Можно за определенное время накапливать импульсы и по этому параметру определять скорость вращения. Вы получаете сколько зубцов проходит мимо датчика за определенное время.

так какое решение выбираете вы?
Go to the top of the page
 
+Quote Post
arthedza
сообщение Dec 1 2014, 19:51
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 1-12-14
Пользователь №: 83 922



Цитата(Golikov A. @ Dec 1 2014, 21:28) *
Вот.... теперь вопрос
в датчике стоят 2 магнита и 2 датчика холла, на расстояние в пол. зубца шестерни или там просто стоит 2 датчика на 2 шестерни? Что вы понимали под 2 канальностью?

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

1. можно по 1 проводу ловить импульсы, мерить время между импульсами и определять скорость вращения по этой величине. Вы получаете тут время на путь длинной в 1 зуб.
2. Если второй канал смещен на ползуба, то можно мерить время между 2 импульсами и определять скорость вращения по этой величине. Вы получаете время на путь длинной в 0.5 зуба.
3. Можно за определенное время накапливать импульсы и по этому параметру определять скорость вращения. Вы получаете сколько зубцов проходит мимо датчика за определенное время.

так какое решение выбираете вы?


Давайте я завтра постараюсь уточнить на счет структуры датчика и двухканальности, а потом отпишусь
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 2 2014, 07:27
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(arthedza @ Dec 1 2014, 21:51) *
Давайте я завтра постараюсь уточнить на счет структуры датчика и двухканальности, а потом отпишусь
А еще почитайте (для общего ознакомления) о квадратурных энкодерах. Любой инженер - электроник должен иметь представление о принципе работы таких энкодеров, также как любой инженер должен иметь представление о логарифмах. Увидите много общего между своим датчиком и таким энкодером. У STM32 некоторые таймеры имеют специальный режим для прямой работы с такими энкодерами.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
arthedza
сообщение Dec 2 2014, 07:30
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 1-12-14
Пользователь №: 83 922



Цитата(Golikov A. @ Dec 1 2014, 21:28) *
Вот.... теперь вопрос
в датчике стоят 2 магнита и 2 датчика холла, на расстояние в пол. зубца шестерни или там просто стоит 2 датчика на 2 шестерни? Что вы понимали под 2 канальностью?

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

1. можно по 1 проводу ловить импульсы, мерить время между импульсами и определять скорость вращения по этой величине. Вы получаете тут время на путь длинной в 1 зуб.
2. Если второй канал смещен на ползуба, то можно мерить время между 2 импульсами и определять скорость вращения по этой величине. Вы получаете время на путь длинной в 0.5 зуба.
3. Можно за определенное время накапливать импульсы и по этому параметру определять скорость вращения. Вы получаете сколько зубцов проходит мимо датчика за определенное время.

так какое решение выбираете вы?


Конструктивное решение принято уже до меня: канал используется только один, обратного направления вращения нет в реализации. Так что будет использоваться 1 провод. Как мне сказали, двухканальность никого не интересует. Считать зубцы будем одним датчиком
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 2 2014, 07:34
Сообщение #12


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(arthedza @ Dec 2 2014, 09:30) *
канал используется только один, обратного направления вращения нет в реализации.
Значит задача измерения скорости сводится к задаче определения частоты поступающих импульсов, к построению частотомера. Вот вам и еще одно ключевое слово для поисков: "измерение частоты".


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
arthedza
сообщение Dec 2 2014, 07:39
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 1-12-14
Пользователь №: 83 922



Цитата(Сергей Борщ @ Dec 2 2014, 09:27) *
А еще почитайте (для общего ознакомления) о квадратурных энкодерах. Любой инженер - электроник должен иметь представление о принципе работы таких энкодеров, также как любой инженер должен иметь представление о логарифмах. Увидите много общего между своим датчиком и таким энкодером. У STM32 некоторые таймеры имеют специальный режим для прямой работы с такими энкодерами.


Да на днях поверхностно ознакомился с энкодерами

Цитата(Сергей Борщ @ Dec 2 2014, 09:34) *
Значит задача измерения скорости сводится к задаче определения частоты поступающих импульсов, к построению частотомера. Вот вам и еще одно ключевое слово для поисков: "измерение частоты".


Это тоже я гуглил) Даже нарыл некий фрагментик:

CODE
#include "iostm8l152c6.h"
#include "lcd.h"

long int count;
//описываем прерывание
#pragma vector=EXTI1_vector
__interrupt void Pin1_interrupt(void)
{
unsigned char ch = 'с';
TIM1_CR1_bit.CEN ^= 1;
PE_ODR_bit.ODR7 ^= 1;
if ( !TIM1_CR1_bit.CEN )
{
LCD_eWrite_Int( &count, 1, 5, 4 );
LCD_Write_Char( &ch, 0, 0, 6 );
count = 0;
}
EXTI_SR1_bit.P1F = 1; //сброс флага прерывания, чтобы вернуться в код
}
#pragma vector=TIM1_OVR_UIF_vector
__interrupt void TIM1_OVF(void)
{
count++;
TIM1_SR1_bit.UIF = 0; //Сброс флага прерывания
}
void timinit( void )
{
CLK_PCKENR2_bit.PCKEN21 = 1; //Включаем тактирование таймера 1
TIM1_PSCRH = 0;
TIM1_PSCRL = 7; //Делитель на 8
TIM1_ARRH = (1000) >> 8; //Частота переполнений = 8М / 8 / 1000 = 100 Гц
TIM1_ARRL = (1000)& 0xFF;
TIM1_CR1_bit.URS = 1; //Прерывание только по переполнению счетчика
TIM1_EGR_bit.UG = 1; //Вызываем Update Event
TIM1_IER_bit.UIE = 1; //Разрешаем прерывание
}
void main( void )
{
unsigned char text[7] = " READY";
CLK_SWCR_bit.SWEN = 1;
CLK_SWR = 0x04;
CLK_CKDIVR = 0x00; //ядро работает на 8 МГц
PC_DDR_bit.DDR1 = 0;
PE_DDR_bit.DDR7 = 1;
PE_CR1_bit.C17 = 1;
PC_CR1_bit.C11 = 1;
PC_CR2_bit.C21 = 1;
EXTI_CR1_bit.P1IS = 2;//реагировать на спад, т е нажатие кнопки
ITC_SPR3_bit.VECT9SPR = 3;
timinit();
LCD_Init();
LCD_Contrast(7);
LCD_Write_String( text );
asm("RIM"); //глобальное разрешение прерываний
while( true );
}


Сообщение отредактировал IgorKossak - Dec 2 2014, 19:40
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Dec 2 2014, 08:34
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Ну тут достаточно применить смекалку:

у вас осталось 2 варианта

1. Определение мгновенной скорости, то есть измерение времени прошедшего между 2 зубцами
2. Подсчет числа зубцов прошедших мимо датчика за определенное время

Реализация этого может быть такие
1. Прерывание по импульсу от проходящего зубца. В прерывании вы считываете значение таймера, сбрасываете его и запускаете бежать вперед без остановок. Первый интервал после остановки будет определен криво, дальше все поедет как надо.
2. Завести таймер на определенный интервал, 1 секунда, например. Завести сигнал от датчика как клок другого таймера, каждый импульс таймер будет прибавлять по 1 в счетчик. Как пройдет секунда, по прерыванию можете считать сколько насчитал 2 таймер, и сбросить это число. Таким способом вас реже дергают в прерывание, и получается некая фильтрация по времени, но теряется оперативность.

Так же можно завести сигнал и обратный сигнал на 2 капча таймера, и определять разницу между фронтами. Можно по 1 капчу, если у проца есть такой режим таймера. Можно как вариант 2 заставить таймер тактируемый внешним сигналом считать до какого то числа и по прерыванию как он досчитал забирать время системного таймера, определяя сколько времени прошло за Н зубцов.
Можно придумать еще вариантики.

А фрагменты не ищите, если понять задачу она реализуется за полдня, а если не понять то будет как в начале темы, заведете 2 сигнала на какие то ножки а потом выясниться что 1 сигнала нет, а ножки не совсем подходят потому что от датчика ждали другого.... Вообще на вопрос куда завести датчик Холла, я бы ответил на компаратор или АЦП, так что постановка и понимание задачи очень важно!
Go to the top of the page
 
+Quote Post
arthedza
сообщение Dec 2 2014, 09:23
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 1-12-14
Пользователь №: 83 922



Цитата(Golikov A. @ Dec 2 2014, 10:34) *
...


А к какому варианту посоветуете склониться лично мне, как начинающему? Естесственно, желательно "что полегче"

Цитата(arthedza @ Dec 2 2014, 11:04) *
А к какому варианту посоветуете склониться лично мне, как начинающему? Естесственно, желательно "что полегче"


Просмотрел внимательно ТЗ, опрос датчика скорости должен производиться с периодичностью в 5мс

Сообщение отредактировал IgorKossak - Dec 2 2014, 19:41
Причина редактирования: избыточное цитирование
Go to the top of the page
 
+Quote Post

4 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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