АЦП Attiny13, не корректная работа

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Ramis12
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Вс мар 29, 2015 17:50:29

АЦП Attiny13, не корректная работа

Сообщение Ramis12 »

Добрый день! Собираю зарядный аппарат для АКБ. Контроль за режимами заряда решил собрать на Attiny 13A. И тут началось самое интересное. Теория не совпадает с практикой. Или по моей глупости или из-за китайской аттинки - не знаю. Думаю, поможете разобраться. Приведу свои расчеты. Может там что-то не так.
Напряжение беру с делителя ( 60к/15к) ,Uвх/Uдел = 5
Опорное напряжение – Reference = Avcc , 5 В
Максимальное измеряемое напряжение Uвх = 21 В при этом на входе МК будет 4,2 В. Отсюда следует Uдел = АЦП *(4,2/1023) => Uвх/5 = АЦП * (4,2/1023) => АЦП = Uвх *1023/21
По этой формуле нахожу, что 13,2В в АЦП - 643 , 14,8В - 721
Для наглядности пишу , собираю на макете схему и заливаю простенький код в МК:

Код: Выделить всё

$regfile = "attiny13.dat"
$crystal = 4000000
Config Portb.1 = Output
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Do
If Getadc(2) <= 643  Then Portb.1 = 1
If Getadc(2) >= 721  Then
Do
Portb.1 = 0
Loop Until Getadc(2) <= 643
Else
Portb.1 = 1
End If
Loop
End
Включение, отключения диода не происходит. Путем плясек с бубном установил, что все начинает работать при АЦП равном соответственно: 287 (для 13,2 В) и 334 (для 14,8В)
Почему?
Реклама
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: АЦП Attiny13, не корректная работа

Сообщение akl »

Если исходить из выражения преобразования,
Изображение получаются другие цифры
Vin=13,2V
ADC=1024*(13.2/5)/5=540
Vin=14,8V
ADC=1024*(14,8/5)/5=606
ADC_RESULT.GIF
Почему после "плясек с бубном" начинает работать, не знаю.
Реклама
Ramis12
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Вс мар 29, 2015 17:50:29

Re: АЦП Attiny13, не корректная работа

Сообщение Ramis12 »

В принципе эта же те формула, но без поправок на то, что 1023 АЦП соответствует 4,2В(для конкретной моей схемы), а не 5 В. Разве не так? Даже если по этой формуле, то практические результаты тоже близко не подходят. Проверил на второй - тоже самое.
akl
Друг Кота
Сообщения: 4445
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: АЦП Attiny13, не корректная работа

Сообщение akl »

Если считаете, что опора равна 4,2V - да будут такие значения. Только зачем писать
Ramis12 писал(а):Опорное напряжение – Reference = Avcc , 5 В
Ramis12 писал(а):Проверил на второй - тоже самое.
Значит сидит какая-то лажа... Нужно искать. Удачи.
Реклама
Эиком - электронные компоненты и радиодетали
Ramis12
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Вс мар 29, 2015 17:50:29

Re: АЦП Attiny13, не корректная работа

Сообщение Ramis12 »

Короче не стал я мучиться с этим АЦП и решил поступить по хитрому. Нажимаем кнопку, записываем данные в eeprom. И так три раза: для Uвкл, Uвыкл и ограничение по току. Программка работает. Стоит на переделанном БП от ПК. Защита работает. Если раньше при замыкании вылетали ключи, мост, то сейчас нормально - продолжает работать.

Код: Выделить всё

$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 8
$swstack = 16
$framesize = 16
Declare Sub Izmer()
Declare Sub Miganie()
Declare Sub Miganie1()
Dim N As Bit
Dim I_izm As Word
Dim U_izm As Word
Dim U_off As Word
Dim U_on As Word
Dim I_off As Word
Config Debounce = 10
Config Portb.0 = Output
Config Portb.1 = Output
Config Pinb.2 = Input
Config Pinb.3 = Input
Config Pinb.4 = Input
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Portb.0 = 0
Portb.1 = 1
Pinb.2 = 1
N = 0
$eeprom                                                     'читаем данные из ячеек eeprom
Uonn:
Data 10%
Uoff:
Data 20%
Ioff:
Data 30%
$data
Readeeprom U_on , Uonn
Readeeprom U_off , Uoff
Readeeprom I_off , Ioff
'---------------   тело----------------------------------------------------------------------
1:
Do
Debounce Pinb.2 , 0 , Vkl                                   'при нажатии переходим на Vkl
Call Izmer
If U_izm < 400 Then Portb.1 = 0                             'вызываем подпрограмму для измерений
If I_izm > I_off Then Portb.1 = 0                           '  если ток больше запсанного значение в eeprom, то МОП транзистор закрываем
If U_izm > U_off Then Portb.1 = 0                           '  то же самое для напряжения 14,8 В
If U_izm < U_on Then Portb.1 = 1
If N = 0 Then Call Miganie1                                 '  если меньше 13,2 В , то открываем МОП транзистор
Loop
'-------------------------------------------------------------------------------------------
Sub Izmer()
U_izm = 0
I_izm = 0
U_izm = Getadc(2)                                           'PB4
I_izm = Getadc(3)
                                           'PB3
End Sub

Vkl:
Do
Call Izmer                                                  'берем значение АЦП
Writeeeprom U_izm , Uonn                                    'записываем в 10 ячейку
Call Miganie                                                'моргаем ,чтобы визуально контролировать запись
Goto Vikl                                                   ' переходим на Vikl
Loop

Vikl:
Do                                                          'выполняем пока не нажали на кнопку
Debounce Pinb.2 , 0 , Vikl1                                 ' при нажатии переходим на Vikl1
Loop

Vikl1:
Do
Call Izmer                                                  'берем значение АЦП
Writeeeprom U_izm , Uoff
Call Miganie                                                'записываем в 20 ячейку,
Goto Ivikl                                                  'моргаем
Loop                                                        ' переходим на Ivikl

Ivikl:
Do                                                          'выполняем пока не нажали на кнопку
Debounce Pinb.2 , 0 , Iikl1                                 ' при нажатии переходим на Vikl1
Loop

Iikl1:
Do
Call Izmer
Writeeeprom I_izm , Ioff                                    'то же самое для тока
Call Miganie
Goto 1
Loop

Sub Miganie()
Waitms 50
Portb.0 = 1                                                 'моргаем диодом
Waitms 50
Portb.0 = 0
End Sub


Sub Miganie1()
Waitms 70
Portb.0 = 1                                                 'моргаем диодом
Waitms 50
Portb.0 = 0
Waitms 50
Portb.0 = 1
Waitms 50
Portb.0 = 0
N = 1
End Sub
Реклама
malex66
Открыл глаза
Сообщения: 45
Зарегистрирован: Вс янв 22, 2012 21:57:43

Re: АЦП Attiny13, не корректная работа

Сообщение malex66 »

у вас опорное - 5 вольт. то есть пяти вольтам на входе ацп будет соответствовать число 1023. почему же вы считаете 4,2?
Реклама
amd9800
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

Re: АЦП Attiny13, не корректная работа

Сообщение amd9800 »

Не исключено что у вас просаживается питание МК.
А почему не берете Ref = 1.1V это более предпочтительно и не будет плясать от питания.
А делитель для измерения напряжения измените под 1,1В
Ответить

Вернуться в «Разные вопросы по МК»