123
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: nightmare, Huntswarrior, Aleks_Crow  
Форум » Программирование микроконтроллеров AVR, PIC » Вопросы по програмированию » ШИМ(PWM), Сервопривод и BASCOM (*icon-0*)
ШИМ(PWM), Сервопривод и BASCOM
Отправлено 18.09.2011 - 19:271
БЛОГГЕР
340 сообщений
Мужчина
"То ли лыжи не едут, то ли я <нездоров>"

Проблема заключается в моём непонимании команды "Config Servos". Прошу ознакомится с материалом и ответить на пару моих вопросов в конце сообщения.

Код программы:
Code
$regfile = "m8def.dat" 'мега8
$crystal = 8000000 '8МГц тактовая частота

Config Servos = 1 , Servo1 = Portd.2 , Reload = 10 'один сервопривод подкл в PortD.2 и ещё что-то...
Config Portd.2 = Output 'PortD.2 - выход
Config Portc.5 = Output 'PortC.5 - выход
Enable Interrupts 'разрешаем прерывания
Dim I As Byte 'объявляем переменную

Do 'начало бесконечного цикла
Set Portc.5 'зажгём светодиод - обозначим поворот вправо
For I = 0 To 150 'цикл в 150 шагов
Servo(1) = I 'дадим серве значение шага цикла
Waitms 10 'немного подождём
Next 'след шаг

Reset Portc.5 'потушим светодиод - обозначим поворот влево
For I = 150 To 0 Step -1 'тут точно такой же цикл, только в обратном порядке
Servo(1) = I
Waitms 10
Next
Loop 'замыкаем бесконечный цикл


Видео работы программы:
рекомендуется к просмотру в полноэкранном режиме


Как видно сервопривод движется только когда длина импульса больше 1мсек, но меньше 2мсек.

Коментарии к видео:
МК - ATmega8, сервопривод с углом поворота +\-90°, светодиод, осцилограф подкл к тому же выводу что и сервопривод. Одна клеточка в сетке осцилографа по горизонтали равна 1мсек, по вертикали 1В.

Вопросы:
  • Сервопривод управляется частотой сигнала?
  • Как обращатся с параметром "Reload"?
  • В чем измеряется параметр "Servo"?
  • Как узнать крайнее левое и крайнее правое положение?


  • Профиль Личное сообщение Дом. страница icq Skype
    16
    Отправлено 18.09.2011 - 19:492
    Администраторы
    3322 сообщений
    Мужчина
    Quote (Pe40rA)
    Сервопривод управляется частотой сигнала?

    -да

    Quote (Pe40rA)
    Как узнать крайнее левое и крайнее правое положение?

    - лево-700, право 2500


    Только дурак нуждается в порядке-гений господствует над хаосом...
    Онлайн ЧАТ по робототехнике ! Заходи и общайся без регистрации =)
    Профиль Личное сообщение Дом. страница icq Skype
    31
    Отправлено 18.09.2011 - 20:283
    Начальная группа
    1798 сообщений
    Мужчина
    Частота же постоянна - 50 Гц. Период не меняется, только ширина импульса, не?


    Профиль Личное сообщение Дом. страница icq Skype
    38
    Отправлено 18.09.2011 - 21:234
    БЛОГГЕР
    340 сообщений
    Мужчина
    S-T-A-L-K-E-R(А), согласись, если я поставлю Servo(1) значения 700 и 2500 то это и рядом не стоит с крайним левым и правым положением. Потому что при 150 у меня уже заваливает за 90°.
    Пытаюсь перевести и понять следующее:
    Syntax
    CONFIG SERVOS = X , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = rl , INTERVAL=t
    X - The number of servo’s you want to control. Each used servo will use one byte of SRAM.
    servox - The port pin the servo is attached too.
    reload - The reload value for the ISR in uS.
    Interval - The update interval. Using the interval option will result in using alternative servo code optimized for servos.

    Добавлено (18.09.2011, 21:23)
    ---------------------------------------------
    Вот как мы с Промтом перевели выше сказанное:
    X - Число сервомоторов которыми хотите управлять. Каждый используемый сервомотор будет использовать один байт SRAM.
    servox - Вывод порта к которому подключён сервомотор.
    reload - Перевести значение ISR в микросекунды.
    interval - Интервал обновления. Использование опции "интервал" приведет к использованию альтернативного "сервокода", оптимизированного для сервомоторов.


    Профиль Личное сообщение Дом. страница icq Skype
    16
    Отправлено 18.09.2011 - 22:005
    Начальная группа
    211 сообщений
    Мужчина
    Как понимаю речь идёт о правильном понимании строк инициализации и управления сервоприводом. Попробуем разобраться, строка
    Config Servos = 1 , Servo1 = Portd.2 , Reload = 10 означает следующее....
    Config Servos = 1 -это указать кол-во используемых сервоприводов, в данном случае один сервопривод;
    Servo1 = Portd.2 -это порт к которому будет подключен данный сервопривод;
    Reload = 10 -это выращенная в микросекундах перезагрузка выходного логического уровня /ширина импульса/
    -------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------
    ПРИМЕР ПРОГРАММЫ ДЛЯ УПРАВЛЕНИЯ СЕРВОПРИВОДОМ:

    Config Servos = 1 , Servo1 = Portc.2 , Reload = 10
    Dim Tik As byte , M As byte 'объявляем переменные Tik и M
    M = 10 'задержка определяющая скорость вращения сервопривода
    Enable Interrupts 'разрешаем глобальные прерывания
    Servo(1) = 110 'центрировка сервопривода, среднее положение, значение при котором вал сервопривода не двигается может быть у разных моделей различным

    Do

    Servo(1) = 110 'стоп
    waitms 250
    Servo(1) = 50 'вращаем в одну сторону
    waitms 250
    Servo(1) = 150 'вращаем в другую сторону
    waitms 250

    For Tik= 110 To 200 'ускоряем вращение
    Servo(1) = Tik:
    Waitms M

    For Tik = 200 To 110 Step -1 'замедляем вращение
    Servo(1) = Tik
    Waitms M
    Next

    loop


    Профиль Личное сообщение Дом. страница icq Skype
    50
    Форум » Программирование микроконтроллеров AVR, PIC » Вопросы по програмированию » ШИМ(PWM), Сервопривод и BASCOM (*icon-0*)
    • Страница 1 из 1
    • 1
    Поиск: