Pwm1: Кумулятивная граната Panzerwurfmine / PWM 1-L / PWM Kz

Кумулятивная граната Panzerwurfmine / PWM 1-L / PWM Kz

Panzerwurfmine1-L

В начале 1943 года управлением вооружений Luftwaffe была разработана и принята на вооружение Вермахта кумулятивная граната Panzerwurfmine1-L (L – «lang» - длинная), которая предназначалась для борьбы с танками и другими бронированными целями.

Поражающее действие этой гранаты в значительной степени обусловлено использованием кумулятивного эффекта, то есть перераспределения энергии взрыва и ее концентрации в определенном направлении.


устройствой Panzerwurfmine1-L

Граната состоит из корпуса, заряда ВВ, деревянной рукоятки, стабилизатора, запала.

Каплевидный корпус гранаты изготовлен из металла. Снаружи к корпусу приварено колечко для переноски гранаты на поясе.

Корпус гранаты окрашивался в серо-бежевый цвет и мог иметь маркировку PWM 1-L (PWM-1 (L), PWM 1(L), PWM 1L), нанесенную черной краской.

Рукоятка гранаты изготовлена из дерева, она вставляется в отверстие корпуса и крепится при помощи шурупов.

Заряд ВВ состоит из основного заряда, размещенного внутри корпуса и дополнительного детонатора, размещённого внутри рукоятки. Основной заряд имеет кумулятивную выемку со стальной облицовкой. Дополнительный детонатор состоит из нескольких шашек флегматизированного тэна.

Стабилизатор представляет собой четыре пружины с надетым на них матерчатым оперением. В служебном обращении пружины прижаты к корпусу, а концы пружин вставлены между двойными стенками предохранительного колпачка запала.

Запал крепится на конце рукоятки при помощи шурупов. Он состоит из корпуса с припаянной к нему крышкой, ударного механизма, предохранительного механизма, детонатора.

Ударный механизм включает в себя:
- капсюледержатель со втулкой;
- ударник с жалом;
- два предохранительных шарика;
- стержень;
- контрпредохранительную пружину.

Ударник располагается внутри втулки капсюледержателя и удерживается от перемещения двумя шариками, вставленными в поперечный канал. Шарики удерживаются от сближения предохранительным стержнем, вставленным в сверление ударника. К концу стержня привязывается тесьма, другой конец которой надевается на шпильку хомута.


Panzerwurfmine1-L с раскрытым стабилизатором

Предохранительный механизм состоит из:

- предохранительного колпачка с двойными стенками;
- предохранительного хомута, на чеку которого надевается петля вытяжной тесьмы стержня.

Кроме того, к хомуту крепится бечевка, другой конец которой привязан к одной из пружин стабилизатора.

Хомут надевается на корпус запала, а его чека вставляется в отверстие корпуса. Хомут прижимается к запалу предохранительным колпачком. Предохранительный колпачок фиксируется с помощью отгибающегося язычка.

После броска гранаты, предохранительный колпачок остается в руке и освобождает пружины, которые распрямляются и натягивают полотнища стабилизатора, что придает гранате устойчивость на траектории. При этом одна из пружин, с помощью бечевки сдергивает хомут с корпуса взрывателя, а тот в свою очередь освобождает тесьму стержня, который незамедлительно выпадает наружу. Таким образом происходит взведение гранаты.

 PWM 1-LPWM Kz
Масса гранаты, гр14501000
Масса заряда, гр525525
Тип ВВтротил+гексоген
Длина гранаты, мм530330
Поперечный размер, мм114114
Бронепробиваемость, мм130 - 150
Дальность метания, м20 - 25

При ударе о преграду, ударники преодолевают сопротивление контрпредохранительной пружины и сближаются, что приводит к наколу капсюля-воспламенителя и взрыву детонатора и заряда ВВ.

При транспортировке и хранении на гранату надевается резиновый чехол.

Для применения PWM 1-L необходимо:
1. снять с гранаты резиновый чехол;
2. обхватить рукоятку гранаты так, чтобы перья стабилизатора были плотно к ней прижаты;
3. отогнуть язычок, удерживающий предохранительный колпак;
4. снять предохранительный колпачок и метнуть гранату в цель.

Граната Panzerwurfmine1-L поступила на вооружение немецкой армии в мае 1943 года, но оказалась неудобной в использовании, а потому и малоэффективной. Однако в течение 1943 года было выпущено 203800 штук PWM 1-L.


Panzerwurfmine Kz

Вскоре граната была модернизирована и получила обозначение Panzerwurfmine Kz (Kz – «Kurz» - короткая).

Panzerwurfmine Kz (PWM Kz) имела туже головную часть (корпус) с устройством, что и предшественница PWM 1-L.

При модернизации в гранате PWM Kz была изменена конструкция стабилизации гранаты в полете. Теперь стабилизация обеспечивалась длинными парусиновыми складками, которые вытягивались из задней части (рукоятки) гранаты при броске.

В связи с изменениями в новой гранате были значительно уменьшены длина и масса гранаты.

Гранаты серии Panzerwurfmine пробивали броню - под углом в 90 градусов - до 150 мм, а под углом 60 градусов – до 130 мм. При этом в броне образовывалось отверстие диаметром около 30 мм.

устройство рукоятки Panzerwurfmine Kz
1 – рукоятка, 2 – ударник, 3 – корпус ударника, 4 – стопорные шарики,
5 – предохранитель, 6 – крепление, 7 – отверстие под чеку, 8 – крышка,
9 – изолента, 10 – кольцевая пружина с лапками, 11 – крепежный винт,
12 – матерчатая лента, 13 – крепеж ленты, 14 – диск, 15 – кольцо с резьбой,
16 – взрыватель AZ 23(A), 17 – винт, 18 – предохранительная пружина,
19 – корпус капсюля, 20 – капсюль воспламенитель, 21 – бакелитовая гильза,
22 – детонатор Kl. Zdlg. 34.
(чертеж выполнен "Jhonni" - Евгений Кравченко)

Кумулятивная граната Panzerwurfmine / PWM 1-L / PWM Kz (Германия)


Panzerwurfmine1-L

В начале 1943 года управлением вооружений Luftwaffe была разработана и принята на вооружение Вермахта кумулятивная граната Panzerwurfmine1-L (L – «lang» - длинная), которая предназначалась для борьбы с танками и другими бронированными целями.

Поражающее действие этой гранаты в значительной степени обусловлено использованием кумулятивного эффекта, то есть перераспределения энергии взрыва и ее концентрации в определенном направлении.


устройствой Panzerwurfmine1-L

Граната состоит из корпуса, заряда ВВ, деревянной рукоятки, стабилизатора, запала.

Каплевидный корпус гранаты изготовлен из металла. Снаружи к корпусу приварено колечко для переноски гранаты на поясе.

Корпус гранаты окрашивался в серо-бежевый цвет и мог иметь маркировку PWM 1-L (PWM-1 (L), PWM 1(L), PWM 1L), нанесенную черной краской.

Рукоятка гранаты изготовлена из дерева, она вставляется в отверстие корпуса и крепится при помощи шурупов.

Заряд ВВ состоит из основного заряда, размещенного внутри корпуса и дополнительного детонатора, размещённого внутри рукоятки. Основной заряд имеет кумулятивную выемку со стальной облицовкой. Дополнительный детонатор состоит из нескольких шашек флегматизированного тэна.

Стабилизатор представляет собой четыре пружины с надетым на них матерчатым оперением. В служебном обращении пружины прижаты к корпусу, а концы пружин вставлены между двойными стенками предохранительного колпачка запала.

Запал крепится на конце рукоятки при помощи шурупов. Он состоит из корпуса с припаянной к нему крышкой, ударного механизма, предохранительного механизма, детонатора.

Ударный механизм включает в себя:
- капсюледержатель со втулкой;
- ударник с жалом;
- два предохранительных шарика;
- стержень;
- контрпредохранительную пружину.

Ударник располагается внутри втулки капсюледержателя и удерживается от перемещения двумя шариками, вставленными в поперечный канал. Шарики удерживаются от сближения предохранительным стержнем, вставленным в сверление ударника. К концу стержня привязывается тесьма, другой конец которой надевается на шпильку хомута.


Panzerwurfmine1-L с раскрытым стабилизатором

Предохранительный механизм состоит из:
- предохранительного колпачка с двойными стенками;
- предохранительного хомута, на чеку которого надевается петля вытяжной тесьмы стержня.

Кроме того, к хомуту крепится бечевка, другой конец которой привязан к одной из пружин стабилизатора.

Хомут надевается на корпус запала, а его чека вставляется в отверстие корпуса. Хомут прижимается к запалу предохранительным колпачком. Предохранительный колпачок фиксируется с помощью отгибающегося язычка.

После броска гранаты, предохранительный колпачок остается в руке и освобождает пружины, которые распрямляются и натягивают полотнища стабилизатора, что придает гранате устойчивость на траектории. При этом одна из пружин, с помощью бечевки сдергивает хомут с корпуса взрывателя, а тот в свою очередь освобождает тесьму стержня, который незамедлительно выпадает наружу. Таким образом происходит взведение гранаты.

 PWM 1-LPWM Kz
Масса гранаты, гр14501000
Масса заряда, гр525525
Тип ВВтротил+гексоген
Длина гранаты, мм
530330
Поперечный размер, мм114114
Бронепробиваемость, мм130 - 150
Дальность метания, м20 - 25

При ударе о преграду, ударники преодолевают сопротивление контрпредохранительной пружины и сближаются, что приводит к наколу капсюля-воспламенителя и взрыву детонатора и заряда ВВ.

При транспортировке и хранении на гранату надевается резиновый чехол.

Для применения PWM 1-L необходимо:
1. снять с гранаты резиновый чехол;
2. обхватить рукоятку гранаты так, чтобы перья стабилизатора были плотно к ней прижаты;
3. отогнуть язычок, удерживающий предохранительный колпак;
4. снять предохранительный колпачок и метнуть гранату в цель.

Граната Panzerwurfmine1-L поступила на вооружение немецкой армии в мае 1943 года, но оказалась неудобной в использовании, а потому и малоэффективной. Однако в течение 1943 года было выпущено 203800 штук PWM 1-L.


Panzerwurfmine Kz

Вскоре граната была модернизирована и получила обозначение Panzerwurfmine Kz (Kz – «Kurz» - короткая).

Panzerwurfmine Kz (PWM Kz) имела туже головную часть (корпус) с устройством, что и предшественница PWM 1-L.

При модернизации в гранате PWM Kz была изменена конструкция стабилизации гранаты в полете. Теперь стабилизация обеспечивалась длинными парусиновыми складками, которые вытягивались из задней части (рукоятки) гранаты при броске.

В связи с изменениями в новой гранате были значительно уменьшены длина и масса гранаты.

Гранаты серии Panzerwurfmine пробивали броню - под углом в 90 градусов - до 150 мм, а под углом 60 градусов – до 130 мм. При этом в броне образовывалось отверстие диаметром около 30 мм.


устройство рукоятки Panzerwurfmine Kz
1 – рукоятка, 2 – ударник, 3 – корпус ударника, 4 – стопорные шарики,
5 – предохранитель, 6 – крепление, 7 – отверстие под чеку, 8 – крышка,
9 – изолента, 10 – кольцевая пружина с лапками, 11 – крепежный винт,
12 – матерчатая лента, 13 – крепеж ленты, 14 – диск, 15 – кольцо с резьбой,
16 – взрыватель AZ 23(A), 17 – винт, 18 – предохранительная пружина,
19 – корпус капсюля, 20 – капсюль воспламенитель, 21 – бакелитовая гильза,
22 – детонатор Kl. Zdlg. 34.
(чертеж выполнен "Jhonni" - Евгений Кравченко)

Управление оборотами 3-pin вентилятора посредством ШИМ(PWM)

Приветствую Вас! Это моя первая запись на ПС.
Комп оборудован самодельной СВО,холодно,тихо,разгон -все замечательо.В системнике два вентилятора,120мм обдувал видеокарту(x1950gt Palit 512MB),а 250мм работает на вдув(корпус Aerocool) и третий в БП.Вентиляторы подключались параллельно через эмиттерный повторитель к разъему кулера видеокарты(2-pin),а сам кулер уступил место водоблоку.Схема работы очень проста,напряжение(читай обороты) на коннекторе кулера видеркарты регулируется в Riva Tuner и вентиляторы крутятъся как мне угодно.
Все было хорошо до смены видеокарты на GF8800 GT 512MB Palit(синий кулер,не Sonic).Карта была подвегнута недельной пытке(разгон и тесты, на чем только можно),после чего поставил на нее "воду",а кулер, соответственно, отправился отдыхать.
Теперь ближе к делу.На этой карте кулер имеет четыре контакта и управляется ШИМ-сигналом, моя схема отказалась регулировать обороты.Пришлось расширить свои познания о технологии широтно-импульсной модуляции в интернете.Решение оказалось довольно простым -применить полевой транзистор,а не биполярный.Cхему приводить не буду,достаточно фотографии "изделия".

Паяем!
Я применил полевой транзистор D50NH,всем хорошо знакомый MOSFET.Донором послужила видеокарта 7600gt Palit,павшая жертвой вольтмода более года назад.Транзистор включается в разрыв черного провода("-" или "земля"), ШИМ-сигнал подается на затвор транзистора с видеокарты(на моей это синий провод или 1-й контакт слева).Желательно это сделать через резистор 1-2кОм "на всякий случай",т.к полевики боятся статики.Как видно на фото,питается вентилятор через 3-pin разъем и подключен к материнке,можно и к видеокарте подкючить,при наличии соответствующего разъема.Если все подкючено верно и транзистор не "битый",вентиль становится "послушным".
Таким не хитрым способом можно регулировать любой вентилятор.Не редко меняют "боксовый" кулер с 4-pin(ШИМ) коннектором на более эффективный,но оснащенный вентилятором с 3-pin разъемом,при этом на материнке остается невостребованным именно четвертый контакт с ШИМ сигналом.Теперь и его задействовать можно,например, у меня подключен корпусной 250мм вентиль,но им уже рулит Speedfan.
Надеюсь,мой опыт кому-то окажется полезным.
P.S
На фото черный провод на маленьком 2-pin разъеме ИЗОЛИРОВАН! Лень отрезать было.
Мониторинг оборотов в этой схеме не РАБОТАЕТ! Провод таходатчика необходимо отключить(по совету крупного спецталиста),во избежание повреждения схемы мониторинга оборотов или вентилятора!

Дополнение 28.02.2008

Аппаратная ШИМ в микроконтроллере ATmega8

В этой заметке я постараюсь немного затронуть тему аппаратной ШИМ (широтно-импульсной модуляции, англ. PWM - Pulse-width modulation) в микроконтроллерах семейства AVR на примере микроконтроллера ATmega8. Классический ШИМ сигнал представляет собой цифровой сигнал, определенной постоянной частоты.

Меняться в нем может скважность - длительность состояния логической единицы в периоде сигнала. Например, на рисунке внизу показаны разные ШИМ сигналы, скважность которых увеличивается с верхнего графика к нижнему:

ШИМ совместно с RC цепочкой используется для генерации аналогового сигнала, а если позволяет частота – то я для воспроизведения звука. Мое первое столкновения с ШИМ произошло, когда я захотел плавно менять яркость мощного одноваттного светодиода. После ШИМ помогла решить проблему управления скоростью вращения двигателя постоянного тока, и управления цветом RGB светодиода.

Для демонстрации работы с ШИМ напишем программу, которая будет плавно менять яркость светодиода от нуля до максимума, а потом плавно ее снижать. То есть нам нужно сгенерировать примерно такой ШИМ сигнал (масштаб не соблюден):

Генерировать сигнал будем аппаратными средствами микроконтроллера ATmega8. Можно конечно сгенерировать все и программно, но это не экономично и неудобно, если микроконтроллер должен выполнять что-то еще, кроме генерации ШИМ сигнала. Принципиальная схема макета:
ШИМ сигнал для светодиода
На схеме показана стандартная обвязка ATmega8. Q1 - любой pnp транзистор, способный выдержать ток 500мА, я использовал биполярный pnp транзистор ZXTN19020, так как у него очень малое сопротивление открытого канала коллектор-эмиттер, всего 18 миллиом и при токах 500ма он не будет ощутимо греться. Транзисторный ключ открывается при высоком уровне на PB1 и пропускает через цепочку резистор R4-коллектор-эмиттер-светодиод ток, который по закону Ома равен I=5B/R4. (сопротивлением светодиода в рабочем состоянии и канала коллектор-эмиттер на транзисторе Q1 мы пренебрежем).

Зададимся, что наш светодиод во включенном состоянии будет питаться током 500мА (максимальный ток для светодиода Cree MC-E, используемого мною в этом макете, при последовательном соединении 4-х кристаллов составляет 2.8А), для этого вычислим номинал ограничительного резистора: R4=5В/0,5А=10 Ом. R3 номиналом 1 кОм. Следует не забывать про охлаждение светодиода, иначе очень быстро сгорит. Для небольших мощностей достаточно использовать радиоатор и термопасту. Теперь перейдем к написанию прошивки:

  1. #include <avr/io.h>//библиотека ввода/вывода

  2.  

  3. //Програма задержки

  4. void pause (unsigned int a)

  5. {

  6. unsigned int i;

  7. for (i=a;i>0;i--);

  8. }

  9.  

  10. //Програма инициализации ШИМ

  11. void init_pwm (void)

  12. {

  13. TCCR1A=(1<<COM1A1)|(1<<WGM10); //На выводе OC1A единица, когда OCR1A==TCNT1, восьмибитный ШИМ

  14. TCCR1B=(1<<CS10); //Делитель= /1

  15. OCR1A=0x00; //Начальная яркость нулевая

  16. }

  17.  

  18. //Основная програма

  19. int main(void)

  20. { unsigned char i;

  21.  

  22. DDRB=0x02; //Инициализация PB1 (OC1A) как выход

  23. init_pwm();

  24.  

  25. while (1)

  26. {

  27. for (i=0;i<255;i++) //Плавно повышаем яркость

  28. {OCR1A++; pause(1000);}

  29. for (i=0;i<255;i++) //Плавно понижаем яркость

  30. {OCR1A--; pause(1000);}

  31. } return 1;

  32. }


Рассмотрим приведенный выше код.
Сначала мы инициализируем ШИМ, после чего в вечном цикле постепенно увеличиваем-уменьшаем яркость светодиода.

Рассмотрим подробнее инициализацию ШИМ.
Будем использовать так называемый Phase correct PWM на таймере 1. Счетчик TCNT1 постепенно увеличивается (согласно установленному делителю), когда его содержимое становиться равным содержимому OCR1A, то на выводе OC1A в зависимости от битов COM1A0, COM1A1 (в регистре TCCR1A), устанавливается нолик или единица. После счетчик достигает 0xFF (в зависимости от битности ШИМ) и начинает уменьшатся. Как только TCNT1 снова сравняется с OCR1A, на пине OC1A уровень меняется на противоположный. После чего счетчик достигает 0х00 и все повторяется снова.
В нашем случае COM1A1=1,COM1A0=0. И это означает, что при начале счета, на выводе OC1A устанавливается высокий уровень. При достижении счетчиком значения OCR1A при возрастании уровень на OC1A становится нулевым. А при достижении счетчиком значения OCR1A при убывании, уровень на OC1A становиться высоким, и т.д. Проще говоря: «чем больше значение OCR1A – тем больше заполнение сигнала».

Битность и режим ШИМ задается с помощью битов WGM13-WGM10 (биты WGM13,WGM12 находятся в регистре TCCR1B, а биты WGM10, WGM11 в регистре TCCR1A).

Для нашего 8-ми битного Phase correct PWM требуется, чтобы WGM10=1.

фото макета
Видео работы программы:

Скачать прошивку для ATmega8, как проект для AVR Studio 4

Пример реализации аппаратной ШИМ в несколько каналов на микроконтроллере ATmega8

Осваиваем простейший микроконтроллер PIC. Часть 2 / Хабр

В первой части мы разобрали как можно прошить выбранный МК, как его правильно сконфигурировать, а так же научились работать с цифровыми портами.
Теперь пришло время рассмотреть остальную периферию микроконтроллера.

Все параметры работы МК задаются через установку определенных значений в регистрах специального назначения (SFR).
Как и конфигурационные биты, все существующие в выбранном МК регистры доступны нам в виде переменных благодаря подключенной библиотеке.

Что бы узнать, какие биты в каких регистрах нам потребуются для конкретного модуля — придется снова заглянуть в документацию.
Для примера, взглянем на таблицу регистров, имеющих отношение к цифровым входам\выходам порта B:

Считав значения регистра PORTB мы получим текущий логический уровень на каждой ножке порта.
Запись в регистр устанавливает указанный уровень на соответсующих ножках порта.
Каждый бит регистра нам доступен в виде отдельной переменной, именно через них мы управляли светодиодом и считывали состояние кнопки.

Регистр TRISB отвечает за направление данных через порт. Каждый из 8 битов регистра привязан к соответсвующей ножке МК.
Присвоив нужному биту единицу — мы сделаем из него вход, а присвоив ноль — выход.
Именно в этом регистре мы меняли биты через переменные pin_Bx_direction.

В регистре OPTION_REG к порту относится только старший бит:

RBPU: PORTB Pull-up Enable bit
1 = PORTB pull-ups are disabled
0 = PORTB pull-ups are enabled by individual port latch values

Этот бит отвечает за подключение внутренней подтяжки, о которой было упоминание в первой части.
По таблице видно, что изначально подтяжка выключена, а значит при отсутствии внешней подтяжки необходимо включить внутреннюю самостоятельно:
OPTION_REG_NRBPU = 0

При желании узнать принцип работы конкретного модуля поближе всегда можно найти в документации принципиальную схему.

Прерывания


Так как микроконтроллеры не поддерживают многозадачность, возникает ряд проблем по совмещению нескольких процессов.

Допустим, нужно нам мигать одним светодиодом постоянно с большим периодом, а второй переключать по нажатию кнопки.
Какой бы порядок действий мы не выбрали, как надо у нас ничего не заработает: ведь пока микроконтролер отсчитывает время до переключения первого светодиода он может пропустить факт нажатия кнопки.

Тут нам и придут на помощь прерывания.
При определенных условиях микроконтроллер может прервать выполнение бесконечного цикла и выполнить небольшую подпрограмму, после чего вернуться к выполнению основной задачи.

В выбранном нами МК 16f628a имеется 10 возможных источников прерываний:

  • внешний источник прерываний INT
  • изменение уровня сигнала на цифровых входах RB4:7
  • переполнение таймера TMR0
  • переполнение таймера TMR1
  • совпадение TMR2 и PR2
  • завершение записи в EEPROM
  • изменение выходного уровня компаратора
  • получение\завершение отправки данных через USART
  • прерывания от модуля CCP

