Микроконтроллеры ATtiny24, ATtiny44, ATtiny84 поддерживаются полным диапазоном средств для проектирования, в т.ч. Си-компиляторы, макроассемблеры, программные отладчики/симуляторы, внутрисхемные эмуляторы и оценочные наборы.
Структурная схема микроконтроллера АTtiny 24 (Рис.2.4).
Рисунок 2.4 – Структурная схема микроконтроллера АTtiny 24
Расположение выводов микроконтроллера АTtiny 24 (Рис.2.5).
Рисунок 2.5 - Расположение выводов микроконтроллера АTtiny 24
2.4 Разработка функциональной схемы устройства
Зная серию выбранного микроконтроллера и функции, которые он должен выполнять, составим функциональную схему (Рис.2.6).
Рисунок 2.6 – Функциональная схема солнечных часов
Условные обозначения на функциональной схеме (Рисунок 2.6):
ДВ – двигатель;
ЛУ – лазерная указка;
УПТ- усилитель постоянного тока;
ИП- источник питания +5В;
КР – кварцевый резонатор;
S1-S3 – кнопки управления и регулировки.
2.5 Разработка алгоритма управления
Блок-схема алгоритма, управления двигателем солнечных часов представлена на рисунке 2.7.
Согласно блок схеме, в начале программы выполняется установка состояния портов, а также указывается вектор прерывания, который имеет две ветви:
• вектор RESET переходит при сбросе программы в начальное состояние;
• вектор INTO активизируется при нажатии кнопки "START/STOP".
Активным уровнем INTO считается нулевое состояние на выводе РВ6 микроконтроллера. Активный уровень задается программой и во время сброса не активизируется. В случае активизации INTO вызывается подпрограмма обработки вектора прерывания, которая запрещает прерывание и проверяет длительность нажатия кнопки. При выходе из подпрограммы обработки вектора прерывания разрешается общее прерывание.
2.6 Разработка программного обеспечения микроконтроллера
Микроконтроллер ведет отсчет реального времени. Время конвертируется из минут в формат 1:00 часов и затем в ШИМ импульс, подходящий для управления сервоприводом. Исходный код снабжен полными комментариями и легок для понимания в плане принципа работы.
Программное обеспечение написано на С, компиляция и отладка в AVR Studio. Отладку кода производить нужно с помощью AVR Dragon, которая использует встроенные в ATTiny24 возможности по отладке.
Код снабжен комментариями и должен быть вполне понятным, а также простым для изменений желанию. Но в любом случае, ниже приводятся несколько комментариев.
Рисунок 2.4 - Блок-схема алгоритма управления двигателем солнечных часов
#define F_CPU 2457600UL // частота кристалла
#define PWM_TOP F_CPU/60 // = 40960 – МАКС значение для таймера 0 (идет в OCR0A)
Эти прекомпиляторные инструкции определяют частоту кристалла и значение, вносящееся в регистр OCR1A, которое будет максимальным значением для таймера1 перед сбрасыванием на ноль. Нам надо, чтобы частота ШИМ была 60 Гц. Эти импульсы также используются в качестве временной оси для часов реального времени.
Следующие строки настраивают Таймер1 на быструю ШИМ, без предделителя частоты (то есть частота кристалла напрямую идет на Таймер1), а ШИМ Compare Output на выводе ОС1В.
TCCR1A = _BV(WGM11) | _BV(WGM10) | _BV(COM1B1);
TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10);
OCR1A = PWM_TOP; // ШИМ част = 60 Гц
Сейчас Таймер1 отсчитывает время от 0 до значения PWM_TOP, 60 раз каждую секунду (2457600/40960)
Вышеуказанные инструкции также делают выход OC1B высоким, когда счетчик меньше значения ОCR1A и 0 в обратном случае. Это и есть ШИМ – изменение значения OCR1B от 0 до PWM_TOP изменяет коэффициент заполнения от 0% до 100% на частоте ШИМ, которая не меняется: 60 колебаний каждую секунду, колебания просто уже или шире.
Следующая инструкция помещает сервопривод на положение OCR1B – промежуточное положение между максимальным и минимальным положениями сервопривода.
OCR1B = (SERVO_MAX + SERVO_MIN) / 2;
Это значение не составляет 50% коэффициента заполнения ШИМ, так как сервопривод перемещается от минимального положения до максимального с импульсом менее 50%, поэтому я определил значения defined SERVO_MAX и SERVO_MIN, основываясь на длительности импульсов, которые перемещают сервопривод в максимальное или минимальное положение:
#define SERVO_MAX PWM_TOP*1.65/(1000/60) // макс. поворот – на 2,35 млс импульса
#define SERVO_MIN PWM_TOP*0.75/(1000/60) // мин. поворот – на 0,70 млс импульса
Теперь нужно, чтобы переполнение таймера использовалось в качестве временной оси для часов реального времени:
TIMSK1 = _BV(TOIE1); // включить переполнение таймера (для часов реального времени)
sei(); // включить глобальные прерывания
Сейчас каждую 1/60-ую секунды выполняется следующая операция:
ISR(TIM1_OVF_vect) { … }
Эта операция выполняет целый ряд действий:
Отсчитывает реальное время, 60 умноженное на 1/60 секунды означает прошествие одной полной секунды, поэтому вместе с отсчетом минут и часов можно добавить и секундомер.
Заставляет лазер мигать каждую 1/10-ую секунду каждую секунду, если только не стоит соответствующая перемычка, в противном случае лазер включен постоянно.
Данная операция также определяет положение, в которое должен передвинуться сервопривод. Для выполнения этой задачи время конвертируется в общее количество минут, прошедших со времени 1:00, а полученный результат вписывается в диапазон
SERVO_MIN до SERVO_MAX
servo_pos = servo_min + ((hour-1)*60+min)*((servo_max-servo_min)/(11*60+59));
Замыкая JUMP_0 мы заставляем сервопривод отображать только секунды (от 9 до 59), тем самым вышеуказанное вычисление производится только по текущим секундам, минуты и часы не принимаются во внимание.
servo_pos = servo_min + sec*((servo_max-servo_min)/59);
Следующие команды помещают сервопривод в зеркальное положение, чтобы лазер двигался по часовой стрелке:
OCR1B = servo_min+servo_max-servo_pos; // по часовой стрелке
// OCR1B = servo_pos; // против часовой стрелки («закомментарено»).
Листинг программы приведен в Приложении А.
Готовый hex-файл для загрузки в микроконтроллер в Приложении Б.
2.7 Выбор и описание элементной базы
Схема содержит минимум компонентов: 2 керамических конденсатора,
два резистора, транзистор, микроконтроллер и кварцевый резонатор, сервопривод . Сервопривод возьмем Hitec HS-300BB – довольно хороший. Подойдет и любой другой сервопривод, только возможно диапазон перемещения будет немного иным. Его можно настроить с помощью значений SERVO_MIN и SERVO_MAX, однако будет необходима повторная компиляция.
Спецификация компонентов приведена в Приложении В.
В устройстве нужно использовать хорошо стабилизированный источник напряжения на 5 вольт.
Лазерная указка обычная промышленная, следует только переделать выводы питания.
2.8 Разработка схемы электрической принципиальной
Разрабатываем в Accel EDA схему электрическую принципиальную солнечных часов (Рис. 2.5).
Рисунок 2.5 - Принципиальная схема солнечных часов в Accel EDA
3 ТЕХНИКО-ЭКОНОМИЧЕСКОЕ ОБОСНОВАНИЕ ОБЪЕКТА РАЗРАБОТКИ
В данном разделе проводится технико-экономический расчет стоимости солнечных часов.
Стоимость устройства будет состоять из стоимости разработки ПО для микроконтроллера, стоимости разработки конструкторской документации и стоимости сборки и испытания устройства.
3.1 Расчет расходов на ПО для микроконтроллера, которое разрабатывается
Исходные данные для расчета стоимости разработки ПО, которое разрабатывается приведенны в таблице 3.1.
Таблица 3.1 – Данные на 1.01.2010 г.
№п/п | Статьи затрат | Усл. обозн. | Ед. изм. | Значения | |
Проектирование и разработка ПЗ | |||||
1 | Часовая тарифная ставка программиста | Зпр | грн. | 8,00 | |
2 | Коэффициент сложности программы | с | коэф. | 1,40 | |
3 | Коэффициент коррекции программы | Р | коэф. | 0,05 | |
4 | Коэффициент увеличения расходов труда | Z | коэф. | 1,3 | |
5 | Коэффициент квалификации программиста | k | коэф. | 1,0 | |
6 | Амортизационные отчисления | Амт | % | 10,0 | |
7 | Мощность компьютера, принтера | WМ | Квт/ч | 0,40 | |
8 | Стоимость ПЕОМ IBM Sempron LE1150(AM2)/1GB/TFT | Втз | грн. | 3200,00 | |
9 | Тариф на электроэнергию | Це/е | грн. | 0,56 | |
10 | Норма дополнительной зарплаты | Нд | % | 10,0 | |
11 | Отчисление на социальные расходы | Нсоц | % | 37,2 | |
12 | Транспортно-заготовительные расходы | Нтр | % | 4,0 | |
Эксплуатация П0 | |||||
13 | Численность обслуживающего персонала | Чо | чел | 1 | |
14 | Часовая тарифная ставка обслуживающего персонала | Зпер | грн. | 6,00 | |
15 | Время обслуживания систем | То | час/г | 150 | |
16 | Стоимость ПЕОМ | Втз | грн. | 3200,00 | |
17 | Норма амортизационных отчислений на ПЕОМ | На | % | 10,0 | |
18 | Норма амортизационных отчислений на ПЗ | НаП | % | 10,0 | |
19 | Накладные расходы | Рнак | % | 25,0 | |
20 | Отчисление на содержание и ремонт ПЕОМ | Нр | % | 10,0 | |
21 | Стоимость работы одного часа ПЕОМ | Вг | грн. | 6,5 |
Первичными исходными данными для определения себестоимости ПО является количество исходных команд (операторов) конечного программного продукта. Условное количество операторов Q в программе задания может быть оценено по формуле: