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

sayberex

Участник
  • Постов

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

  • Посещение

Репутация

0 Обычный

Посетители профиля

707 просмотров профиля
  1. CanOpen

    В документации по CanOpen сказано 1) Передачу Авральных обектов выполняет генератор срочных сообщений. 2) Аврвльные обекты передаються в сеть только один раз за событие. Здесь мне немного непонятно что имееться ввиду. От у меня между передачей аврального обекта возникло две ошибки и как я должен поступить. 1) Я должен послать два авральных сообщения по одному на каждую из возникших ошибок в пределах одного события генератора авральных сообщений 2) Я должен послать в сеть только один авральный обект каждый раз когда генерируеться события?
  2. Меня заинтересовал протокол верхнего уровня TTCAN(Time-triggered CAN). Хотел поинтересоваться имел ли кто нибудь опыт применения этого протокола для MCU. На сайте организации CAN in Automation есть описание этого протокола, но я так понимаю что это только описание протокола а не его спецификация я никак не могу найти саму спецификацию, платная ли эта спецификация? и где можно почитать лицензионное соглашение по поводу применения протокола в коммерческих целях, есть ли какие нибудь ограничения или я могу применять его свободно. Существуют ли какие нибудь исходники для TTCAN и утилиты по диагностике. Протокол относительно недавний и информации в сети не достаточно да и здесь этот вопрос не поднимался думаю многим будет интересно получить эту информацию. Спасибо за ответы.
  3. STM32 & Timers

    Да вы правы я невнимательно почитал DataSheet из чего следует что у меня есть TIM6 & TIM7 - 2 basic timers TIM2, TIM3, TIM4, TIM5 - General purpose timers TIM1 & TIM8 - Advanced timers Я надеюсь теперь я правильно понимаю сколько и каких таймеров в моем(STM32F103VE) MCU? Да нет это еще далеко не весь комплект ибо в полном комплекте на сколько я понимаю исходя из Reference Manual их может быть аж 14 и это не считая всяких WatchDog а о SysTick и говорит нечего так как он является частью cmsis то понятное дело что есть у всех MCU с ядром Cortex.
  4. И в добавок к сказанному scifi я еще дописал бы неправильные вычисления при работе с указателями когда попадаешь на access violation к примеру ну и еще наверное некорректные математические вычисления результатом коих может быть к примеру деление на ноль. А коли при вычислениях вводятся разные параметры то и ошибка вычисления может вылезать не каждый раз в коде в котором якобы ничего не менялось.
  5. STM32 & Timers

    Target MCU - STM32F103VE Всем привет. Помогите разобраться с одним нюансом. Я никак не могу понять сколько таймеров в данном МК и где это можно выяснить. Вопрос с первого взгляда глупый но это только с первого взгляда. Как известно из Reference Manual существуют 3 типа таймеров 1. Advanced Timer 2. GPIO Timer 3. Basic Timer В Keil IDE там где описание контролера написано 16-bit Timers with Input Capture, Output Compare and PWM, //причем сколько их тут не уточняется 2 16-bit Advanced Timer, 2 16-bit Basic Timer На сайте производителя написано следующее 12 or 16 bit Timers 8x16bit(24/24/28) - я так понимаю имеется ввиду GPIO таймеры хотя что это за три цифры в скобках непонятно Other timer functions 2x 16 bit basic timers //при этом ни про какие Advanced Timers про которые писали в Keil тут не упомянули так скоко и кааких таймеров находяться внутри stm32f103ve?
  6. У меня еще один вопрос как активировать прерывание CAN TX на STM32 но так чтобы не посылать в сеть никаких данных.
  7. Еще немного поэкспериментировал с CANOpen зашел в очередной тупик. Проблема в алгоритме отправки сообщений. Вот мое видение алгоритма отправки. В конце алгоритма обработки проверять нет ли новых сообщений для отправки и запускать очередь отправки сообщений если она прервалась а сообщения готовые к отправки появились. void ProcessMain(void) { //Heartbeat or Node Guard process if CO_CANRX[NMT_MSG].NewMsg { if CAN_TransmitStatus(CAN1,1) == CANTXOK { //Transmit NMT Node Status CO_CANTX[NMT_MSG].NewMsg = 1; } } //Emergency message process .... //SDO Service process .... //Process User -> processing PDO and other if (IsNewMsg()) { \\если есть сообщения для отправки if (!IsSequenceRun) { \\Если очередь прерываний завершина то снова запустить StartTXSequence(); } } } Может кто то видит в этом алгоритме какой нибудь недостаток или предложит лучшую реализацию. И вобще правильно ли что синхронные PDO будут отправляться в ProcessUser или им нужен свой таймер чтобы они отправлялись по четко детерминированному времени тогда это вызывает много вопросов. Планируется что ProcessMain может вызываться как внутри основного цикла так и в Timer ISR.
  8. Если тебя устраивает PCI шина то глянь сюда http://www.icpdas.com/products/Remote_IO/c...piso-can200.htm. SocketCAN Driver The SocketCAN is based on the Linux operating system, and it contains the implementation interface of the network stack and the hardware driver. The hardware manufacturers program the hardware driver for the SocketCAN, and the network stack provides the standard BSD Socket APIs for users. Therefore, from the users’ point of view, they can easily and quickly program their applications without being familiar with the various APIs of the different hardware interface through the SocketCAN network stack. Features: Support Linux kernel version 2.6.31~2.6.34 (x86 hardware platform only). Provide CANopen/DeviceNet master static library. Standard interface for SocketCAN package. Users can use extended BSD socket APIs, you can program the CAN application as building a socket program. Support Virtual CAN interface. Users can map several virtual CAN port into one physical CAN port. Each virtual CAN port has its own socket. Through these sockets, users can build the multi-thread application more easily. Provide the RAW socket, CANopen master and DeviceNet master demos. Good price-performance for economical applications.
  9. Спасибо тебе большое за ответ помогло. Я натупил конкретно пытался передать данные с предопределенным SDO(rx) а надо было SDO(tx).
  10. CANOpen Details

    Начал я для себя реализацию CANOpen под STM32 микроконтроллеры. Пытаюсь портировать CANOpenNode и попутно разобраться как же работает CANOpen. Приобрел интерфейсную плату (PISO-CAN200D, PCI to CAN, 2 channel) от ICP-DAS. Они также поставляют библиотеку CANOpen Master Library для винды. И даже шаровый OPC сервер (вдруг кому интересно). Так вот к библиотеке идут примеры. Запускаю я один из них и при инициализации он у меня спрашивает NMT состояние моего слейва ответ проходит успешно потом через SDO сервис как я понимаю он у меня запрашивает отдать ему COB ID SYNC я посылаю ответ а он мне говорит мол таймаут. Что в моем ответе не правильно? Запрос с PC STD ID = 0x606 RTR = NO Length = 4 Data[0] = 0x40 Data[1] = 0x05 Data[2] = 0x10 Data[3] = 0x00 Ответ от MCU STD ID = 0x606 RTR = NO Length = 8 Data[0] = 0x40 Data[1] = 0x05 Data[2] = 0x10 Data[3] = 0x00 Data[4] = 0x80 Data[5] = 0x00 Data[6] = 0x00 Data[7] = 0x00 Кстати не взирая на то что утилита говорит тайм-аут ответ от меня все равно приходит(проверял в CAN Utility от ICP-DAS) просто у нее наверно тайм-аут означает как то что истекло время ожидания так и неправильный ответ.
  11. Ну именно так и советуют поступать в документации по Keil RTX(делать высокоприоритетную задачу и будить ее по какому нибуть эвенту который генериться в UART ISR при приходе символа) но от что меня беспокоит в таком случае и проблема в дополнительных затратах в ресурсов тут менее приоритетна допустим мы работаем на скорости 115200 б/c фрейм для одного байта = 1старт бит + 8 бит данных + 1 паритет + 1 стоп бит = 11 бит для передачи одного байта период соответственно равен T = около 10 мкс тость 20 мкс для передачи 2х символов а для скоростей повыше и того меньше будет. В моем мк к примеру UART аж до мегабита раскочегарить можно если те ошибаюсь боюсь что при таком раскладе и 5 пакетов будет принимать только 1 нормально или может я не прав? С чего такие опасения я раскажу я тут писал ModBus TCP(на lwIP) и как заглянул в Ethernet ISR Handler а код там будь здоров или кто то в критическую секцию зашел от мы и начали пропускать наши байты в UART Thread.
  12. Есть у меня задача реализовать библиотеку для ModBus чтобы она работала через RS232 и RS485 чтобы могла легким движением руки быть ASCII и RTU и чтобы можно быстро ее прикрутить к любому UART на контролере коих на моем микроконтроллере три(согласно CMSIS для Cortex как я понимаю). Все это делаю я для микроконтроллера Luminary с помощью Keil если вдруг кому интересно. Так вот в чем собственно вопрос хочется чтобы библиотека могла работать как отдельно так и вместе с RTOS я для себя выбрал Keil-RTX но дело в том что, то что я написал сам пакет собирает(но необрабатывает) в прирывании а как я почитал в кейловской книге RL-ARM Getting Started раздел Interrupt Handling что RTOS не очень любят а вернее сказать вобще не любят что то долго делать в прерывании что как я понимаю плохо сказывается на шедулере так как я пишу системы реального времени то это может быть критично. Так вот оправдан ли такой подход или если я вдруг хочу использовать RTOS то мне придется переписывать код чтобы он был под нее и заточен то есть отдельную библиотеку для RTOS.
  13. AD85555

    насчет времени интервалов тут правильно было сказано 5 мкс для ноля и 80 мкс для еденицы и не забудте что между ними есть еще пауза которая у меня 15 мкс, я зделал так и у меня все работает, устанавливаютя коэфициенты усиления(оба) и смещение напряжения. Токо следует учесть при таких малых пульсациях время наростания сигнала потому как уровень логической еденицы будет воспринят токо выше (0.8 * VDD). У меня другая проблема при подключении тэнзодатчика CAS(MODEL: SBA-100L) CAP 100kgf R.0 3mV/V Напряжение питания тензодатчика и AD8555 3.2 V На выходе наблюдается напряжение около 2.61 В када я в режыме симуляцыи устанавливаю значение 255 для Voltage Offset то напряжение становится равным VDD(3.2) и меняется в сторону убывания от 3.2 до 2.61 установка коэфициентов усиления влияет токо на силу нажатия на датчик чем коэфициенты больше тем с болие легким усилием меняется выходное напряжение но диапазон не увеличивается. так вот суть вопроса на сколько я понимаю то диапазон выходного напряжения должен менятся в во всем диапазоне напряжения питания а у меня он меняется только в диапазоне около 0.7 V почему? в даташыте и в том Application Note что здесь давали ссылку по поводу диапазона выходного напряжения вобще ниче не сказано.
×
×
  • Создать...