|
STM32F0 + датчик Холла SCM Sunfab |
|
|
|
Dec 1 2014, 16:57
|
Участник

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

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

Группа: Участник
Сообщений: 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. Можно за определенное время накапливать импульсы и по этому параметру определять скорость вращения. Вы получаете сколько зубцов проходит мимо датчика за определенное время.
так какое решение выбираете вы? Давайте я завтра постараюсь уточнить на счет структуры датчика и двухканальности, а потом отпишусь
|
|
|
|
|
Dec 2 2014, 07:39
|
Участник

Группа: Участник
Сообщений: 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] - для короткого!!!
|
|
|
|
Сообщений в этой теме
arthedza STM32F0 + датчик Холла SCM Sunfab Dec 1 2014, 16:57 Golikov A. ну просто если брать мотор для которого положение ... Dec 1 2014, 17:29 arthedza Цитата(Golikov A. @ Dec 1 2014, 19:29) ну... Dec 1 2014, 18:01  kovigor Цитата(arthedza @ Dec 1 2014, 22:01) Напр... Dec 1 2014, 18:05 kovigor Цитата(arthedza @ Dec 1 2014, 20:57) Что,... Dec 1 2014, 17:33 Golikov A. ЦитатаС датчика идет 4 провода: питание, земля и д... Dec 1 2014, 18:26 arthedza Цитата(Golikov A. @ Dec 1 2014, 20:24) по... Dec 1 2014, 18:39 arthedza Цитата(Golikov A. @ Dec 1 2014, 21:28) Во... Dec 2 2014, 07:30  Сергей Борщ Цитата(arthedza @ Dec 2 2014, 09:30) кана... Dec 2 2014, 07:34 Golikov A. Ну тут достаточно применить смекалку:
у вас остал... Dec 2 2014, 08:34 arthedza Цитата(Golikov A. @ Dec 2 2014, 10:34) ..... Dec 2 2014, 09:23  adnega Цитата(arthedza @ Dec 2 2014, 13:23) Прос... Dec 3 2014, 08:03   arthedza Цитата(adnega @ Dec 3 2014, 10:03) Странн... Dec 3 2014, 10:34    adnega Цитата(arthedza @ Dec 3 2014, 14:34) Част... Dec 3 2014, 11:12     arthedza Цитата(adnega @ Dec 3 2014, 13:12) Считае... Dec 3 2014, 11:48     arthedza Цитата(adnega @ Dec 3 2014, 13:12) Считае... Dec 4 2014, 07:11      adnega Цитата(arthedza @ Dec 4 2014, 11:11) Прос... Dec 4 2014, 07:15       arthedza Цитата(adnega @ Dec 4 2014, 09:15) Что ж ... Dec 4 2014, 07:25        adnega Цитата(arthedza @ Dec 4 2014, 11:25) Или ... Dec 4 2014, 08:13         arthedza Цитата(adnega @ Dec 4 2014, 10:13) Мотор ... Dec 4 2014, 09:24 arthedza Следовательно, подходит вариант второй: подсчет чи... Dec 2 2014, 11:08 Golikov A. ну строго говоря надо еще понять какого уровня изм... Dec 2 2014, 19:24 Сергей Борщ А еще обратите внимание на вот это сообщение: http... Dec 2 2014, 21:00 Golikov A. Спасибо, интересная тема. Правда пришлось нескольк... Dec 2 2014, 23:31 Golikov A. периодичность опроса и время реакции системы также... Dec 3 2014, 08:49 Golikov A. 1000-1500 - это 150 - 225 импульсов в 5мСек
6.666... Dec 3 2014, 13:05 adnega Цитата(Golikov A. @ Dec 3 2014, 17:05) Но... Dec 3 2014, 14:16 Golikov A. ну при такой частоте у вас ничего просто не выйдет... Dec 4 2014, 09:55 arthedza Цитата(Golikov A. @ Dec 4 2014, 11:55) ну... Dec 4 2014, 10:16  KnightIgor Цитата(arthedza @ Dec 4 2014, 12:16) Спас... Dec 6 2014, 17:13 arthedza Цитата(Golikov A. @ Dec 4 2014, 11:55) Я ... Dec 9 2014, 08:13 arthedza Вот появился еще такой вопрос: как можно смоделиро... Dec 6 2014, 18:01 Golikov A. а чем симулятор то не годиться?
в IAR, KEIL есть... Dec 6 2014, 18:09 arthedza Цитата(Golikov A. @ Dec 6 2014, 20:09) а ... Dec 6 2014, 18:15 Golikov A. работайте вы скачайте триальную версию на 30 дней,... Dec 6 2014, 18:22 arthedza Цитата(Golikov A. @ Dec 6 2014, 20:22) ра... Dec 6 2014, 18:24 Golikov A. кнопку тактовую и нажимайте рукой...
или с одной ... Dec 6 2014, 18:33 arthedza Цитата(Golikov A. @ Dec 6 2014, 20:33) кн... Dec 6 2014, 18:36 Golikov A. да я в терминал шлю. Раньше был гипертерминал, сей... Dec 6 2014, 21:01 Golikov A. проще временными воротами
точнее методом захвата..... Dec 9 2014, 09:06 arthedza Цитата(Golikov A. @ Dec 9 2014, 11:06) пр... Dec 9 2014, 09:49 Golikov A. ЦитатаПоговорил со своим куратором. Как я понял, н... Dec 9 2014, 14:52 arthedza Цитата(Golikov A. @ Dec 9 2014, 16:52) на... Dec 10 2014, 06:38 arthedza Цитата(Golikov A. @ Dec 9 2014, 16:52) Вс... Dec 10 2014, 07:33 Golikov A. да.
в прерывании вы только определяете интервалы..... Dec 10 2014, 07:16 Golikov A. Ну наверное где-то должно быть деление, потому что... Dec 10 2014, 11:33
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|