Перейти к содержанию

ukr823f

Members
  • Постов

    323
  • Зарегистрирован

  • Посещение

Весь контент ukr823f

  1. Правильно добавил смещение? Осталось еще разобраться насколько это добавленное смещение будет минимизировать ложные сигналы.
  2. Проверил - напряжение 0.10 Вольт на датчике в статичном положении
  3. Не совсем понял как это реализовать. После компаратора стоит МК STM32, который и обрабатывает сформированный меандр .
  4. Я бы не против, чтобы такое не делать. Но бывают ситуации когда без этого "колхоза" ну вот прям никак. Например - установка более новых двигателей с коробкой передач в старые кузова. В современных авто нет датчиков скорости , и все данные о скорости движения авто берется с АБС блока, который в кан шину уже шлет готовую полученную скорость. Но вот в старых кузовах блок АБС такое не умеет, а более новый ЭБУ двигателя, ждет скорости по кан шине :). Как и приборная панель более современная для примера.
  5. Приветствую всех. такой вот вопрос возник. Задача - подключиться параллельно к индуктивным датчикам ABS автомобиля, для получения данных о скоростях вращения колес. Датчики двухпроводные, индуктивные. Уровни напряжений от 200мВ (при малых частотах вращения колес) до 6-12 Вольт ( при высоких частотах вращения колес). Набросал такую схему на компараторе LM293 , и она вроде как работает но не стабильно. Во первых выскакивает ошибка по датчику ABS, во вторых ложные срабатывания появляются, из за чего не стабильно считывается скорость. Может кто подсказать что изменить/добавить в схеме, чтобы работало стабильно? (ошибка вроде ка возникает, после подключения такой схемы к датчику ABS. так как падает сопротивление между землей и сигнальным проводом. Без этой схемы сопротивление около 1.2 кОм, с подключенной схемой - 200 Ом. )
  6. Что то среднее между AD8495 и LMV358 Ну а вообще пусть это будет +- по цене в районе AD8495 но доступное всегда в наличии
  7. Вы можете посоветовать на ваше усмотрение достойный вариант ОУ под однополярное питание для работы с термопарой К-типа . Ну и относительной доступностью так как AD8495 тяжело что то достать)
  8. Посоветовали использовать OP07. Но у меня такой вопрос - питание однополярное 5В. Будет ли нормально OP07 работать? Если что - это я делаю двухканальный термометр на базе термопар К-типа/ Диапазон 100-1000 (1200) градусов Верхний предел по выходному напряжению - 4.5 Вольт
  9. почитал, +- понял про напряжение смещения ОУ. А как тогда скажем так синхронизировать два сдвоенных ОУ, (считай 4 канала) - чтобы измерения были одинаковые при подаче сигнала от одного источника?
  10. Здравствуйте. Столкнулся с такой проблемой - сигнал один и тот же 0-20 mV подаётся на операционные усилители 2шт. ОУ - LMV358. Напряжение питания 5В. При входном напряжении на все каналы 11мВ (подключено всё к одному датчику) - на выходе имеем разброс сигнала от 0.8В до 1В. Что в кодах АЦП естественно - вообще какая то дичь получается. Вопрос - как такой может вообще происходить??? и как сделать так чтобы сигнал на выходе был одним и тем же??? На входе то одинаковый. Пробовал кидать перемычку от массы одного резистора 1К (который на землю идёт) на массу второго резистора 1К... Сигнал немного выравнивается но разница всё же есть...
  11. ukr823f

    USB HID Keyboard STM32F4

    Приветствую всех. Столкнулся с непонимаем -как раьотает код. Делаю имитацию медиа кнопок для управления громкостью, переключением треков в аудиоплеере, запуск аудиоплеера. На STM32F4 собрал простенький проект - просто изменяется громкость вверх и вниз. Сначала собран был просто проект стандартный как все делают в уроках - управление мышью, но потом правдами и неправдами откорректировал дескриптор репорта под мультимедийные кнопки в файле usb_hid.c а так же отредактировал дескриптор конфигцрации USBD_HID_CfgDesc. /* USB HID device Configuration Descriptor */ __ALIGN_BEGIN static uint8_t USBD_HID_CfgDesc[USB_HID_CONFIG_DESC_SIZ] __ALIGN_END = { 0x09, /* bLength: Configuration Descriptor size */ USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */ USB_HID_CONFIG_DESC_SIZ, /* wTotalLength: Bytes returned */ 0x00, 0x01, /*bNumInterfaces: 1 interface*/ 0x01, /*bConfigurationValue: Configuration value*/ 0x00, /*iConfiguration: Index of string descriptor describing the configuration*/ 0xE0, /*bmAttributes: bus powered and Support Remote Wake-up */ 0x32, /*MaxPower 100 mA: this current is used for detecting Vbus*/ /************** Descriptor of Joystick Mouse interface ****************/ /* 09 */ 0x09, /*bLength: Interface Descriptor size*/ USB_DESC_TYPE_INTERFACE,/*bDescriptorType: Interface descriptor type*/ 0x00, /*bInterfaceNumber: Number of Interface*/ 0x00, /*bAlternateSetting: Alternate setting*/ 0x01, /*bNumEndpoints*/ 0x03, /*bInterfaceClass: HID*/ 0x00, /*bInterfaceSubClass : 1=BOOT, 0=no boot*/ 0x01, /*nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse*/ 0, /*iInterface: Index of string descriptor*/ /******************** Descriptor of Joystick Mouse HID ********************/ /* 18 */ 0x09, /*bLength: HID Descriptor size*/ HID_DESCRIPTOR_TYPE, /*bDescriptorType: HID*/ 0x11, /*bcdHID: HID Class Spec release number*/ 0x01, 0x00, /*bCountryCode: Hardware target country*/ 0x01, /*bNumDescriptors: Number of HID class descriptors to follow*/ 0x22, /*bDescriptorType*/ HID_CUSTOM_REPORT_DESC_SIZE,/*wItemLength: Total length of Report descriptor*/ 0x00, /******************** Descriptor of Mouse endpoint ********************/ /* 27 */ 0x07, /*bLength: Endpoint Descriptor size*/ USB_DESC_TYPE_ENDPOINT, /*bDescriptorType:*/ HID_EPIN_ADDR, /*bEndpointAddress: Endpoint Address (IN)*/ 0x03, /*bmAttributes: Interrupt endpoint*/ HID_EPIN_SIZE, /*wMaxPacketSize: 4 Byte max */ 0x00, HID_FS_BINTERVAL, /*bInterval: Polling Interval (10 ms)*/ /* 34 */ } ; __ALIGN_BEGIN static uint8_t HID_CUSTOM_ReportDesc[78] __ALIGN_END = { // 78 bytes //------------------------------------------------------------------------------------------// 0x05, 0x01, // Usage Page (Generic Desktop Ctrls) 0x09, 0x06, // Usage (Keyboard) 0xA1, 0x01, // Collection (Application) 0x85, 0x01, // Report ID (1) 0x05, 0x07, // Usage Page (Kbrd/Keypad) 0x75, 0x01, // Report Size (1) 0x95, 0x08, // Report Count (8) 0x19, 0xE0, // Usage Minimum (0xE0) 0x29, 0xE7, // Usage Maximum (0xE7) 0x15, 0x00, // Logical Minimum (0) 0x25, 0x01, // Logical Maximum (1) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0x95, 0x03, // Report Count (3) 0x75, 0x08, // Report Size (8) 0x15, 0x00, // Logical Minimum (0) 0x25, 0x64, // Logical Maximum (100) 0x05, 0x07, // Usage Page (Kbrd/Keypad) 0x19, 0x00, // Usage Minimum (0x00) 0x29, 0x65, // Usage Maximum (0x65) 0x81, 0x00, // Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position) 0xC0, // End Collection //------------------------------------------------------------------------------------------// 0x05, 0x0C, // Usage Page (Consumer) 0x09, 0x01, // Usage (Consumer Control) 0xA1, 0x01, // Collection (Application) 0x85, 0x02, // Report ID (2) 0x05, 0x0C, // Usage Page (Consumer) 0x15, 0x00, // Logical Minimum (0) 0x25, 0x01, // Logical Maximum (1) 0x75, 0x01, // Report Size (1) 0x95, 0x08, // Report Count (8) 0x09, 0xB5, // Usage (Scan Next Track) 0x09, 0xB6, // Usage (Scan Previous Track) 0x09, 0xB7, // Usage (Stop) 0x09, 0xB8, // Usage (Eject) 0x09, 0xCD, // Usage (Play/Pause) 0x09, 0xE2, // Usage (Mute) 0x09, 0xE9, // Usage (Volume Increment) 0x09, 0xEA, // Usage (Volume Decrement) 0x81, 0x02, // Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position) 0xC0, // End Collection //------------------------------------------------------------------------------------------// }; в основной main файл добавил дефайны. и вот ВОПРОС 1- откуда взялись эти коды??? я перепроверил кучу описаний - с этими кодами ничего не совпадает. Но с ними то всё работает))) , Я пробовал банально 0x40 менять на 0x41 - и ничего не работало. Вот где описание - откуда взялись эти коды и как они работают? // USB media codes #define USB_HID_SCAN_NEXT 0x01 #define USB_HID_SCAN_PREV 0x02 #define USB_HID_STOP 0x04 #define USB_HID_EJECT 0x08 #define USB_HID_PAUSE 0x10 #define USB_HID_MUTE 0x20 #define USB_HID_VOL_UP 0x40 #define USB_HID_VOL_DEC 0x80 Отправка репорта происходит вот этой функцией. Где buffer[0]=2; - Это я так понимаю ID репорта, то есть как раз вот оно - 0x85, 0x02, // Report ID (2) в описание кастом репорта. if(counter<255) { counter++; } else { counter=0; buffer[0]=2; buffer[1]=USB_HID_VOL_UP; USBD_HID_SendReport(&hUsbDeviceFS, buffer, sizeof(buffer)); //Отправка репорта с кодом... } HAL_Delay(2); Если я отправляю код который описан в библиотеках и репорте - то есть за Volume Increment отвечает - 0XE9 То получаю в анализаторе USB вот такие данные как будто нажаты одновременно все кнопки. А вот если 0x80 - то в анализаторе всё чётко и красиво - нажата кнопка Volume Decrement Помогите пожалуйста разобраться в HID устройстве управления мультимедиа. Ну и сторонний вопрос - Это устройство в ANDROID будет точно так же как и в WINDOWS работать? то есть управлять громкостью, переключать треки, отключать звук и т.д или в ANDROID нужно отправлять совсем другие коды???
  12. Поищите такое словосочетание - Дребезг контактов, и как обойти Дребезг контактов
  13. А ещё - Напрмиер если в МК два АЦП. ADC0 и ADC1. Можно например ADC0 - использовать 15 каналов для измерения регулярных каналов, а ADC1 настроить только на инжектированные каналы для работы с мультиплексорами (2-3 штуки). Итого - получается мы не будем мешать работать модулей и т.д и код обработки уменьшиться . Так получиться сделать? И ещё - часть подключаемых датчиков - 0-5Вольт сигнал выдают (тот же дад и т.д). я так понимаю нужно ставить ОУ в качестве повторителя напряжения и на выходе ОУ ставить резистивный делитель, чтобы преобразовать сигнал из 0-5В в 0-3.3Вольт. Сейчас стою перед выбором МК. Или STM32F103R8xx использовать с их 3.3вольтами, или Atmega64 с 5 вольтами и более удобным использованием АЦП.
  14. То есть я например два мультиплексора вешаю на два инжектированных канала и читаю их грубо говоря раз в секунду, а остальные каналы использую как регулярные через ДМА (то есть в автоматическом режиме)?
  15. ukr823f

    АЦП STM32 + мультиплексор

    Приветствую! Товарищи, требуется консультация по АЦП. Собственно процессор STM32F103RET6. Требуется проводить измерения ряда датчиков. датчики делятся на "быстрые" - основные датчики двигателя мотора - MAP, MAF и им подобные сенсоры , а также медленные - типа датчики температур (резистивные) и прочие датчики, которые медленно меняют свои значения. Собственно так как одних датчиков температур до 12 штук, то повесить всё напрямую на АЦП не выйдет, то для "медленных" каналов хочу использовать мультиплексор типа 74HC4051. Вопрос в том - как сделать вариант чтения каналов мультиплексора. В стм немного не такой АЦП как в АВР. В AVR я делал просто - конструкция switch, и дёргаем один канал АЦП, переключая мультиплексор, а потом меряем остальные каналы. Для этого вызываю функцию типа adc_read в которой все эти измерения написаны. А вот в STM32, как данное реализовать что то не пойму никак. То есть измерения должны производится так 1)измеряем 12 быстрых каналов через регулярные каналы (используя DMA) 2)измеряем 13й канал к которому подключен мультиплексор ( производим 8 измерений данного канала) каждое измерение соответствует новому каналу мультиплексора) измерение производим через DMA 3)измеряем 14й канал к которому подключен мультиплексор ( производим 8 измерений данного канала) каждое измерение соответствует новому каналу мультиплексора) измерение производим через DMA Подскажите пожалуйста, как реализовать данный функционал?
  16. Нет потенциометров нужного диапазона для заказа. Минимум это 10К. Резистор для ограничения минимального сопротивления - это имеется в виду нижний диапазон? то есть например 1Ом, при датчике 0-330 Ом. А также дроссель последовательно какой подбирать - чем больше индуктивность тем лучше? Конденсатор после резистора R2 есть смысл ставить для сглаживания?. И насколько я понял, так ка ку нас индуктивности на выходе биполярного транзистора будут (так как питается указатель уровня топлива от 12В), то на выходе надо будет ещё и диод поставить катодом к +12В для защиты транзистора от выбросов?
  17. Нет потенциометров нужного диапазона. У меня вот ещё один вопрос - если пробовать делать на базе ШИМ. какой резистор ставить в цепь - я так и не понял резистор. (диапазон датчика 0-330 Ом) Вот какой резистор ставить при использовании ШИМ в цепи?
  18. Возможно проще, только я так и не понял каким образом задать расчёт тока под нужный диапазон выходного тока . НУжно наверное для начала померить максимальный то в цепи, так как в указателе уровня топлива полюбому стоит калиброванный резистор какой-то, так как не могут же течь большие токи если например у нас на реостате в баке 20 Ом...То ток выйдет большим....
  19. Тогда уж проще биполярный. Только каким образом расчитать его)) Управлять биполярником полюбому с МК с помощью ШИМ, я так понимаю это значит что надо просчитать и RC цепочку чтобы она адекватно сглаживала ШИМ.
  20. Ну так на полевик нужно подавать какое то аналоговое напряжение, правильно ведь? То есть теоретически нужно ставить RC цепочку и уже после неё преобразованный ШИМ от МК подавать на затвор полевика, чтобы он работал в линейном режиме.
  21. Полевик будет менять своё сопротивление от температуры(((
  22. Имеется в виду резистор максимального сопротивления? то есть если в баке релстат на максимум выдаёт 330R, то такой резистор и используем?
  23. Нет такого ЦАП - который сможет от 0 до 300 Ом работать. Минимально найденный 4.7К
×
×
  • Создать...