Адаптер датчика оборотов для Graupner HoTT

Девайс представляет из себя небольшую плату (которая могла бы быть еще меньше, если применить двусторонний монтаж). С одной стороны адаптер подключается к приемнику HoTT, с другой стороны подключается к датчику оборотов.

Распиновки со стороны приемника такая:

  1. GND - земля,
  2. V_IN - питание адаптера (5-12В),
  3. Rx,
  4. Tx.

Как и в случае с Heli модулем, в рабочем состянии выводы Rx и Tx должны быть замкнуты, то есть замкнули выводы, подали питание на адаптер, адаптер в рабочем положении. В противном случае адаптер входит в режим установки коэффициента редукции трансмиссии (об этом чуть ниже). Я предлагаю соединять эти выводы проводком типа как в Heli модуле, только там не использовался центральный провод питания, а тут он используется. То есть с одной стороны у нас полноценный сервоудлиннитель (земля питание сигнал), который подключается к приемнику в телеметрийный разъем, с другой у нас колодка на 4 пина и два крайних в ней замкнуты.

Со стороны датчика оборотов контакты такие:

  1. S1 - первый датчик (пока не используется),
  2. S2 - второй датчик,
  3. +5V - используется для питания датчика, если это необходимо,
  4. GND.

Датчик оборотов должен выдавать импулься, кратные числу этих самых оборотов. Импульсы могут иметь амплитуду до 40В, но не менее 4В. Простой пример датчика - это маленький магнитик на роторе и датчик Холла рядом с ним. Этот датчик как раз имеет три ноги: земля, питание, выход. Можно подключить простым сервоудлиннителем. Я использую специальный выход моего регулятора.

Сам адаптер разведен для работы с двумя датчиками оборотов. В принципе и логика обсчета тоже готова (не проверена, правда, пока). Но так как я не нашел удобного способа вывода показаний с двух датчиков в стандартное окно Електрик аир модуля, пока прошивка позволяет работать с одним датчиком (вход S2). Чуть позже покапаюсь с текстовым режимом и сделаю полноценную поддержку двух датчиков. Может быть и настройки после этого будут осуществляться с пульта. В принципе, можно и 4 датчика задействовать, но тут я бы использовал мегу 64, потому как у нее для этого хватит входов внешних прерываний.

Установка коэффициента редукции трансмиссии осущетсвляется аналогично Heli модулю.
Устройство позволяет задавать коэффициент передачи от 0,01 до 99,99. Для магнитного датчика на валу ОР коэффициент будет 1, для случаев с сигналом из ESC, датчиков оборотов, которые вешаются на провода между мотором и ESС, необходимо рассчитывать коэффициент передачи, как шестерней, так и в моторе. В моторе коэффициент передачи равен половине количества магнитов ротора. У меня передатка между валом мотора и ОР составляет 9,18, в моем моторе 8 магнитов, следовательно, моя итоговая передатка получается 9,18 х (8 / 2) = 36,72. Эту цифру мы и запишем в устройство во время настройки.

Для входа в режим программирования необходимо освободить контакты Rx и Tx, а затем подать питание на адаптер. Сделать это можно как со стороны датчика (земля и +5В там есть), так и со стороны приемника (земля и 5-12В). Условием входа в режим программирования являются отсутствие какого либо потенциала на ножках Rx и Tx. Затем необходимо подключить модуль к USB конвертеру тремя проводками (GND – GND, RxD – TxD, TxD – RxD) и подключить конвертер к компьютеру.
Также нужна терминальная программа. В настройках терминалки мы выставляем скорость 19 200 бод, а остальное все как всегда (без четности, 8 бит, 1 стоп бит).

Для установки коэффициента передачи трансмиссии применяется команда, состоящая из одной буква “r” и четырех цифр. Цифры выравниваются по центру, потому как есть дробная часть. Например:

r0918 – устанавливает коэффициент передачи, равный 9,18,
r3672 – устанавливает коэффициент передачи, равный 36,72,
r0100 – устанавливает коэффициент передачи, равный 1,00.

На выполенение команды адаптер должен ответить:

Команда: r3672 Ответ: 36.72 ОК

Только в этом случае можно считать, что коэффициент установлен.
Для любителей покопаться в коде, ниже исходник:


#define u08 unsigned char
#define u16 unsigned int
#define F_CPU 8000000L
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/delay.h>
#include <avr/eeprom.h>
#include <stdint.h>