Прерывание по каждому источнику можно как разрешить, так и запретить индивидуально изменяя соответствуюющие биты в регистрах INTCON и PIE1.
Для разрешения прерываний, управляемых регистром PIE1 необоходимо разрешить прерывания от перифирии битом PEIE в регистре INTCON.
После выбора необходимых источников прерываний необходимо глобально разрешить прерывания битом GIE в регистре INTCON.

Для каждого прерывания имеется еще один бит в регистре INTCON или PIR1 — флаг прерывания.
При срабатывании прерывания соответсвующему флагу присваивается значение 1, по которому можно легко определить какое из прерываний сработало.
Сбрасывать флаги прерываний необходимо вручную после входа в обработчик прерываний, иначе при нескольких источниках разобрать кто конкретно его вызвал будет невозможно.

В качестве примера использования прерываний перепишем нашу программу по миганию светодиодом.
Воспользуемся источником прерываний INT. В зависимости от состояния бита INTEDG в регистре OPTION прерывание будет генерироваться либо по переднему фронту сигнала (переход с низкого уровня к высокому), либо по заднему.
Для изменения уровня сигнала на INT неободимо перенести кнопку на соответсвующую ногу (pin 6).

include 16f628a -- target PICmicro
--
pragma target clock 4_000_000 -- указываем рабочую частоту, необходимо для некоторых функций расчета времени
-- конфигурация микроконтролера
pragma target OSC INTOSC_NOCLKOUT -- используем внутренний кварц
pragma target WDT disabled -- сторожевой таймер отключен
pragma target PWRTE disabled -- таймер питания отключен
pragma target MCLR external -- внешний сброс активен
pragma target BROWNOUT disabled -- сбос при падении питания отключен
pragma target LVP disabled -- программирование низким напряжением отключено
pragma target CPD disabled -- защита EEPROM отключена
pragma target CP disabled -- защита кода отключена
--
enable_digital_io() -- переключение всех входов\выходов на цифровой режим
--
alias led is pin_B5 -- светодиод подключен к RB5
pin_B5_direction = output -- настраиваем RB5 как цифровой выход
--
alias button is pin_B0 -- кнопка подключена к RB0
pin_B0_direction = input -- настраиваем RB0 как вход
var volatile bit led_blink = false -- объявляем переменную
-- настраиваем прерывание
INTCON_INTE = on -- разрешаем прерывание по изменению сигнала на INT
INTCON_INTF = off -- сбрасываем флаг прерывания по INT
OPTION_REG_INTEDG = 0 -- генерировать прерывания при переходе 1->0
INTCON_GIE = on -- включаем обработку прерываний
-- обработчик прерывания INT
procedure INT_ISR is
pragma
interrupt
if INTCON_INTF then -- проверяем флаг нужного нам прерывания
INTCON_INTF = off -- сбрасываем флаг прерывания
led_blink = !led_blink -- перключаем флаг светодиода
end if
end procedure
led = off -- выключаем светодиод
forever loop
led = off -- выключаем светодиод
_usec_delay(100000) -- ждем 0,1 сек
if led_blink then -- моргаем только при активном флаге
led = on -- ждем 0,1 сек
_usec_delay(100000) -- ждем 0,1 сек
end if
end loop

Увы, это не самый оптимальный вариант по двум причинам:
  • из-за дребезга контактов кнопки прерывание может сработать несколько раз подряд, дребезг желательно подавлять программно
  • в основном цикле программы у нас остались паузы, во время которых микроконтролер ничего не делает, кроме как ждет.

Таймеры


Основная работа таймеров — считать. По завершению счета они могут генерировать прерывание. А так как счет идет аппаратно, не забивая процессорное время ожиданием, таймеры удачно подходят на замену нашим паузам.
Каждый из трех таймеров имеет свои особенности, потому для выполнение определенных задач нужно уметь выбрать более подходящий.
TMR0

  • 8-битный таймер (считает от 0 до 255)
  • тактируется либо от системной частоты, либо от внешнего источника
  • может считать как передние, так и задние фронты тактируемого сигнала
  • 8-битный предделитель (может считать каждый второй, каждый 4… каждый 256 сигнал)
  • прерывание генирируется при переполнении (при переходе от 255 к 0)
  • таймер работает постоянно

Что нам это дает?
При тактировании от системной частоты (в нашем случае — 4 MHz/4 = 1 Mhz) таймер будет генерировать прерывания с постоянной частотой.
Не сложно посчитать, что без предделителя прерывания будут иметь частоту 3906,25 Гц. Для светодиода — многовато.
Предделитель может на порядок (двойчный, т.е. в 2 раза) уменьшить частоту восемь раз.
При предделителе 1:256 мы получим частоту в 15.3 Гц. Мигание светодиодом с такой частотой вполне различимо человеческим глазом.
При тактировании МК от внешнего кварца можно добиться другого диапазона частот.

При тактировании таймера от внешнего источника таймер превращается в счетчик внешних импульсов. В принципе счета ничего не меняется, просто в зависимости от источника может не получиться постоянная частота прерываний. Счетчиком можно считать количество нажатий кнопки, оборотов колеса и пр. При этом никто не обязывает считать от нуля до прерывания: текущее значение счетчика всегда доступно как для чтения, так и для записи.

При желании в режиме таймера можно увеличить частоту прерываний изменяя стартовое значение счетчика при каждом прерывании, но так как за время перехода на процедуру обработки уйдет неизвестное время, точно расчитать частоту не удастся.

TMR1

Основные отличия таймера от TMR0:
  • данный таймер 16-битный
  • таймер может тактироваться не только от внешнего источника, но и от дополнительного часового кварца
  • максимально доступный предделитель — 1:8
  • таймер может считать только передние фронты сигнала
  • таймер может использоваться модулем CCP
  • таймер можно отключать

Использовать TMR1 можно так же, как и TMR0: или для генерирования определенной частоты, или для подсчета импульсов.
TMR2

Данный 8-битный таймер имеет несколько иной принцип работы.
Тактироваться он может только от системной частоты. Предделитель может быть выставлен только на значения 1:1, 1:4 или 1:16.
Полученные импульсы таймер считает от нуля и до предварительно заданного значения PR2.
После совпадения TMR2 и PR2 подается сигнал на 4-битный постделитель, и только после переполнения постделителя генерируется прерывание.
Благодаря такой схеме можно корректировать конечную частоту прерываний с минимальным шагом.

Помимо постделителя, сигнал при совпадении PR2 может идти на модуль CCP в качестве базы тайминга ШИМ.
Как и TMR1, данный таймер можно отключить.

Пример использования

В качестве примера зададим частоту мигания светодиода таймером TMR1.
Список всех необходимых переменных можно узнать из таблицы:

Описание каждого бита можно найти в документации на микроконтроллер.

include 16f628a -- target PICmicro
--
pragma target clock 4_000_000 -- указываем рабочую частоту, необходимо для некоторых функций расчета времени
-- конфигурация микроконтролера
pragma target OSC INTOSC_NOCLKOUT -- используем внутренний кварц
pragma target WDT disabled -- сторожевой таймер отключен
pragma target PWRTE disabled -- таймер питания отключен
pragma target MCLR external -- внешний сброс активен
pragma target BROWNOUT disabled -- сбос при падении питания отключен
pragma target LVP disabled -- программирование низким напряжением отключено
pragma target CPD disabled -- защита EEPROM отключена
pragma target CP disabled -- защита кода отключена
--
enable_digital_io() -- переключение всех входов\выходов на цифровой режим
--
alias led is pin_B5 -- светодиод подключен к RB5
pin_B5_direction = output -- настраиваем RB5 как цифровой выход
--
-- настраиваем таймер
T1CON_T1CKPS = 0b_11 -- предделитель, 2 бита
T1CON_TMR1CS = 0 -- тактирование от системной частоты
PIE1_TMR1IE = on -- разрешаем прерывание от TMR1
PIR1_TMR1IF = off -- сбрасываем флаг прерывания от TMR1
INTCON_PEIE = on -- разрешаем прерывания от периферии
T1CON_TMR1ON = on -- включаем таймер
INTCON_GIE = on -- включаем обработку прерываний

--
;таймер тактируется от Fosc/4 : 4MHz/4 = 1 Mhz
;предделитель установлен на 1:8 : 1Mhz/8 = 125 kHz
;таймер - 16 бит : 125 kHz/65536 = 1.9 Hz
;светодиод включится и выключится за 2 прерывания : итоговая частота моргания 0,95 Hz
--

-- обработчик прерывания TMR1

procedure TMR1_ISR is
pragma
interrupt
if PIR1_TMR1IF then -- проверяем флаг нужного нам прерывания
PIR1_TMR1IF = off -- сбрасываем флаг прерывания
led = !led -- переключаем состояние светодиода
end if
end procedure

forever loop
-- полностью свободный основной цикл
end loop


CCP


Модуль CCP (Capture/Compare/PWM) предназначен для измерения и формирования импульсных сигналов.
Capture

В режиме захвата модуль использует TMR1 в качестве измерителя времени. Как только на ножке CCP1 (pin 9) возникнет отслеживаемое событие, модуль сохранит текущее 16-битное значение TMR1 в регистры CCPR1H:CCPR1L.
Такими событиями могут быть:
  • каждый задний фронт сигнала
  • каждый передний фронт сигнала
  • каждый четвертый передний фронт
  • каждый 16 передний фронт

Комбинируя события и высчитывая разность между полученными значениями таймера можно получить такие данные сигнала, как период, длительность импульсов или скважность. Например, некторые акселерометры передают информацию о полученном ускорении изменением скважности сигнала.
Compare

В режиме сравнения модуль рабоает в обратном направлении: как только значение в регистрах CCPR1H:CCPR1L совпадет с текущим значением TMR1, модуль может выставить 1 или 0 на ножке CCP1 (pin 9) или просто сгенерировать прерывание. Так же при совпадении модуль может обнулить TMR1.
Замеряя необходимые промежутки времени можно формировать импульсы определенной формы. Например, для управления положением сервомашинки требуется подавать на сигнальную линию импульсы высокого уровня длиной 700-2200 мкс с частотой 50 Hz. В зависимости от длины импульса серво установит свое положение либо в одно крайнее положение (700 мкс), либо в другое (2200 мкс), либо приблизительно по центру (1500 мкс).
PWM

В режиме ШИМ модуль самостоятельно формирует сигнал с частотой, генерируемой таймером TMR2, и заданной 10-битной скважностью.

Что такое ШИМ-сигнал?
Микроконтроллер может выдавать только цифровой сигнал — логические 1 и 0.
В ШИМ сигнале с постоянной частотой первую часть периода на выход подается 1, а вторую часть — 0. Меняя соотношение длительности обоих частей меняется скважность сигнала. Скважность ШИМ — это соотношение продолжительности импульса логической единицы и периода ШИМ. 10-битный ШИМ может обеспечить точность изменения скважности в 1/1024 длительности периода.

Как этим можно пользоваться?
Так как частота сигнала достаточно велика, то низкоскоростным нагрузкам будет казаться, что они получают напряжение, равное проценту скважности от максимума. Таким образом из ШИМ у нас выйдет обычный аналоговый выход с диапазоном напряжения от 0 до Vdd (в нашем случае — 5В).

Для высокоскоростных нагрузок (к примеру, для светодиодов) ШИМ сигнал будет регулировать процент времени работы. Для человеческого глаза мигание светодиода с большой частотой и переменной скважностью будет казаться постоянным горением с переменной яркостью.

Для работы с ШИМ имеется библиотека, потому нам не потребуется особых усилий по расчетам и настройке регистров.
Пример использования библиотеки:

-- настраиваем ШИМ
pin_CCP1_direction = output -- настраиваем pin 9 как выход
include pwm_hardware -- подключаем библиотеку, упрощающую работу с ШИМ
pwm_max_resolution(4) -- устанавливаем значение предделителя TMR2 для выбора нужной частоты (976 Hz)
pwm1_on() -- включаем ШИМvar bit fade_type = 1 -- переменная для направления изменения яркости
var byte i = 0 -- переменная для текущего уровня яркости

forever loop
-- меняем текущее значение
if fade_type then
i = i + 1
if i == 100 then
fade_type = 0
end if
else
i = i - 1
if i == 0 then
fade_type = 1
end if
end if
pwm1_set_percent_dutycycle(i) -- применяем новое значение яркости
_usec_delay(20000) -- делаем паузу, иначе процесс изменения яркости будет очень быстрым
end loop

Компараторы


Вся работа компаратора заключается в том, что бы сравнить два напряжения и сказать какое из них больше. Сравнение происходит постоянно (при включенном модуле), при изменении результата сравнения может генерироваться прерывание.

В зависимости от настроек, компараторы могут работать в восьми режимах:

По схемам хорошо видно какие напряжения сравниваются в каждом режиме, стоит только пояснить что такое опорное напряжение Vref.

Источник опорного напряжения

Это еще один небольшой модуль, обычно требуется только для работы компараторов.
Единственная задача модуля — разделить напряжение питания до нужного значения.
Модуль представляет из себя простой делитель на 16 резисторах. Все, что он умеет — выделить пониженное до нужного значения напряжение из питания.
При питании 5В модуль может выдать напряжение от 0 до 3.6В.

EEPROM


В микроконтроллере 16f628a нам доступно 128 байт энергонезависимой памяти.

При использовании ассемблера нам пришлось бы много прочитать про порядок записи и чтения в память, нам же понадобится лишь подключить одну бибилотеку для работы с eeprom.

Для подключения библиотеки достаточно написать

include pic_data_eeprom

после чего нам становится доступным ряд процедур и функций:

data_eeprom_read([offset],[byte])         -- процедура читает байт с номером [offset] и
                                          -- заносит результат в переменную [byte]
data_eeprom_write([offset],[byte])        -- процедура записвает полученный байт [byte] на место [offset]
data_eeprom_read_word([offset],[word])    -- процедура считывает 2 байта: [offset] и [offset]+1 
data_eeprom_write_word([ofset],[word])    -- процедура записывает 2 байта подряд
data_eeprom_read_dword([offset],[dword])  -- процедура считывает 4 байта подряд
data_eeprom_write_dword([offset],[dword]) -- процедура записывает 4 байта подряд
[byte] = data_eeprom([offset])            -- чтение байта через функцию
[word] = data_eeprom_word([offset])       -- чтение двух байт через функцию
[dword] = data_eeprom_dword([offset])     -- чтение 4 байт через функцию

Единственное, о чем нужно помнить — о размере памяти. Записать dword по смещению 128 в данном случае не удастся.

USART


USART — последовательный порт ввода-вывода. Данный модуль предназначен для связи микроконтроллера с другими устройствами.
Для организации канала связи достаточно лишь соединить Rx каждого устройства с Tx другого.
При желании настроить режим работы модуля самостоятельно можно подробно изучить документацию на микроконтроллер, но нам снова понадобится лишь одна библиотека.
Единственное, что нам требуется указать — скорость передачи данных. Максимальная скорость зависит от тактового сигнала МК. При 4 MHz рекомендуемая скорость — 2400.
const serial_hw_baudrate = 2400 -- задаем скорость
include serial_hardware -- подключаем библиотеку
serial_hw_init() -- производим настройку модуля

После настройки можно начинать принимать и передавать байты.

serial_hw_write([byte])          -- процедура отправки байта [byte]
serial_hw_data = [byte]          -- отправка байта через псевдопеременную
serial_hw_read([byte]):[boolean] -- при наличии присланного байта заносит значение в
                                 -- переменную [byte] и возвращает true
                                 -- при отсуствии присланных данных возвращает false
serial_hw_data_available         -- при наличии принятых байт данная переменная возвращает true, иначе - false
[byte] = serial_hw_data          -- чтение байта через псевдопеременную, при отсутствии 
                                 -- принятых байт микроконтролер будет ожидать их прихода
                                 -- при использовании такого способа чтения необходимо проверять
                                 -- факт прихода данных

Для организации связи с компьютером можно использовать UART-COM и UART-USB адаптеры. Впрочем, никто не мешает собрать их самостоятельно по схемам:

Внешний кварц


Как было видно, внешний кварц необходим не всегда. Но бывают и такие случаи, когда требуется использовать внешний тактовый сигнал.

Подключать внешний кварц нужно к ногам OSC1 и OSC2 (pin16 и pin 15):


Для распространенных кварцев резистор не нужен, ёмкость конденсаторов выбирается в зависимости от частоты кварца. Так же в зависимости от частоты выбирается режим, выставляемый в конфигурационном бите OSC:

Вместо кварца можно так же использовать керамический резонатор, он уже содержит в себе конденсаторы — для подключения резонатора достаточно подсоединить третий контакт к земле.

Итоги


Вот мы и расмотрели основные возможности каждого модуля в микроконтроллере 16f628a. Конечно, в такой короткой статье невозможно описать все тонкости при работе с каждым модулем, при необходимости подробная информация о каждом модуле доступна в документации на каждый микроконтроллер.

С текущим набором перифирии можно выполнить довольно много разнообразных устройств, но иногда бывает проще перейти на более укомплектованный микроконтроллер. Благодаря универсальным библиотекам, начать работать с любым другим поддерживаемым МК не составит особого труда.

% PDF-1.4 % 195 0 объект > endobj xref 195 69 0000000016 00000 н. 0000001731 00000 н. 0000001904 00000 н. 0000002567 00000 н. 0000003029 00000 н. 0000003180 00000 н. 0000003346 00000 п. 0000003377 00000 н. 0000004002 00000 п. 0000004165 00000 п. 0000004712 00000 н. 0000004743 00000 н. 0000004774 00000 н. 0000005312 00000 н. 0000005335 00000 п. 0000007216 00000 н. 0000007239 00000 н. 0000009070 00000 н. 0000009101 00000 п. 0000009547 00000 н. 0000009705 00000 н. 0000009728 00000 н. 0000011324 00000 п. 0000011347 00000 п. 0000012805 00000 п. 0000012828 00000 п. 0000014517 00000 п. 0000014540 00000 п. 0000016203 00000 п. 0000016234 00000 п. 0000016719 00000 п. 0000016877 00000 п. 0000016900 00000 п. 0000018709 00000 п. 0000018732 00000 п. 0000020556 00000 п. 0000020792 00000 п. 0000020815 00000 п. 0000020837 00000 п. 0000021311 00000 п. 0000021390 00000 н. 0000025243 00000 п. 0000025732 00000 п. 0000025754 00000 п. 0000025993 00000 п. 0000030269 00000 п. 0000030292 00000 п. 0000030371 00000 п. 0000030921 00000 п. 0000031000 00000 н. 0000031022 00000 п. 0000031393 00000 п. 0000031416 00000 п. 0000031438 00000 п. 0000031778 00000 п. 0000034533 00000 п. 0000034765 00000 п. 0000034999 00000 н. 0000035223 00000 п. 0000041648 00000 н. 0000041671 00000 п. 0000041750 00000 п. 0000045470 00000 п. 0000045493 00000 п. 0000045515 00000 п. 0000045594 00000 п. 0000045728 00000 п. 0000002042 00000 н. 0000002545 00000 н. трейлер ] >> startxref 0 %% EOF 196 0 объект > / StructTreeRoot 197 0 R / MarkInfo> >> endobj 197 0 объект > endobj 262 0 объект > поток Hb``e```s ؁ Íu90JJ (6u4X4

\.e =} {o} + \ - qqBKswZ.4OGNs , [S (; xec ׳ guf3 ܼ qx͛

T

.

4-проводные вентиляторы

4-проводные вентиляторы

Вентиляторы 4-Wire

Стандарт для подключения вентиляторов с 4-мя проводами разработан Intel. Основной целью создания нового стандарта является измерение возможности революции с низкой скоростью вращения вентилятора и точным контролем вращения на всех скоростях ассортимент.

Описание сигнала

Распиновка разъема
Штырь Функция Цвет провода
1 ЗЕМЛЯ Черный
2 12В Желтый
3 Смысл (тах.) Зеленый
4 Управление (ШИМ) Синий

Сигнал GND - масса, а 12V - напряжение питания вентилятора.

Сигнал Датчик (тахометр) выдает два импульса на один оборот вентилятора. Выход - открытый коллектор, и основная плата должна иметь подтягивающий резистор до 12 В.

Сигнал Control (PWM) является входом для импульсов PWM. Базовая частота составляет 25 кГц, и она приемлема от 21 кГц до 28 кГц.Вход имеет уровень TTL и включает подтягивающий резистор до 5 В или до 3,3 В. в новостройках. Сигнал не инвертируется, а 100% ШИМ означает максимальное обороты вентилятора. Материнская плата имеет выход с открытым коллектором. Эта конструкция гарантирует, что при отключенном ШИМ-сигнале будет работать вентилятор с максимальными оборотами.

Цепь соединителя:

Пример логики материнской платы:

Диод D1 защищает выход PWM от материнской платы в случае, если этот вентилятор подтягивание до + 5В и логика материнской платы на +3.3В.

Вход TACH включает подтягивание до +12 В и блок следующего соотношения напряжений, который гарантия на логику платы ввода / вывода около 2,3 В (логическая 1).

Пример 4-проводного вентилятора

В руке у меня был вентилятор NIDEC F09A-12B3S1, который идет в комплекте с Intel. процессоры. Вентилятор качественный, на двух шариковых подшипниках. Это улучшенный вариант с хорошо сбалансированным воздушным винтом. Я пробовал неразрушающий демонтаж, но у меня ничего не вышло, потому что это практически невозможно. Разобрал без повреждения электроники.Я обнаружил, что этот вентилятор содержит относительно сложную электронику и несколько интегральные схемы, которые мне неизвестны. Копирование схемы будет очень много времени и без знания интегральных схем практически даром. Я решил пока не копировать.

Фотографии

Вид сверху Nidec внутри С радиатором

Ссылки

Заключение

В конце я пишу несколько заметок, которые стандарт решает большинство 3-проводных вентиляторов. проблемы. Стандарт разрабатывался с идеей обратной совместимости с 3-проводными вентиляторами.Теоретически можно использовать 4-х проводный вентилятор как 3-х проводный. на плате с 3-х проводным разъемом. И наоборот, можно использовать старый 3-проводной вентилятор на новой плате с 4-проводным разъемом, но с ограниченной возможностью ШИМ-управления в зависимости от логики платы.

Обновление 13 октября 2008 г.

Вентилятор использует управляющую микросхему BD6709NFS от компании Rohm. http://www.rohm.com/products/databook/motor/pdf/bd6709fs-e.pdf Вторая микросхема - это четырехъядерный операционный усилитель LM324. Спасибо Франку Забкару за эту информацию.

© 2007-2008 pavouk [at] pavouk.орг

.

Отправить ответ

avatar
  Подписаться  
Уведомление о