GP2D12 — различия между версиями
SkyStorm (обсуждение | вклад) (→ИК Дальномеры Sharp GP2D12 и GP2Y0A21) |
Setar (обсуждение | вклад) |
||
| (не показаны 2 промежуточные версии 1 участника) | |||
| Строка 5: | Строка 5: | ||
* Минимальное расстояние: '''10 см''' | * Минимальное расстояние: '''10 см''' | ||
* Максимальное расстояние: '''80 см''' | * Максимальное расстояние: '''80 см''' | ||
| − | * Напряжение питания: '''4.5 - 5.5В''' | + | * Напряжение питания: '''4.5 - 5.5В''' - это очень важно! |
| + | * Уровень сигнала: '''3.1 - 0.4В''' | ||
* Потребление типовое: '''33мА''' | * Потребление типовое: '''33мА''' | ||
* Потребление максимальное: '''50мА''' | * Потребление максимальное: '''50мА''' | ||
| Строка 29: | Строка 30: | ||
* k = 0 | * k = 0 | ||
[[Файл:GP2D12_normalization_ok.jpg]]<br> | [[Файл:GP2D12_normalization_ok.jpg]]<br> | ||
| − | + | Тестовая программа на Bascom-AVR | |
<source lang="vb"> | <source lang="vb"> | ||
| − | Function Sharp_d12(byval | + | Const Device = 1 'MiniBot Version 1 or 2 |
| + | $regfile = "m32def.dat" | ||
| + | |||
| + | #if Device = 1 | ||
| + | ' Set configuration for MB1 | ||
| + | $prog &HFF , &HE4 , &HD9 , &H00 | ||
| + | $crystal = 8000000 | ||
| + | $baud = 9600 | ||
| + | #else | ||
| + | ' Set configuration for MB2 | ||
| + | $prog &HFF , &HBD , &HC9 , &H00 | ||
| + | $crystal = 7372800 | ||
| + | $baud = 115200 | ||
| + | #endif | ||
| + | |||
| + | |||
| + | $hwstack = 32 'default use 32 for the hardware stack | ||
| + | $swstack = 10 'default use 10 for the SW stack | ||
| + | $framesize = 40 'default use 40 for the frame space | ||
| + | |||
| + | Declare Function Sharp_d12(byval Adc_channel As Byte) As Byte | ||
| + | |||
| + | Config Adc = Single , Prescaler = Auto , Reference = Internal | ||
| + | |||
| + | Enable Interrupts | ||
| + | Dim R As Byte , Channel As Byte | ||
| + | |||
| + | Print "Start Sharp Test" | ||
| + | |||
| + | Do | ||
| + | For Channel = 0 To 7 | ||
| + | R = 0 | ||
| + | R = Sharp_d12(channel) | ||
| + | Print "ADC chenel= " ; Channel ; ", Sharp L= " ; R | ||
| + | Next | ||
| + | Wait 5 | ||
| + | Loop | ||
| + | |||
| + | Function Sharp_d12(byval Adc_channel As Byte) As Byte | ||
Const M = 10000 | Const M = 10000 | ||
Const K = 0 | Const K = 0 | ||
Const B = -40 | Const B = -40 | ||
Local Range As Word , Vout As Word , Vout1 As Word | Local Range As Word , Vout As Word , Vout1 As Word | ||
| − | Start Adc : Vout = Getadc( | + | Vout = 0 |
| + | Start Adc : Vout = Getadc(adc_channel) 'Sharp connected to PA=0(ADC0) | ||
Stop Adc | Stop Adc | ||
| − | If Vout < 160 Then | + | If Vout < 160 Then |
Sharp_d12 = 0 | Sharp_d12 = 0 | ||
Else | Else | ||
| Строка 44: | Строка 84: | ||
Range = M / Vout1 ' M/(Vout+B) | Range = M / Vout1 ' M/(Vout+B) | ||
Sharp_d12 = Range - K ' Range = M/(Vout+B)-K | Sharp_d12 = Range - K ' Range = M/(Vout+B)-K | ||
| + | Sharp_d12 = Low(sharp_d12) | ||
| + | Print "Sharp_d12 " ; Sharp_d12 ; " Vout" ; Vout | ||
End If | End If | ||
End Function | End Function | ||
</source> | </source> | ||
Текущая версия на 13:46, 17 марта 2012
ИК Дальномеры Sharp GP2D12 и GP2Y0A21
Итак немного подробнее о данных дальномерах. Общие данные для всей серии дальномеров Sharp.
Характеристики:
- Минимальное расстояние: 10 см
- Максимальное расстояние: 80 см
- Напряжение питания: 4.5 - 5.5В - это очень важно!
- Уровень сигнала: 3.1 - 0.4В
- Потребление типовое: 33мА
- Потребление максимальное: 50мА
- Полный цикл измерения: 39 ms
- Диаметр луча GP2D12: 6 см на удалении 80 см, данные требуют проверки
- Диаметр луча GP2Y0A21: 12 см на удалении 80 см, данные требуют проверки
Выход с дальномера аналоговый с нелинейной характеристикой(ссылка).
Для получения линейной характеристики применяется либо табличный метод либо нормализация(ссылка). Формула нормализации после преобразования (см. ссылки)
<math>R = \frac{m'}{V + b'} - k</math>
Применение для 10 bit АЦП (0..1023) по данным Acroname:
- m' = 6787
- b' = − 3
- k = 4
Но то ли датчики поменялись с тех пор или процессора на 3 вольта по другому обрабатывают АЦП но получаем след. результат

Если взять (спасибо DeaD'у)
- m' = 10000
- b' = − 40
- k = 0

Тестовая программа на Bascom-AVR
<source lang="vb">
Const Device = 1 'MiniBot Version 1 or 2
$regfile = "m32def.dat"
- if Device = 1
' Set configuration for MB1
$prog &HFF , &HE4 , &HD9 , &H00 $crystal = 8000000 $baud = 9600
- else
' Set configuration for MB2
$prog &HFF , &HBD , &HC9 , &H00 $crystal = 7372800 $baud = 115200
- endif
$hwstack = 32 'default use 32 for the hardware stack
$swstack = 10 'default use 10 for the SW stack
$framesize = 40 'default use 40 for the frame space
Declare Function Sharp_d12(byval Adc_channel As Byte) As Byte
Config Adc = Single , Prescaler = Auto , Reference = Internal
Enable Interrupts Dim R As Byte , Channel As Byte
Print "Start Sharp Test"
Do
For Channel = 0 To 7
R = 0
R = Sharp_d12(channel)
Print "ADC chenel= " ; Channel ; ", Sharp L= " ; R
Next
Wait 5
Loop
Function Sharp_d12(byval Adc_channel As Byte) As Byte Const M = 10000 Const K = 0 Const B = -40 Local Range As Word , Vout As Word , Vout1 As Word
Vout = 0
Start Adc : Vout = Getadc(adc_channel) 'Sharp connected to PA=0(ADC0)
Stop Adc
If Vout < 160 Then
Sharp_d12 = 0
Else
Vout1 = Vout + B ' (Vout+B)
Range = M / Vout1 ' M/(Vout+B)
Sharp_d12 = Range - K ' Range = M/(Vout+B)-K
Sharp_d12 = Low(sharp_d12)
Print "Sharp_d12 " ; Sharp_d12 ; " Vout" ; Vout
End If
End Function </source>