#define baudrate 19200L
#define bauddivider (F_CPU/(16*baudrate)-1)
#define HI(x) ((x)>>8)
#define LO(x) ((x)& 0xFF)


#define r_gear_ratio_0 0x0066
#define r_gear_ratio_1 0x0067
#define r_gear_ratio_2 0x0068
#define r_gear_ratio_3 0x0069




volatile u08 	USART_msg_number = 0,
				UDR_data[2],
				UDR_set_data[5],
				UDR_tmp,
				sys_status = 0,
				settings = 0,
				tmr_ovf = 0,
				cnt = 0,
				data_update = 0;



volatile u16 	tcnt1, rpm;

volatile float 	gear_ratio;


struct HOTT_EAM_MSG {
        u08 start_byte;                      //#01 start int8_t
        u08 eam_sensor_id;           		//#02 EAM sensort id. constat value 0x8e
        u08 warning_beeps;                   //#03 1=A 2=B ... or 'A' - 0x40 = 1
                                                                // Q    Min cell voltage sensor 1
                                                                // R    Min Battery 1 voltage sensor 1
                                                                // J    Max Battery 1 voltage sensor 1
                                                                // F    Mim temperature sensor 1
                                                                // H    Max temperature sensor 1
                                                                // S    Min cell voltage sensor 2
                                                                // K    Max cell voltage sensor 2
                                                                // G    Min temperature sensor 2
                                                                // I    Max temperature sensor 2
                                                                // W    Max current
                                                                // V    Max capacity mAh
                                                                // P    Min main power voltage
                                                                // X    Max main power voltage
                                                                // O    Min altitude
                                                                // Z    Max altitude
                                                                // C    (negative) sink rate m/sec to high
                                                                // B    (negativeADIF 4 6) sRXC 7 11ink rate m/3sec to high
                                                                // N    climb rate m/sec to high
                                                                // M    climb rate m/3sec to high

        u08 sensor_id;                   //#04 constant value 0xe0
        u08 alarm_invers1;                   //#05 alarm bitmask. Value is displayed inverted
                                                                //Bit#  Alarm field
                                                                // 0    mAh
                                                                // 1    Battery 1
                                                                // 2    Battery 2
                                                                // 3    Temperature 1
                                                                // 4    Temperature 2
                                                                // 5    Altitude
                                                                // 6    Current
                                                                // 7    Main power voltage
        u08 alarm_invers2;                   //#06 alarm bitmask. Value is displayed inverted
                                                                //Bit#  Alarm Field
                                                                // 0    m/s
                                                                // 1    m/3s
                                                                // 2    Altitude (duplicate?)
                                                                // 3    m/s     (duplicate?)
                                                                // 4    m/3s (duplicate?)
                                                                // 5    unknown/unused
                                                                // 6    unknown/unused
                                                                // 7    "ON" sign/text msg active

        u08 cell1_L;                         //#07 cell 1 voltage lower value. 0.02V steps, 124=2.48V
        u08 cell2_L;                         //#08
        u08 cell3_L;                         //#09
        u08 cell4_L;                         //#10
        u08 cell5_L;                         //#11
        u08 cell6_L;                         //#12
        u08 cell7_L;                         //#13
        u08 cell1_H;                         //#14 cell 1 voltage high value. 0.02V steps, 124=2.48V
        u08 cell2_H;                         //#15
        u08 cell3_H;                         //#16
        u08 cell4_H;                         //#17
        u08 cell5_H;                         //#18
        u08 cell6_H;                         //#19
        u08 cell7_H;                         //#20

        u08 batt1_voltage_L;         //#21 battery 1 voltage lower value. opt. cell8_L 0.02V steps
        u08 batt1_voltage_H;         //#22

        u08 batt2_voltage_L;         //#23 battery 2 voltage lower value. opt cell8_H value-. 0.02V steps
        u08 batt2_voltage_H;         //#24

        u08 temp1;                                   //#25 Temperature sensor 1. 0°=20, 26°=46
        u08 temp2;                                   //#26 temperature sensor 2

        u08 altitude_L;                      	//#27 Attitude lower value. unit: meters. Value of 500 = 0m
        u08 altitude_H;                      	//#28

        u08 current_L;                          //#29 Current in 0.1 steps
        u08 current_H;                          //#30

        u08 main_voltage_L;          			//#30 Main power voltage (drive) in 0.1V steps
        u08 main_voltage_H;						//#31

        u08 batt_cap_L;                      //#32 used battery capacity in 10mAh steps
        u08 batt_cap_H;                      //#33

        u08 climbrate_L;                     //#34 climb rate in 0.01m/s. Value of 30000 = 0.00 m/s
        u08 climbrate_H;                     //#35

        u08 climbrate3s;                     //#36 climbrate in m/3sec. Value of 120 = 0m/3sec

        u08 rpm_L;                           //#37 RPM. Steps: 10 U/min
        u08 rpm_H;                           //#38

        u08 electric_min;                    //#39 Electric minutes. Time does start, when motor current is > 3 A
        u08 electric_sec;                    //#40

        u08 speed_L;                         //#41 (air?) speed in km/h. Steps 1km/h
        u08 speed_H;                         //#42
        u08 stop_byte;                       //#43 stop int8_t
      //u08 parity;                          //#44 CRC/Parity
} hott_eam_msg;




ISR (USART_RXC_vect)
	{
	switch (settings)
		{
		case 0:
			UDR_data[1] = UDR;
			if ((USART_msg_number == 0) && (UDR_data[1] == 0x80))
				{
				UDR_data[0] = UDR_data[1];
				USART_msg_number = 1;
				}
				else
					{
					if ((UDR_data[1] == 0x8e) || (UDR_data[1] == 0x80)) sys_status = 1;

					USART_msg_number = 0;
					}
			break;

		case 1:
			UDR_tmp = UDR;
			if ((UDR_tmp == 'r') || (UDR_tmp == 'R'))
				{
				USART_msg_number = 0;
				}

			UDR_set_data[USART_msg_number] = UDR_tmp;
			USART_msg_number++;

			break;
		}
	}




ISR (INT1_vect) //?????????? ?? ?????????? ??????? ????????
	{
	if (cnt < 36) cnt++;
		else
			{
			tcnt1 = TCNT1;
			TCNT1 = 0x0000;
			cnt = 0;
			if (!data_update)
				{
				data_update = 1;
				}

			}

	}


ISR (TIMER1_OVF_vect)
	{
	tmr_ovf = 1;
	}

void UART_INIT (void);
void INT1_INIT (void);
void TIMER1_INIT (void);
void UART_RX_EN (void);
void UART_TX_EN (void);
void SEND_EAM_MSG (void);
void DATA_UPDATE (void);


void main (void)
	{

	DDRD &= ~(1<<1);
	PORTD |= 1<<1;
	DDRD |= 1<<0;
	PORTD &= ~(1<<0);

	sei();

	if (PIND & (1<<1))
		{

		UART_INIT();
		settings = 1;
		UCSRB |= 1<<TXEN | 1<<RXEN;
		_delay_ms(20);

		while (1)
			{
			while (USART_msg_number != 5);

			USART_msg_number = 0;



			for (u08 i = 1; i < 5; i++)
				{
				UDR_set_data[i] &= 0x0f;
				}


			if (UDR_set_data[0] == 'r')
				{

						while (EECR & (1<<EEWE));
						EEAR = r_gear_ratio_0;
						EEDR = UDR_set_data[1];
						EECR |= (1<<EEMWE);
						EECR |= (1<<EEWE);

						while (EECR & (1<<EEWE));
						EEAR = r_gear_ratio_1;
						EEDR = UDR_set_data[2];
						EECR |= (1<<EEMWE);
						EECR |= (1<<EEWE);

						while (EECR & (1<<EEWE));
						EEAR = r_gear_ratio_2;
						EEDR = UDR_set_data[3];
						EECR |= (1<<EEMWE);
						EECR |= (1<<EEWE);

						while (EECR & (1<<EEWE));
						EEAR = r_gear_ratio_3;
						EEDR = UDR_set_data[4];
						EECR |= (1<<EEMWE);
						EECR |= (1<<EEWE);

						///////////////////////////
						_delay_ms(3);

						UDR = ' ';

						while (EECR & (1<<EEWE));
						EEAR = r_gear_ratio_0;
						EECR |= (1<<EERE);
						UDR = EEDR | 0x30;

						_delay_ms(3);

						while (EECR & (1<<EEWE));
						EEAR = r_gear_ratio_1;
						EECR |= (1<<EERE);
						UDR = EEDR | 0x30;

						_delay_ms(3);

						UDR = '.';

						_delay_ms(3);

						while (EECR & (1<<EEWE));
						EEAR = r_gear_ratio_2;
						EECR |= (1<<EERE);
						UDR = EEDR | 0x30;

						_delay_ms(3);

						while (EECR & (1<<EEWE));
						EEAR = r_gear_ratio_3;
						EECR |= (1<<EERE);
						UDR = EEDR | 0x30;

						_delay_ms(3);

						UDR = ' ';

						_delay_ms(3);

						UDR = 'O';

						_delay_ms(3);

						UDR = 'K';



				}//if...


			} // while
	}// if(...







	////////////считываем значения из ПЗУ и формируем коэффициент передачи трансмиссии.

	while (EECR & (1<<EEWE));
	EEAR = r_gear_ratio_0;
	EECR |= (1<<EERE);
	gear_ratio = (float)EEDR*10;


	while (EECR & (1<<EEWE));
	EEAR = r_gear_ratio_1;
	EECR |= (1<<EERE);
	gear_ratio += (float)EEDR;

	while (EECR & (1<<EEWE));
	EEAR = r_gear_ratio_2;
	EECR |= (1<<EERE);
	gear_ratio += ((float)EEDR)/10;

	while (EECR & (1<<EEWE));
	EEAR = r_gear_ratio_3;
	EECR |= (1<<EERE);
	gear_ratio += ((float)EEDR)/100;



	UART_INIT();
	INT1_INIT ();
	TIMER1_INIT ();
	UART_RX_EN ();

	memset(&hott_eam_msg, 0, sizeof(struct HOTT_EAM_MSG));
 	hott_eam_msg.start_byte = 0x7c;
 	hott_eam_msg.eam_sensor_id = 0x8e; //HOTT_TELEMETRY_EAM_SENSOR_ID
 	hott_eam_msg.sensor_id = 0xe0;
 	hott_eam_msg.stop_byte = 0x7d;


	while(1)
		{
		if (sys_status)		SEND_EAM_MSG ();
		if (data_update)	DATA_UPDATE ();
		}
	}

void UART_INIT (void)
	{
	UBRRL = LO(bauddivider);
	UBRRH = HI(bauddivider);
	UCSRA = 0;
	UCSRC |= 1<<URSEL|1<<UCSZ0|1<<UCSZ1;
	UCSRB |= 1<<RXCIE;
	}

void TIMER1_INIT (void)
	{
	TIMSK &= ~((1<<TICIE1)|(1<<OCIE1A)|(1<<OCIE1B)|(1<<TOIE1));
	TCCR1B |= 5<<CS10; // prescale /1024
	TIMSK |= 1<<TOIE1;
	}

void UART_RX_EN (void)
	{
	UCSRB &= ~(1<<TXEN);
	UCSRB |= 1<<RXEN;
	}

void UART_TX_EN (void)
	{
	UCSRB &= ~(1<<RXEN);
	UCSRB |= 1<<TXEN;
	}

void SEND_EAM_MSG (void)
	{
	_delay_ms(5);
	UART_TX_EN ();
	u08 msg_len = sizeof(struct HOTT_EAM_MSG);
	u08 *msg_pntr;
	u08 msg_crc=0;
	msg_pntr = &hott_eam_msg;
	while (msg_len)
		{
		UDR=*msg_pntr;
		msg_crc+=*msg_pntr;
		msg_pntr++;
		msg_len--;
		_delay_ms(3);
		}
	msg_crc &= 0xFF;
	UDR=msg_crc;
	UART_RX_EN ();
	sys_status = 0;
	}


void INT1_INIT (void)
	{
	DDRD &= ~(1<<3);
	PORTD |= 1<<3;
	MCUCR |= 3<<ISC10;
	GICR |= 1<<INT1;
	}

void DATA_UPDATE (void)
	{
	if (!tmr_ovf)
				{

				rpm = (u16)((2160 / (tcnt1 * 0.00128)) / gear_ratio);

				}
				else
					{
					rpm = 0;
					}

			tmr_ovf = 0;
			hott_eam_msg.rpm_L = rpm;
			hott_eam_msg.rpm_H = rpm>>8;
			data_update = 0;

	}


Ну вот собственно и все. Если есть вопросы, задавайте, буду рад ответить. Файлы к статье (схема, печатная плата, прошивка) тут.
UPD: Не так давно выяснилось, что адаптер с текущей прошивкой не корректно работает на передаточным отношении 1:1. Я делал его в основном для вертолета с большим передаточным числом, и думал, что будет достаточно просто “недоразделить” число оборотов и отправить это дело приемнику. Оказалось что нет. Валерий возможно именно об этом пытался мне рассказать в комментариях, но я его не понял, а он был не достаточно настойчив.
Тем не менее, косяк этот я поправил. Не стал делать универсальную прошивку, сделал “экспресс” прошивку для систем с передаточным числом 1:1 и диапазоном до 15 000 об/мин. Адаптер считает и дальше, но там цена деления одного тика таймера уже получает очень высокой, но грубо оценить обороты можно. Ничего настраивать в этой прошивки не нужно. Залил, подключил и полетел. Прошивка доступная по ссылке. Не знаю, буду ли делать универсальную - очень туго со временем. Пока так.

  • 2269
Comments
vadimip

Очень круто! Этот модуль захотелось повторить:)
USB конвертер имелось в виду USB-UART адаптер?

sirQWERTY

Да, обычный USB-UART адаптер.

sirQWERTY

Еще забыл на схеме указать, диоды на входах с датчиков оборотов стоят такие: STPS0540Z. Компактные, до 40 вольт обратное напряжение, прямое падение порядка 0,5 вольта.

ukr100

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

sirQWERTY

Я не использую датчик холла. У моего регулятора есть выход специальный, на котором скважность сигнала прямо пропорциональна оборотам. По датчикам я бы начал с SS461A. Для начала посмотрел бы, как он работает. Для этого на его соответствующие ноги необходимо подать питание (5 вольт). К сигнальной ноге надо подключить простой мультиметр и поднести к датчику свой магнит. При этом в определенный момент на сигнальной ноге должны появиться 5 вольт (или чуть меньше), при уводе магнита - опять ноль. Если все так, смело ставьте этот датчик - все будет работать.

ukr100

Сергей приветствую спасибо понял, а не подскажешь еще последовательность действий, сварганил я плату, проверил мегу8 залил в нее прогу дабы светодиод мигал, работает, это я ти-по учусь 😃, у тебя в папке со схемой два файла какой для заливки в микросхему RPM_sensor.b#1 или eagle.epf, я пробовал заливать программой ponyprog2000, но там таких расширений нет, но она их открывает, но я побоялся заливать.
Или микросхема должна быть чистая и заливать все как ты писал выше с помощью USB-UART адаптер и граупнеровского софта, проясни пожалуйста.
Я аир модуль имею представляю как все делается у граупнера, а тут не совсем понял, если можно по подробнее 😃, за ранее спасибо !

sirQWERTY

Валерий, я посмотрел, что-то линки мои все развалились. Сейчас попарвлю.
В общем ссылку поправил, вроде есть контакт. Если какие проблемы с сылками, пишите, буду чинить. Когда сразу сделал, все проверял, но гуглдрайв решил отнять права для просмотра (снял шару).
По поводу прошивки. Я понипрогом не пользовался, но слышал про него. Думаю сгодится. Тем более если ты пишешь, что тестовую прошивку для мигания диодом понипрог закачал, то значит все хорошо.
Не забудь прошить фьюзы. Если все в точности по моей схеме, то фьюзы такие:
младший 0хEF 11101111
старший 0хCB 11001011
нотация прямая, AVRовская, то есть 0 - включено, 1 - выключено. Обрати на это внимание. Зачастую такая нотация вызывает путаницу: как так, обычно 0 это выключено, 1 это включено. Но атмеловцы установили такую, какую установили. И по такому принципу работают большинство программаторов. Но есть и другие программаторы. Поэтому будь внимателен, иначе можно залочить чип.
А вообще установкой фьюзов отличных от дефолтных я просто установил работу от внешнего кварца. Еще заметил, что у мег 8-ых, с которыми я имел дела (это обычно корпус TQFP-44) по умолчанию включен Watch dog timer, который по истечению некоторого времени тупо сбрасывает контроллер. Не сразу я догадался в чем дело, на других контроллерах АВР я такого не встречал. Выключается он тоже в фьязах. Впрочем, в приведенных выше фьюзах необходимый для отключения watch dog таймера бит уже установлен в нужное положение.
Теперь что касается файлов. Прошивать надо файл не из папки Board, там только печатка. Это рабочая папка программы Eagle. Файл для прошивки лежит по следующему пути: 1ch_rpm_sensor\1ch_rpm_sensor\default\1_ch_rpm_sensor.hex. Прошивать надо его. К адапрету ЮСБ - УАРТ подключаться надо уже после прошивки по инструкции из статьи.
Еще один момент: не спеши откусывать прошивающие провода. Попробуй сначала работу. Я сейчас глянул на свой гугл драйв, че-то там каша какая-то. Если не будет работать, пиши, будем разбираться.

ukr100

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

sirQWERTY

Валерий, почему Вы упорно ищите не те файлы для прошивки?
Я постом Выше написал, что файл должен быть с расширением .hex, и приводил путь до него.
Стоп, для какого граупнера ты ищешь прошивку? Если для пульта с приемником, то там ничего не надо прошивать. Аппаратура по умолчанию поддерживает ЕлектрикАир модуль, соответсвенно поддержит и этот адаптер.
А так прошивки для аппы лежат на сайте производителя. Прошивка аппы подробно описывалась в профильной теме не раз.

ukr100

К адапрету ЮСБ - УАРТ подключаться надо уже после прошивки по инструкции из статьи.

.hex файлом я прошил, ну а теперь как я понял по выше написанном надо залить еще что то в него или это все ?
Подсоединил я его и ничего, передатчик не видит, подсоединяю аир модуль все работает, а от прошивки как то зависит у меня не очень свежая на передатчике пишет 1.731, передатчик и приемник зашит одной прошивкой, в смысле одинаковые.
И еще вопрос я развел плату на один датчик подсоединил к 32 ноге микросхемы правильно или надо было к первой ?
Проверил еще раз то что заливал (хех файл) считалось нормально, а как то еще можно проверить что адаптер работает ?

ukr100

Сергей а ты какой программой прошиваешь AVR ?

sirQWERTY

Валерий, я прошиваю eXtreme burner AVR. Прога ищется в сети легко.
Датчик надо подключать к 1 ноге (вход int1). Если твой монтаж не позволяет быстрой перекинуть ввод на эту ногу, я перекомпилирую тебе программу.
Что касается прошивки пульта, я не помню, какая у меня. Вечером приду домой, гляну.
Слышал люди говорили, что у граупнера была какая-то серия прошивок, где они хотели сделать более хитрое определение модулей. Может у тебя такая, не знаю.
По идее, если все прошил правильно (фьюзы и прошивку), чип тот, который нужен, то адаптер должен определяться сразу после прошивки. Куда подключен датчик значения тут не имеет. Попробуй на всякий случай питание подать сначала на приемник, чтобы запитался адаптер (или на адаптер отдельно, но раньше, чем включишь пульт). Знаю, что это не правильно, но для эксперимента попробуй. Ах да, есть еще одно условие есть: ноги RxD и TxD на адаптере должны быть замкнуты. Этот нюанс описан в статье, почитай…
Как вариант, попробуй подключить девайс к компу. Подключать РхД и ТхД отдельными проводам к ЮСБ-УАРТ контроллеру надо. Ну и компанды поотправляй, как в статье описано. Будет отвечать или нет…

ukr100

Урааааа 😃 заработало, таки ты был прав фьюзы не так выставил 😃
Для программы PonyProg2000 ставим так :
Старший верхняя строчка : 00101100
Младший нижняя строчка : 00010000
Там где единица ставим галочку !!! нолик пустой квадратик !!!
Сергей я даже и не знаю как с тобой рассчитываться буду 😃

Теперь засада дальше определился он у меня как ELECT. AIR пощелкал по меню, но обороты не нашёл есть напряжение, два сенсора температуры, альтиметр, скорость но оборотов нет …

sirQWERTY

Ну здоров, Валерий, что все заработало. Я на самом деле рад. Потому как занимался я этим больше чем на половину для того, чтобы приоткрыть завесу на нашем форуме над протоколами HoTT и обозначить какую-то отправную точку для самодельщиков, кто мог бы делать свои устройства. И лишь частично для того, чтобы … любопытство свое утолить наверное. Я свои изделия на своих моделях не применяю (оказалось - нет в этом необходимости). Соответственно и рассчитываться со мной не надо никак.
Ну это так, лирика…
По поводу отсутствия оборотов… Возможно дело в прошивке самой аппы. В моих прошивках (их было две - одна заводская, вторую ставил, когда появился SUMD) обороты отображаются на главном экране (где все в куче) - верхний правый угол, и при пролистывании спец экранов правым тачпадом появлялся спец экран, где крупным написано RPM и крупные цифры…
А на родном электрик аире у тебя есть спец экран с оборотами?
ЗЫ, вот как раз понипрог видимо и использует инверсивную нотацию для фьюзов…

