roboforum.ru

Технический форум по робототехнике.


Код для МиниБота на Basic - Энкодеры

Готовая электроника для самодельного робота. Уровень от начинающих до опытных конструкторов.

Код для МиниБота на Basic - Энкодеры

Сообщение EdGull » 04 апр 2008, 12:25

Код на васике
Код: Выделить всёРазвернуть
'==============================================================================
'Платформа применения- МИНИБОТ-1.
'Язык - Basic
'Среда - BASCOM-AVR MCS Electronics v1.11.7.7
'Назначение программы - пример для некоммерческого использования.
'Действие программы - уравнивание угловых скоростей колес одноосевой схемы
'                     с двумя независимыми двигателями.
'Результат работы программы - езда прямо в одном направлении.
'Пояснения - в программе использован ШИМ для управления двигателями
'            и прерывание от таймера0 для обработки информации от датчиков
'            оборотов двигателей.
'Дата: 10.03.2008
'Автор: Чернышев А.А
'==============================================================================
$regfile = "m32DEF.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 10
$framesize = 40

'---------------------------порт А---------------------------------------------

Config Pina.0 = Input : Датчик_линии_Правый Alias Pina.0
Config Pina.1 = Input : Обороты_Правый Alias Pina.1
Config Pina.2 = Input : Обороты_Левый Alias Pina.2
Config Pina.3 = Input : Датчик_линии Alias Pina.3
Config Pina.4 = Input : Датчик_линии_Левый Alias Pina.4
Config Pina.5 = Input : Ток_Двиг_Левый Alias Pina.5
Config Pina.6 = Input : Ток_Двиг_Правый Alias Pina.6
Config Pina.6 = Input : Батарея Alias Pina.6

'---------------------------порт В---------------------------------------------

Portb = &B11111111
Config Pinb.0 = Output : Локатор_Тыл Alias Portb.0
Config Pinb.1 = Output : Локатор_Правый Alias Portb.1
Config Pinb.2 = Input : Зарядка Alias Pinb.2
Config Pinb.3 = Output : Локатор_Левый Alias Portb.3

'---------------------------порт С---------------------------------------------

Portc = &B00000011
Config Pinc.0 = Output : И2С_такт Alias Portc.0
Config Pinc.1 = Output : И2С_данные Alias Portc.1      'реконфигурируется
Config Pinc.2 = Output : Реверс_Левый Alias Portc.2    ': Реверс_Левый = 0
Config Pinc.3 = Output : Реверс_Правый Alias Portc.3   ': Реверс_Правый = 0
Config Pinc.4 = Output : Кр_Правый Alias Portc.4       ': Кр_Правый = 1
Config Pinc.5 = Output : Зел_Правый Alias Portc.5      ': Зел_Правый = 1
Config Pinc.6 = Output : Кр_Левый Alias Portc.6        ': Кр_Левый = 1
Config Pinc.7 = Output : Зел_Левый Alias Portc.7       ': Зел_Левый = 1

'---------------------------порт D---------------------------------------------

Portd = &B00111111
Config Pind.0 = Input : УСАРТ_вход Alias Pind.0
Config Pind.1 = Output : УСАРТ_выход Alias Portd.1
Config Pind.2 = Input : Приемник_Тыл Alias Pind.2
Config Pind.3 = Input : Приемник_Фронт Alias Pind.3
Config Pind.4 = Output                                 'шим левого двигателя
Config Pind.5 = Output                                 'шим правого двигателя
Config Pind.6 = Output : ИК_свет Alias Portd.6
Config Pind.7 = Output : Динамик Alias Portd.7

'---------------------------конфигурация железа--------------------------------
'настройка ШИМ
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down

'счетчик_0 - для измерений периода сигнала с датчиков оборотов двигателей
Config Timer0 = Timer , Prescale = 1                   'таймер
Stop Timer0                                            'стоп таймер
Tcnt0 = 0                                              'чистим регистр
'-----------------------------переменные---------------------------------------
Dim Installspeed As Byte
Dim ФлагЛ As Bit , ФлагП As Bit
Dim СчетчикЛ As Byte , СчетчикП As Byte
'------------------------присвоение начальных значений-------------------------
'На разных скоростях возможны флуктуации по курсу - это связано с точностью
'сборки механики (пробуксовка двгателей относительно колес), настройки
'датчиков оборотов, а также их сильной внешней паразитной засветки.
'В данной программе датчики используются как логические - без использования АЦП.

Installspeed = 120

'настройка прерываний
On Timer0 Время_истекло
Start Timer0
Enable Timer0
Enable Interrupts

   СчетчикЛ = 0
   СчетчикП = 0
   ИК_свет = 1                                         'включаем ИК излучатели
'==============================================================================
'основная программа
Do
      Pwm1b = Pwm1b + 1                                'загрузка в ШИМ
      Pwm1a = Pwm1a + 1
'фиксация скорости
   If Pwm1a >= Installspeed Then
      Pwm1a = Installspeed
   End If

   If Pwm1b >= Installspeed Then
      Pwm1b = Installspeed
   End If
Loop

'==============================================================================
'ПП - прерывания от таймера 0
Время_истекло:
'увеличение счетчика левого
   If ФлагЛ = 0 Then
      If Обороты_Левый = 1 Then
         Incr СчетчикЛ : ФлагЛ = 1
      End If
   Else
      If Обороты_Левый = 0 Then
         ФлагЛ = 0
      End If
   End If
'увеличение счетчика правого
   If ФлагП = 0 Then
      If Обороты_Правый = 1 Then
         Incr СчетчикП : ФлагП = 1
      End If
   Else
      If Обороты_Правый = 0 Then
         ФлагП = 0
      End If
   End If
'уравнивание счетчиков
   If СчетчикП > СчетчикЛ Then
      Pwm1a = Pwm1a + 1                                'ускорить правый
      If Pwm1b > 0 Then
         Pwm1b = Pwm1b - 1
      End If                                           'замедлить левый
   End If
      If СчетчикП < СчетчикЛ Then
         If Pwm1a > 0 Then
            Pwm1a = Pwm1a - 1                          'замедлить правый
         End If
         Pwm1b = Pwm1b + 1                             'ускорить левый
      End If
'сброс счетчиков
    If СчетчикП = СчетчикЛ Then
      СчетчикП = 0 : СчетчикЛ = 0
    End If
Return
Вложения

[ Воспроизвести файл QuickTime ] P1130699_toDivX.avi.mov [ 487.3 КиБ | Просмотров: 1325 ]

Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: Код Basic - Энкодеры

Сообщение Digit » 04 апр 2008, 12:39

А зачем ты у вложения расширение .MOV оставил?

Это кто там на видео? Не, МиниБота я узнал, а вот кто второй? :P
злой полицейский
Аватара пользователя
Digit
 
Сообщения: 3339
Зарегистрирован: 27 ноя 2004, 00:42
Откуда: совсем Москва
ФИО: Григорий

Re: Код Basic - Энкодеры

Сообщение EdGull » 04 апр 2008, 12:53

1. на авишник сайт ругнулся на расширение.
2. на видео автор исходника, Леха Чернышев.
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович


Вернуться в МиниБот — национальный класс роботов

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8