Заголовок сообщения: АЦП Attiny13, не корректная работа
Добавлено: Вс дек 06, 2015 21:28:10
Первый раз сказал Мяу!
Зарегистрирован: Вс мар 29, 2015 17:50:29 Сообщений: 29
Рейтинг сообщения:0
Добрый день! Собираю зарядный аппарат для АКБ. Контроль за режимами заряда решил собрать на 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В) Почему?
Заголовок сообщения: Re: АЦП Attiny13, не корректная работа
Добавлено: Пн дек 07, 2015 18:28:34
Первый раз сказал Мяу!
Зарегистрирован: Вс мар 29, 2015 17:50:29 Сообщений: 29
Рейтинг сообщения:0
В принципе эта же те формула, но без поправок на то, что 1023 АЦП соответствует 4,2В(для конкретной моей схемы), а не 5 В. Разве не так? Даже если по этой формуле, то практические результаты тоже близко не подходят. Проверил на второй - тоже самое.
Заголовок сообщения: Re: АЦП Attiny13, не корректная работа
Добавлено: Сб дек 26, 2015 22:35:48
Первый раз сказал Мяу!
Зарегистрирован: Вс мар 29, 2015 17:50:29 Сообщений: 29
Рейтинг сообщения:0
Короче не стал я мучиться с этим АЦП и решил поступить по хитрому. Нажимаем кнопку, записываем данные в 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
Не исключено что у вас просаживается питание МК. А почему не берете Ref = 1.1V это более предпочтительно и не будет плясать от питания. А делитель для измерения напряжения измените под 1,1В
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения