ArtDenis 0 9 июля, 2015 Опубликовано 9 июля, 2015 · Жалоба adnega, как это есть рабочий код? Вот его последнее сообщение (жирным выделено мной): Спасибо, идея инверсии понятна. У меня заработало. Но непонятки с моей изначальной инициализацией остались :( С управлением регистрами напрямую все равно этот импульс пролазит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 9 июля, 2015 Опубликовано 9 июля, 2015 · Жалоба я так понял инвертировали ШИМ и все работает, а в старом варианте даже с прямым управлением регистрами пролазит импульс. Я так понимаю эти сообщения. Природа импульса как я понимаю в том что на время инициализации ШИМ как раз выдает 1, потом сбрасывается обновлением для принятия новых настроек, и работает штатно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 10 9 июля, 2015 Опубликовано 9 июля, 2015 · Жалоба я так понял инвертировали ШИМ и все работает, а в старом варианте даже с прямым управлением регистрами пролазит импульс. Я так понимаю эти сообщения. Я тоже так понял. Природа импульса как я понимаю в том что на время инициализации ШИМ как раз выдает 1, потом сбрасывается обновлением для принятия новых настроек, и работает штатно. PWM1 устанавливается в единичку в момент update. Если инициализация приводит к update, то на выходе будет единичка. Меня больше волнует вопрос: кто сбрасывает вывод в ноль после формирования пачки импульсов? У меня получается стабильная единичка на выходе в конце. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VCucumber 0 9 июля, 2015 Опубликовано 9 июля, 2015 · Жалоба а как вы формируете _пачку_, в каком регистре тот счётчик ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 10 9 июля, 2015 Опубликовано 9 июля, 2015 · Жалоба а как вы формируете _пачку_, в каком регистре тот счётчик ? Я формирую пачку программно, счетчик в переменной и обрабатывается в прерывании таймера (update). Можно сделать каскадное соединение таймеров, но для двух импульсов с приличной задержкой между ними - по-моему, перебор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VCucumber 0 9 июля, 2015 Опубликовано 9 июля, 2015 · Жалоба я вам о том и говорю: формируете сами - чего ждёте от железа ? если же второй таймер подключить, то там 146% начнёт работать как надо у меня на это только один вопрос остался - обязательно ли первый таймер должен иметь вход брейк или можно как-то на внутренней коммутации или эвентах это замутить ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 10 9 июля, 2015 Опубликовано 9 июля, 2015 · Жалоба я вам о том и говорю: формируете сами - чего ждёте от железа ? Я бы не торопился разделять железо и софт. Нужно грамотно управлять и тем, и тем. Вариантов решения много: самый простой аппаратный - вывод через SPI байта 01000010 с длительностью бита 10мкс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VCucumber 0 9 июля, 2015 Опубликовано 9 июля, 2015 · Жалоба уверены, что заработает ? мега, например, страдала тем, что выводила дополнительную паузу между байтами, типа девятого бита Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 10 9 июля, 2015 Опубликовано 9 июля, 2015 · Жалоба уверены, что заработает ? мега, например, страдала тем, что выводила дополнительную паузу между байтами, типа девятого бита Между байтами путь будет любая пауза. Битовый интервал формируется делителем и очень стабильно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VCucumber 0 9 июля, 2015 Опубликовано 9 июля, 2015 (изменено) · Жалоба меня любая пауза не устраивает, мне нужно заданное количество импульсов заданной частоты и заданной длительности оне ведь даже регистр специальный для этого сделали вот бы он ещё работал согласно своему названию Изменено 9 июля, 2015 пользователем Огурцов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EmbedElektrik 0 10 июля, 2015 Опубликовано 10 июля, 2015 · Жалоба Вобщем господа я забил на эту проблему - тупо перевожу на время инициализации вывод в GPIO. Вобщем STM прекрасно выдает последовательность. На картинке серия из 6ти импульсов со скважностью 25 50 и 75% (попарно). Внизу импульсы гашения со второго канала таймера. Если кто разберется как победить инициализацию - буду признателен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 10 июля, 2015 Опубликовано 10 июля, 2015 · Жалоба я так понимаю что именно как вы и победили. самый первый вывод ШИМ из-за буферных регистров всегда кривоватый ИМХО... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ArtDenis 0 10 июля, 2015 Опубликовано 10 июля, 2015 · Жалоба Вобщем господа я забил на эту проблему - тупо перевожу на время инициализации вывод в GPIO Так вам тут же написали - сразу после инициализации ШИМ выдаёт 1, поэтому импульс и вылазит до момента присвоения TIM2->CNT=15; Можно вместо перевода в GPIO и TIM2->CNT=15 просто при инициализации задать длительность ШИМа в 0, а потом когда, он понадобится, выставить нужное значение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EmbedElektrik 0 10 июля, 2015 Опубликовано 10 июля, 2015 · Жалоба Так вам тут же написали - сразу после инициализации ШИМ выдаёт 1, поэтому импульс и вылазит до момента присвоения TIM2->CNT=15; Можно вместо перевода в GPIO и TIM2->CNT=15 просто при инициализации задать длительность ШИМа в 0, а потом когда, он понадобится, выставить нужное значение. я уже сейчас не помню, потому что чего я только с таймером не делал, но при CNT=0 ширина первого импульса была больше чем должна быть. Вобщем, возможно позже вернусь к этому вопросу, а пока надо деньги зарабатывать :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться