LINUX.ORG.RU

Тайминг в Расбери Пи

 , ,


0

2

Всем привет. Такая запара: надо управлять шаговым двигателем средствами расбери пи. Не могу найти четкого тактирования или хоть какой-то годный код, где бы это было сделано аппаратно. Самое приближенное, что нашлось, здесь:

http://abyz.co.uk/rpi/pigpio/code/minimal_clk.zip

но что-то я вообще не пойму, как оно работает и что ему надо послать через консоль (то ли 1k, то ли просто один 1 или просто k, если мне , например, нужно 19,2 честных МГц)

Должен же быть какой-то простой способ получить неплавающие импульсы от такой то железки, на которой, по словам очевидцев, чего только не реализовано, ну и поуправлять ими



Последнее исправление: Tumyq (всего исправлений: 2)
Ответ на: комментарий от anonymous

Вот вы все пеняете на свой профессионализм и жалуетесь на меня), а решения для более высокой частоты, чем 10 шагов в секунду предложено не было. Я просто не стал рассматривать неаппаратное решение, потому что уже попробовал стандартные API в wiringPi и bcm2835, которые давали мне примерно то же самое: от 1 до 5 ms на такт. К слову говоря, если вы утверждаете, что не может быть 5V, а вы видели сам board ЕМНИП? Я - нет. Практически все такие борды питаются от USB 5V, до 3V понижается стабилизатором напряжения, и на самом борде вполне могут быть реализованы выводы, которые не напрямую с мк будут давать логическую 1 в 5V, как говорится транзистор в помощь. Думаю, уравнения Максвелла не обидятся, если не напрямую) В любом случае, спасибо, что откликнулись)

Tumyq
() автор топика
Ответ на: комментарий от gag

Ага, спасибо, посмотрю, интересно

Tumyq
() автор топика
Ответ на: комментарий от Tumyq

решения для более высокой частоты, чем 10 шагов в секунду предложено не было

Откуда взялись 10 шагов в секунду? Я говорил о стабильном вращении на 100 шагах в секунду. Дальше уже меандр плывет и в конце-концов все упирается в производительность «малинки».

С ШИМ такого не будет, т.к. он работает от встроенного таймера и планировщик линукса никак на его стабильность не повлияет.

Но, я уже говорил, что нет никакого смысла крутить шаговик с постоянной скоростью, пытаясь эмулировать таким образом синхронник какой-нибудь. Для этого есть правильные моторы и частотные приводы. «Лепить горбатого» себе может позволить разве что какой-нибудь нищеброд вроде меня или в рамках хобби, когда лишних 100тыр выкидывать не хочется.

Можно хотя бы поверхностно получить представление о том, что за задача поставлена, что нужно «малинкой» движок накручивать? Если дело лишь в сетевом доступе, то можно взять STM32Fx07 какой-нибудь или более поздние модели, где есть сеть и при помощи lwip можно организовать нормальную работу сокетов (а то и веб-морду запилить на вебсокетах или запросах).

anonymous
()
Ответ на: комментарий от anonymous

100 шагов мне тоже маловато. Там банально нужно крутить или останавливать червяка по которому ездит полочка влево или вправо. Плавно регулировать скорость не нужно, достаточно одной средней

Tumyq
() автор топика
Ответ на: комментарий от anonymous

Насчёт отдачи 5В я был не уверен, знал только то, что они могут принимать 5в без риска сжечь мк. Но, вообще, я думаю, что ТС мог бы прикрутить к своему шаговику обыкновенный драйвер (тот же A4988) и рулить им с чего угодно. Хоть с малины, хоть с мк.

Unicode4all ★★★★★
()
Ответ на: комментарий от Unicode4all

Кто такой ТС?

Как раз таки был уверен

Tumyq
() автор топика
Ответ на: комментарий от Tumyq

Тогда мне еще больше непонятно: зачем там шаговый двигатель, если не нужно точное позиционирование? Взять двигатель постоянного тока, H-мост для него, повесить управление мостом на два пина GPIO (чтобы задавать направление движения или останавливать), еще на два пина завести концевики — вуаля!

anonymous
()
Ответ на: комментарий от Unicode4all

Мы всю тему и талдычим насчет «обычного драйвера». Не мосфеты же лепить и диаграмму генерировать!

Я вот не понял только, почему ТС до сих пор не попробовал ШИМом дергать свой шаговик, если ему так хочется именно шаговик иметь: врубил ШИМ с заполнением 50% и нужной частотой — движок закрутился. Вырубил — движок остановился. можно и рампы простые задавать, на ходу частоту меняя...

anonymous
()
Ответ на: комментарий от anonymous

Да, можно и не вырубать ШИМ, а только снимать напругу удержания с мотора (у ТС червяк, так что там удерживать не надо ничего).

anonymous
()
Ответ на: комментарий от anonymous

Я здесь, можно сразу меня спрашивать.

Да потому что это был вопрос темы - КАК ЭТО СДЕЛАТЬ на расбери. Вот врубите и покажите, как.. (код). Зачем говорить слова, которые и так известны, выложите код, который стабильно делает не 100 шагов в секунду, а 5к, вот и все (на расбери).

Tumyq
() автор топика
Ответ на: комментарий от Tumyq

У тебя есть время одуматься и задействовать ШИМ на своем stm32f103c8. :) Использовать малину для этого — стрелять из пушки по воробьям. Она годится как устройство управления, которое будет рулить твоими МК при помощи команд, посылаемых ведомым МК.

Если ты прям совсем не желаешь даже говорить о применения данной конфигурации, то нужно было при создании треда налепить тег «хочется странного». В таком случае... Ну... Статей по настройке ШИМ на малине куча. Нужно просто загуглить. Вон, можешь эту либу задействовать.

Unicode4all ★★★★★
()
Ответ на: комментарий от Tumyq


Да хоть 100к!

покажите, как.. (код)

ТС, тебя в гугле забанили что ли? Набираю «raspberry pwm c code», перехожу по первой же ссылке и вижу код. Т.к. я как раз с «малинкой» занимаюсь, переделал его вот в такое:

#include <wiringPi.h>
#include <stdio.h>

int main (void){
   printf ("Raspberry Pi wiringPi test program\n");
   wiringPiSetupGpio();
   pinMode(18, PWM_OUTPUT) ;
   pwmSetMode(PWM_MODE_MS);
   pwmSetRange(2);
   pwmSetClock(192);
   pwmWrite(18,1);
   int i;
     for(i = 192; i > 0; --i){
       delay(10);
       pwmSetClock(i);
     }
     for(i = 1; i < 190; ++i){
       delay(10);
       pwmSetClock(i);
     }
   printf("clock 192\n");
   pwmSetClock(192); // T = 20us
   char ch;
   read(1, &ch, 1);
   printf("2\n");
   pwmSetClock(2); // T = 200ns
   read(1, &ch, 1);
   pinMode(18, INPUT);
   return 0;
}

В комментариях я указал - реально получается максимальный период ШИМа 200нс!!! Правда, меандр на осциллографе уже некрасивый (я бы показал, но под рукой фотоаппарата нет).

И еще, читай здесь: есть еще «clock output».

Ну и здесь можно найти формулу для вычисления частоты:

pwmFrequency in Hz = 19.2e6 Hz / pwmClock / pwmRange.


Почему это за тебя я должен делать? Ты совсем тупой что ли???

anonymous
()
Ответ на: комментарий от Tumyq

В общем-то, помощь уже не нужна, что ты пытаешься доказать?

Tumyq
() автор топика
Ответ на: комментарий от Unicode4all

:) Да, бааалииииин)) Ну прочтите выше, почему я не мог поставить МК, даже не я определял, что там будет малина, ну прочтите, пожалуйста) не надо меня уговаривать там менять что-то, меня интересовал конкретно такой вопрос)

Tumyq
() автор топика

Обычно для таких задач приделывают к одноплатнику какую-нибудь ардуинку (или что-то поинтереснее). Производительность и риалтаймовость это абсолютно параллельные понятия.

KivApple ★★★★★
()
Ответ на: комментарий от anonymous

Я уже писал по поводу библиотеки wiringPi. Ты приводишь код из примера этой либы, где меняется частота следования импульсов

pwmSetClock(i);
.«Карл, меняется!») Если оно для меня, то оно мне на кой. В остальных настройках полезное только вот это
pwmSetMode(PWM_MODE_MS);
, точнее PWM_MODE_MS - описание говорит, что оно дает автономный режим, то есть, при нем PWM настраивается(типа, на более высокую частоту, чем 1 ms), запускается, и на ходу поменять настройки не удастся, а если и удастся, ТО это будет с задержками GUI, собственно, откуда и растут все тормоза.

Внимание!: по идее, в этом коде две несовместимые вещи, и проверить стабильность самих импульсов не удастся

Практика и теория - вещи разные, я тоже могу много разного кода скопипастить из гугла, подрихтовать, и сказать, проверяйте за мной.

Tumyq
() автор топика
Ответ на: комментарий от Tumyq

Ты — бестолковая скотина!

Уже давно бы подключил осциллограф и посмотрел!!! Ты думаешь, я тебе пример с барабана привел? Проверил специально для тебя, тупицы, что частота плавно изменяется и все красиво...

anonymous
()
Ответ на: комментарий от anonymous

Слушай , тебя спросили, ТЫ получил 200нс, ты там что-то пробубнил. Теперь закатываешь истерики.

Что ты там стараешься доказать, когда тебе уже русским языком раз пять сказали, что решение найдено, конь ты штопаный)

Лечи нервы и будь добр, не пиши сюда больше, да и в принципе не помогай.

Tumyq
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.