ukr100

А на родном электрик аире у тебя есть спец экран с оборотами?

на моем пишет GENERAL и когда его выбираю пролистываю там есть крупное окно RPM

sirQWERTY

ОК, вечером приду, посмотрю как у меня, какие прошивки в аппе (я кажется вчера обещал, но забыл), подключу этот модуль, сделаю фотку что и как.

sirQWERTY

Валерий, вчера опять что-то закружился, исправляюсь:
Версия прошивки пульта:

и приемника:

sirQWERTY

так выглядит подменю Sensors меню Telemetry в пульте:

Так выглядит общий экран EAM (один щелчок вправо на правом таче из главное экрана пульта):

А так выглядит спец экран с информацией об оборотах. У меня это 6 щелчков вправо по правому тачу из главного экрана EAMа:

Ну и до кучи общий вид системы:

ukr100

Сергей, что то невидно картинок 😦 ,я и другим браузером пробовал и ничего, пустые квадратики…
То что пришло на почту зашло по ссылке прям на картинки, но пришло только первое письмо, там где версия прошивки явно у тебя новее щас попробую обновить

ukr100

Сергей приветствую ну очередная победа, перешил на последнюю прошивку 1.782 и в меню появился экран с оборотами.
Теперь очередная засада, подключил датчик на вход SS443A вожу магнитом и ничего не происходит, сигнал подал на первую ножку микросхемы, меряю там напряжение в спокойном состояние показывает 3,55 вольт, когда начинаю водить магнитом напряжение скачет иногда падает до 0.5 если быстро , то-е хочу сказать реагирует, но на табло передатчика ничего не меняется 😦 , что еще может быть не так ?
Еще пробовал подключать родной граупнеровский датчик аналогично молчит.

sirQWERTY

Валерий приветствую. Поздравляю с очередным шагом. Датчик не будет реагировать на просто магнит. Есть минимальная частота сигналов, после который начинается отсчет оборотов. Сложно сделать датчик на бесконечный диапазон да еще и с приличной точностью, и что бы информация обновлялась в приемлемый интервал времени. По крайне мере цифровой.
В общем я точно не помню, но датчик начинает работать при частоте сигналов, эквивалентному не менее 50 об/мин, а то и 100 об мин. Зато шаг 10 об/мин, и приличная математика до 100 000 об/мин (это все на память).
Если у тебя есть электрический бесколлекторный мотор аутраннер, включи его и поднеси к ротору свой датчик. Он должен реагировать на магниты в роторе и что-то показывать. Или найди любой другой источник сигнала с определенной периодичностью.
Диапазон напряжений в твоем случае достаточен для работы датчика. То, что в спокойном состоянии у тебя 3,55 вольт на 1 ноге, это тоже все правильно.
С фотками и правда беда. Чертов гугл диск. Завтра на работе поправлю.

ukr100

В общем нашёл моторчик сделал диск запрессовал магнит, для проверки с начало подсоединил граупнеровскую телеметрию показала 3045 т.об, подсоединяю свою и ничего не показывает ноль… потом еще добавил банку раскрутил до 7000 т.об и ничего, еще больше надо оборотов ?
Мне бы желательно что бы работало в диапазоне от 2000 до 40000

sirQWERTY

Валерий, а ты устанавливал коэффициент редукции через комп и USB-UART переходник?
И еще один совет. Когда меняешь граупнеровский модуль на самодельный, “перевключай” пульт. Бывает что модуль не инициализируется как следует, а пульт, не будучи перезагруженным, показывает менюшки бывшего модуля.
Да, щас посмотрел, на свежепрошитом адаптере коэф редукции получается 0. Соответственно любой входящий сигнал умножается на этот самый 0.

ukr100

Валерий, а ты устанавливал коэффициент редукции через комп и USB-UART переходник?

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

sirQWERTY

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

ukr100

да я читал и там и здесь, через чур за мудро 😃 для меня много вопросов, я больше технарь, может потом, если не трудно подправь сбрось ukr100@bk.ru, за ранее огромнейщее СПАСИБО 😃

ukr100

Сергей приветствую, получил, прошил, все заработало как швейцарские часы 😃, ты просто МЕГО-МОЗГ !!! спасибо огромнейший, терминалкой как то на досуге надо будет разобраться, дабы тебя лишний раз не тревожить.
Теперь вопрос, когда отважу датчик от магнита цифры оборотов замирают в таком же состоянии последнего показания, не сбрасываются на ноль, потом подвожу и опять показывает, это так задумано ?
И второе записал в лог пытаюсь прочитать, а там все пусто, то-е лога в меню Electric нет или куда оно его пишет где можно глянуть статистику?

sirQWERTY

Валерий, привет. Рад, что все получилось. По поводу “не сбрасываются обороты”… не должно вроде быть так. Надо глянуть еще раз на программу.
По поводу лога писал в статье про хелимодуль. Его действительно нет, почему его нет, я не разобрался. Хотя вопрос конечно интересный, думаю разобраться стоит. Правда тут придется опять на немецкий форум лезть, не люблю это дело, потому как в немецком абсолютный ноль…
Если терминалку освоишь, то та прошивка, которую я тебе вчера отправлял, не пойдет. Шей прошивку из ссылки в тексте статьи.
UPD: Сейчас глянул, в программе есть косячок, из-за которого не сбрасывается счетчик при резком уводе датчика. Я когда тестировал у меня обороты прибавлялись/убавлялись с подсоединенным датчиком и такой косяк не вылезал. Прошивку вечером, если не забуду, поправлю.

ukr100

Всем привет, ну вот как говорится с благословением Сергея и моими потугами 😃 заработало !
Работает отлично есть пару нюансов но это такое думаю решаемо, но есть один нюанс который сделать по словам Сергея проблематично для него, не ведет логи может быть кто нибудь поможет с этим разобраться, дабы довести адаптер до логического конца.

Ооо картинки появились надо было просто сжать 😃

ukr100

Всем привет, нашёл одну засаду в схеме, обнаружилось когда стал подключать в модели, подключил и не работает, промучился часа 3 и разные приёмники пробовал и платы у меня их несколько и не работает, хотя зимой когда делал всё нормально работало, потом в процессе … подключил аккумуляторы 4х баночные то-е 5.4 вольта, ОПА ??? заработало, на моделе стоит аккумулятор из 5ти банок то-е 6.8 вольта, подключаю не работает, в общем меряю напругу после стабилизатора а там более 5.5v а амега до 5.5 вольт рабочее напряжение, лечение по схеме кто будет повторять резистор R27 ставьте 100 ом !
И Сергей тебе вопрос, не научил еще софт ложить логи в передатчик ? а то уже пора на воду 😃

sirQWERTY

Валерий, приветствую. Если мне память не изменяет, я эту схему откатывал на шестибаночном сетапе. Все работало. Стабильник у тебя такой же? Сейчас пересчитал еще раз напряжение по формуле из даташита, плучается 5,1-5,2 вольта. Стабильник LM1117 ADJ. В любом случае напряжение за стабильником измерить во время монтажа очень не лишне.
По поводу логов, к сожалению, не занимался. Это надо немецкий форум штудировать, для меня это не очень приятное занятие. Никак духом не соберусь.

ukr100

Сергей привет, непонятно но я померял напруга была за 6ть воль, это при 5ти банках, но только заряженных, даже понизив сопротивление до 220 ом было много, он запускался через раз, раз запустится раз нет, ну да ладно хоть так решил проблему, мало ли может кому поможет.
Сережа вопрос к тебе еще, а где то в передатчике можно выставлять ограничение по оборотам, что бы он пищал если идёт превышение Н оборотов ?

sirQWERTY

Валерий, привет. Извини, сразу не заметил твое сообщение. Оповещение на этом форуме работает не важно.
Про писк при превышении оборотов, в этом адаптере я не делал. Это зависит от самого адаптера, а не от пульта. Именно он генерирует флаг, по которому пищит пульт. В хелимодуле такая опция есть, можно задать пороговое значение напряжения на банке, при котором пульт пищит. Тут этого не делал, потому как не видел смысла.

ukr100

Сергей привет, жаль спасибо за пояснение, для ДВС было бы не плохо…, твой девайс очень пригодился на все модели поставил многое прояснилось.

sirQWERTY

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

sirQWERTY

В записи появился апдэйт.