Простейший карбюратор
Процесс приготовления горючей смеси из мелко распыленного топлива и воздуха, происходящий вне цилиндров, называется карбюрацией, а прибор, в котором происходит приготовление горючей смеси определенного состава в зависимости от режима работы двигателя, называется карбюратором.
Простейший карбюратор состоит из воздушного патрубка, поплавковой камеры с поплавком и игольчатым клапаном, смесительной камеры, диффузора, главного дозирующего устройства — распылителя и топливного жиклера, дроссельной заслонки.
Поплавковая камера служит для поддержания постоянного уровня топлива у распылителя (1,5—2 мм).
В смесительной камере происходит смешивание паров топлива с воздухом, образуется топливовоздушная смесь.
Распылитель (тонкая трубка) служит для подачи топлива в центр смесительной камеры.
Жиклер (калиброванное отверстие) дозирует количество топлива, проходящего к распылителю.
Впускная система карбюраторного двигателя
1 — трубопровод; 2 — отверстие в поплавковой камере; 3 — диффузор; 4 — распылитель; 5 — дроссельная заслонка; 6 — смесительная камера; 7 — жиклер; 8 — поплавковая камера; 9 — поплавок; 10 — игольчатый клапан.
Диффузор (короткий патрубок, суженный внутри) увеличивает скорость воздушного потока в центре смесительной камеры, чем достигается увеличение разряжения у носика распылителя.
Дроссельная заслонка регулирует количество горючей смеси, подаваемой в цилиндры двигателя, уменьшая или увеличивая проходное сечение смесительной камеры.
Простейший карбюратор работает следующим образом. При такте впуска, из-за создаваемого поршнем разрежения, воздух через воздушный патрубок поступает в диффузор. В диффузоре скорость воздуха, а следовательно, и разряжение увеличиваются. Под действием перепада давлений между поплавковой камерой и диффузором топливо через жиклер распылителя поступает в диффузор, подхватывается потоком воздуха, распыляется и испаряется, образуя топливовоздушную смесь. Из смесительной камеры горючая смесь по впускному трубопроводу поступает в цилиндры двигателя. По мере открытия дроссельной заслонки скорость потока воздуха и разряжение в диффузоре возрастают, что увеличивает расход топлива. Однако необходимого повышения расхода топлива не происходит, горючая смесь обогащается. При работе двигателя на различных режимах простейший карбюратор не может обеспечить горючую смесь постоянного состава.
Вспомогательные устройства карбюратора….
Простейший карбюратор
Процесс приготовления горючей смеси из мелко распыленного топлива и воздуха, происходящий вне цилиндров, называется карбюрацией, а прибор, в котором происходит приготовление горючей смеси определенного состава в зависимости от режима работы двигателя, называется карбюратором.
Простейший карбюратор состоит из

Поплавковая камера служит для поддержания постоянного уровня топлива у распылителя (1,5—2 мм).
В смесительной камере происходит смешивание паров топлива с воздухом, образуется топливовоздушная смесь.
Распылитель (тонкая трубка) служит для подачи топлива в центр смесительной камеры.
Жиклер (калиброванное отверстие) дозирует количество топлива, проходящего к распылителю.
Впускная система карбюраторного двигателя
1 — трубопровод; 2 — отверстие в поплавковой камере; 3 — диффузор; 4 — распылитель; 5 — дроссельная заслонка; 6 — смесительная камера; 7 — жиклер; 8 — поплавковая камера; 9 — поплавок; 10 — игольчатый клапан.
Диффузор (короткий патрубок, суженный внутри) увеличивает скорость воздушного потока в центре смесительной камеры, чем достигается увеличение разряжения у носика распылителя.
Дроссельная заслонка регулирует количество горючей смеси, подаваемой в цилиндры двигателя, уменьшая или увеличивая проходное сечение смесительной камеры.
Простейший карбюратор работает следующим образом. При такте впуска, из-за создаваемого поршнем разрежения, воздух через воздушный патрубок поступает в диффузор. В диффузоре скорость воздуха, а следовательно, и разряжение увеличиваются. Под действием перепада давлений между поплавковой камерой и диффузором топливо через жиклер распылителя поступает в диффузор, подхватывается потоком воздуха, распыляется и испаряется, образуя топливовоздушную смесь. Из смесительной камеры горючая смесь по впускному трубопроводу поступает в цилиндры двигателя. По мере открытия дроссельной заслонки скорость потока воздуха и разряжение в диффузоре возрастают, что увеличивает расход топлива. Однако необходимого повышения расхода топлива не происходит, горючая смесь обогащается. При работе двигателя на различных режимах простейший карбюратор не может обеспечить горючую смесь постоянного состава.
Вспомогательные устройства карбюратора….
Системы карбюратора
Карбюратор двигателя состоит из 5 основных систем карбюратора:
1) главная дозирующая система карбюратора предназначена для смешивания топлива с воздухом в установленных пропорциях, что обеспечивается с помощью специальных жиклеров с калибром (топливные и воздушные жиклеры).
2)
3) система пуска карбюратора предназначена для подачи воздуха в эмульсионные трубки через воздушную заслонку и жиклеры.
4) система экономайзера карбюратора предназначена для обогащения горючей смеси во время продолжительной нагрузки.
5) система ускорительного насоса карбюратора предназначена для кратковременного обогащения горючей смеси во время разгона автомобиля.
Приготовление горючей смеси и работа основных систем карбюратора
Приготовление горючей смеси осуществляется за счет смешивания двух компонентов топлива и воздуха в определенной пропорции. Оба компонента перед попаданием в систему должны быть тщательно очищены от различных видов загрязнений и примесей. Горючая смесь приготавливается в карбюраторе за счет мелкокалиберных жиклеров, и заслонки, с помощью которых топливо дозируется и распыляется на мельчайшие частицы, после чего перемешивается с воздухом.
Горючая смесь имеет свой состав, который приготавливается при определенном соотношением масс топлива к воздуха. Для того, чтобы сгорел 1 кг бензина теоретически необходимо смешать с ним 14,9 кг воздуха (при расчетах принимают 15). Правда идеального не бывает, и количество воздуха, которое расходуется на приготовление горючей смеси, немного больше или меньше по сравнению с теоретическим. В связи с этим состав горючей смеси характеризуется коэффициентом воздуха, который участвует в процессе сгорания топлива, к теоретически обусловленному количеству воздуха.
Для точного определения степени обогащения или обеднения горючей смеси приняли названия следующих смесей:
1) богатая смесь с коэффициентом избытка воздуха равным 0,70-0,85
2) обогащенная смесь с коэффициентом избытка воздуха 0,85-0,95
3) обедненная смесь с коэффициентом избытка воздуха 1,05-1,15
4) бедная смесь с коэффициентом избытка воздуха 1,15-1,20
Двигатель должен работать в оптимальном режиме. Оптимальный режим работы двигателя обеспечит нормальная горючая смесь. То есть горючая смесь должна быть не переобагащенная, и не переобедненная, так как в этих случаях снижается экономичность и мощность двигателя.
{jcomments on}
Карбюратор | Системы энергообеспечения и пуска
Основными частями и деталями простейшего карбюратора являются: поплавковая камера 7 с поплавком 8 и запорной иглой 6, смесительная камера 1, диффузор 12, распылитель 11, жиклер 9 и дроссельная заслонка 2.
Необходимый уровень бензина в поплавковой камере 7 во время работы двигателя автоматически поддерживается при помощи поплавка 8 и запорной иглы 6. При пониженном уровне бензина поплавок опускается и вместе с ним опускается игла 6. Входное отверстие открывается, и бензин поступает в поплавковую камеру. Когда бензин в поплавковой камере достигнет определенного уровня, поплавок и вместе с ним игла поднимутся настолько, что игла закроет входное отверстие и поступление бензина в поплавковую камеру прекратится.
Рис. Схема простейшего карбюратора: 1 — смесительная камера; 2 — дроссельная заслонка; 3 — отверстие, сообщающее поплавковую камеру с атмосферой; 4 — гнездо игольчатого клапана; 5 — входной канал; 6 — запорная игла; 7 — поплавковая камера; 8 — поплавок; 9 — жиклер; 10 — воздушный патрубок; 11 — распылитель; 12 — диффузор
Поплавковая камера через жиклер 9 соединена с распылителем 11. В жиклере имеется калиброванное отверстие через которое в единицу времени может протекать строго определенное количество бензина.
Распылитель 11 представляет собой трубку с отверстием для выхода бензина. Бензин в распылителе и поплавковой камере находится при неработающем двигателе на одном уровне. Уровень бензина в карбюраторе регулируется так, чтобы он был ниже верхнего конца распылителя.
Поплавковая камера через отверстие 3 соединена с атмосферой. Если двигатель не работает, то в диффузоре 12 также будет атмосферное давление и бензин из распылителя вытекать не будет.
При помощи дроссельной заслонки изменяют количество горючей смеси, поступающей в цилиндры двигателя: чем больше открыта дроссельная заслонка, тем больше смеси поступает в цилиндры. Управление дроссельной заслонкой осуществляется обычно при помощи ножной педали, а также кнопкой, расположенной на щитке приборов.
Карбюратор своей смесительной камерой 1 присоединен к впускному трубопроводу.
Процесс образования горючей смеси в карбюраторе происходит следующим образом. При такте впуска поршень в цилиндре перемещается к нижней мертвой точке и засасывает воздух через впускной трубопровод и карбюратор. Проходное сечение диффузора 12 меньше сечений воздушного патрубка 10 и смесительной камеры 1, поэтому воздух через диффузор проходит с большой скоростью.
Вследствие этого в зоне наибольшего сужения диффузора, где расположен распылитель, создается разреженней бензин начинает вытекать из распылителя. Вытекающий из распылителя бензин захватывается потоком воздуха и вместе с ним проходит в смесительную камеру. При этом бензин распыляется на мельчайшие капельки, частично испаряется и смешивается с воздухом.
Испарение бензина и перемешивание его с воздухом продолжаются во впускном трубопроводе и в цилиндрах двигателя.
Автомобильный двигатель работает обычно на переменном режиме, так как мощность и число оборотов его коленчатого вала должны изменяться в зависимости от условий движения автомобиля. В соответствии с этим должны изменяться количество и состав подаваемой в цилиндры горючей смеси.
При запуске непрогретого двигателя карбюратор должен приготавливать богатую горючую смесь, так как бензин в этом случае испаряется плохо и для обеспечения запуска необходимо увеличивать подачу бензина.
При работе на средних нагрузках двигатель должен работать наиболее экономично, для чего карбюратор должен приготавливать обедненную смесь; небольшое падение мощности в этом случае не отражается на режиме движения автомобиля.
Наибольшая мощность двигателя может быть получена, если в цилиндры подается большое количество обогащенной смеси. Поэтому при полном открытии дроссельной заслонки карбюратор должен приготавливать обогащенную смесь. Обогащенная смесь необходима и для резкого увеличения числа оборотов коленчатого вала двигателя, так как она сгорает в цилиндре быстрее, чем нормальная горючая смесь.
Рассмотренный выше простейший карбюратор не обеспечивает необходимого изменения состава горючей смеси в зависимости от изменения режима работы двигателя.
В простейшем карбюраторе при малом открытии дроссельной заслонки через него проходит небольшое количество воздуха; скорость движения воздуха через диффузор настолько мала, что разрежение в диффузоре оказывается недостаточным для поступления из распылителя необходимого количества бензина, смесь получается бедной.
При переходе с малых оборотов холостого хода двигателя на режим средних нагрузок с увеличением разрежения в диффузоре расход бензина возрастает в большей мере, чем расход воздуха, и горючая смесь чрезмерно обогащается.
По мере дальнейшего открытия дроссельной заслонки расход бензина изменяется пропорционально расходу воздуха, состав смеси остается постоянным, и простейший карбюратор не обеспечивает необходимого обогащения горючей смеси при полном открытии дроссельной заслонки.
Для обеспечения необходимого состава горючей смеси на различных режимах работы двигателя современные карбюраторы имеют дополнительные устройства:
- главную дозирующую систему
- систему холостого хода
- экономайзер
- ускорительный насос
- пусковое устройство
Главная дозирующая система
Главная дозирующая система обеспечивает постепенное обеднение горючей смеси по мере увеличения разрежения в диффузоре, в результате чего при средних нагрузках двигатель работает на экономичной горючей смеси.
Рис. Схема карбюратора с компенсационным жиклером: 1 — дроссельная заслонка; 2 — калиброванное отверстие; 3 — распылитель компенсационного жиклера; 4 — компенсационный жиклер; 5 — компенсационный колодец; 6 — главный жиклер; 7 — распылитель главного жиклера; 8 — диффузор
В современных карбюраторах применяются дозирующие системы с компенсационным жиклером, с эмульсированием бензина в распылителе и с регулированием разрежения в диффузоре. В карбюраторе с компенсационным жиклером необходимый состав горючей смеси получается при помощи двух жиклеров: главного 6 и компенсационного 4.
В таком карбюраторе изменение состава горючей смеси в зависимости от режима работы двигателя осуществляется системой компенсационного жиклера.
Распылитель 3 сообщается с дополнительным, т. е. компенсационным, колодцем 5, бензин в который поступает через компенсационный жиклер 4.
Компенсационный колодец сообщается с атмосферой, и поэтому через компенсационный жиклер в колодец поступает почти постоянное количество бензина в зависимости от разности уровней в колодце и поплавковой камере.
При работающем двигателе с увеличением открытия дроссельной заслонки расход бензина через главный жиклер увеличивается, а расход бензина через компенсационный жиклер остается почти неизменным. Общее количество бензина, вытекающего из обоих распылителей, увеличивается в меньшей степени, чем расход воздуха, и горючая смесь обедняется.
Обеднению горючей смеси способствует также приток воздуха, засасываемого через компенсационный колодец и проходящего вместе с бензином через распылитель.
Проходные сечения главного и компенсационного жиклеров выбираются такими, чтобы обеспечить экономичный состав горючей смеси при работе двигателя на средних нагрузках.
Схема дозирующей системы с эмульсированием бензина в распылителе показана на рисунке.
Бензин из поплавковой камеры через главный жиклер 8 поступает в колодец 4. Колодец сообщается с атмосферой через воздушный жиклер 3 и эмульсионную трубку 5 с несколькими отверстиями в нижней части.
При выходе бензина из колодца через распылитель 2 в колодце возникает разрежение. Вследствие этого в колодец начинают поступать бензин через главный жиклер 8 и воздух через жиклер 3. Бензин и воздух перемешиваются в колодце и выходят через распылитель в виде эмульсии. По мере увеличения разрежения в диффузоре расход бензина из колодца повышается в большей степени, чем приток его через жиклер 8. Уровень бензина в колодце понижается, увеличивается число открытых отверстий в эмульсионной трубке и количество воздуха, поступающего в колодец.
В результате расход бензина с увеличением разрежения в диффузоре возрастает медленнее, чем в простейшем карбюраторе, и горючая смесь обедняется.
Сечения главного и воздушного жиклеров выбираются такими, чтобы состав горючей смеси при работе двигателя на средних нагрузках был экономичным.
Схема карбюратора, в котором необходимый состав горючей смеси, обеспечивается дозирующей системой с автоматическим регулированием разрежения в диффузоре, показана на рисунке.
Рис. Схема дозирующей системы с эмульсированием бензина в распылителе: 1 — воздушный на трубок; 2 — распылитель; 3 — воздушный жиклер; 4 — колодец; 5 — эмульсионная трубка; о — отверстия для воздуха; 7 — поплавковая камера; 8 — главный жиклер; 9 — дроссельная заслонка; 10 — диффузор
Карбюратор данного типа имеет два или три диффузора, два жиклера и два распылителя. К нижней части большого диффузора 1 прикреплены четыре упругие пластины 4, которые нижними концами прижимаются к среднему диффузору 3 и закрывают проход между большим и средним диффузорами. В горловине малого диффузора 2 размещен распылитель 7 главного жиклера 5. Через главный жиклер проходит основное количество бензина. В горловине большого диффузора 1 размещен распылитель 8 дополнительного жиклера 6.
Количество подаваемого через жиклеры бензина зависит от разрежения в диффузорах.
Регулирование состава горючей смеси осуществляется главным жиклером 5 за счет того, что разрежение в малом диффузоре изменяется не пропорционально общему расходу воздуха.
При небольшом открытии дроссельной заслонки, когда через карбюратор проходит небольшое количество воздуха, весь воздушный поток направляется через малый и средний диффузоры. В малом диффузоре создается такое разрежение, при котором из распылителя главного жиклера выходит количество бензина, достаточное для получения обогащенной смеси.
Рис. Схема карбюратора с автоматическим регулированием разрежения в диффузоре: 1 — большой диффузор; 2 — малый диффузор; 3 — средний диффузор; 4 — упругая пластина; 5 — главный жиклер; 6 — дополнительный жиклер; 7 — распылитель главного жиклера; 8 — распылитель дополнительного жиклера
При увеличении открытия дроссельной заслонки или при увеличении числа оборотов коленчатого вала двигателя количество воздуха, проходящего через карбюратор, возрастает.
Под действием напора воздуха пластины 4 отгибаются и часть воздуха проходит мимо малого диффузора. Чем больше поток воздуха, тем больше раздвигаются пластины и тем больше воздуха проходит мимо малого диффузора. В результате разрежение в малом диффузоре не увеличивается пропорционально увеличению воздушного потока; расход бензина через главный жиклер по сравнению с общим расходом воздуха уменьшается, и горючая смесь обедняется.
При правильном подборе обоих жиклеров почти на всех режимах работы двигателя можно получить и горючую смесь нужного состава.
Система холостого хода
При работе двигателя на холостой ходу в целях экономии горючего и уменьшения износа деталей двигателя стремятся, чтобы , число оборотов коленчатого вала было минимальным. На холостом ходу двигатель работает с почти полностью прикрытой дроссельной заслонкой. Расход воздуха при этом мал, и разрежение в диффузоре недостаточно для подачи не; обходимого количества бензина из главной дозирующей системы.
Требуемый состав горючей смеси для этого режима работы двигателя обеспечивается системой холостого хода. Бензин через жиклер 2 поступает в эмульсионный канал 7, расположенный, в корпусе карбюратора. В этот же канал через жиклер 1 поступает воздух. Воздух и бензин перемешиваются и в виде эмульсии выходят из отверстия 9.
В современных карбюраторах в целях плавного перехода с оборотов холостого хода на режим средних оборотов имеются два отверстия 8 и 9 для выхода эмульсии. Отверстие 8 находится перед дроссельной заслонкой, а другое 9 — за ней. Когда дроссельная заслонка прикрыта, эмульсия выходит через отверстие 9, а через отверстие 8 в эмульсионный канал 7 дополнительно подсасывается воздух.
При плавном открытии дроссельной заслонки разрежение создается также около отверстия 8 и из него начинает выходить эмульсия, что обеспечивает необходимое количество и надлежащий состав горючей смеси.
По мере открытия дроссельной заслонки увеличивается воздушный поток; соответственно увеличиваются разрежение в диффузоре и поступление бензина из главного жиклера. Карбюратор переходит с работы системы холостого хода на работу главной дозирующей системы.
Рис. Система холостого хода: 1 — воздушный жиклер; 2 — жиклер холостого хода; 3 — главный жиклер; 4 — винт регулировки числа оборотов холостого хода; 5 — рычажок на оси дроссельной заслонки; 6 — винт регулировки состава горючей смеси; 7 — эмульсионный канал; 8 и 9 — отверстия для выхода эмульсии; 10 — дроссельная заслонка
Количество эмульсии, подаваемое системой холостого хода, регулируется винтом 6, при помощи которого изменяется проходное сечение отверстия 9. При ввертывании винта количество эмульсии уменьшается, при вывертывании — увеличивается.
Число оборотов коленчатого вала двигателя на холостом ходу регулируется изменением величины открытия дроссельной заслонки 10 при помощи винта 4.
Экономайзер
Главная дозирующая система карбюратора регулируется так, чтобы на средних нагрузках двигатель работал на экономичной смеси. При режиме максимальных нагрузок в цилиндры двигателя нужно подавать обогащенную смесь. Обогащение смеси обеспечивается дополнительным устройством карбюратора — экономайзером.
Клапан 7 экономайзера прижимается к седлу пружиной 9 и открывается под нажимом стержня 5, имеющего на верхнем конце поршень 3. Поршень помещен в цилиндре 4, нижняя полость которого соединена с воздушным патрубком, а верхняя — каналом 8 со смесительной камерой за дроссельной заслонкой.
Поршень со стержнем под действием пружины 2 стремится занять нижнее положение. При небольшом открытии дроссельной заслонки за ней создается большое разрежение, которое передается по каналу 8 в верхнюю полость цилиндра экономайзера. Под действием разрежения поршень сжимает пружину 2 и занимает верхнее положение. Клапан 7 закрывает входное отверстие.
С увеличением открытия дроссельной заслонки разрежение в воздушном патрубке настолько уменьшается, что под действием пружины 2 поршень 3 опустится вниз, стержень 5 надавит на клапан 7, который откроет входное отверстие, из поплавковой камеры через жиклер 10 в распылитель 1 начнет поступать дополнительное количество бензина — смесь обогащается.
Ускорительный насос
Ускорительный насос предназначен для кратковременного обогащения горючей смеси при резком открытии дроссельной заслонки.
Рис. Схема экономайзера с пневматическим приводом: 1 — распылитель; 2 — пружина; 3 — поршень; 4 — цилиндр; 5 — стержень; 6 — главный жиклер; 7 — клапан экономайзера; 8 — канал; 9 — пружина клапана; 10 — жиклер экономайзера
В корпусе карбюратора имеется цилиндр 8, в котором помещен поршень 7 насоса. Цилиндр соединен с поплавковой камерой каналом, в начале которого размещен обратный клапан 9. В выходном канале имеется игольчатый клапан 10.
Поршень приводится в действие механизмом привода дроссельной заслонки посредством рычага 13, поводка 12, тяги 11 и нажимной пластины 4, которая действует на поршень через пружину 5. При плавном открытии дроссельной заслонки поршень насоса медленно опускается и постепенно выжимает бензин из цилиндра в поплавковую камеру через открытый обратный клапан 9.
При резком открытии дроссельной заслонки поршень быстро опускается и выжимает бензин из цилиндра. При этом бензин приподнимает обратный клапан, который перекрывает входное отверстие, препятствуя выходу бензина обратно в поплавковую камеру. Бензин, приподнимая игольчатый клапан 10, впрыскивается через жиклер 3 в смесительную камеру карбюратора и обогащает горючую смесь.
Пусковое устройство
Наиболее распространенным устройством для обогащения горючей смеси при запуске двигателя является воздушная заслонка 12, установленная в воздушном патрубке карбюратора.
При запуске двигателя дроссельную заслонку слегка открывают, а воздушную заслонку прикрывают. Вследствие этого при провертывании коленчатого вала двигателя в карбюраторе создается сильное разрежение и бензин вытекает изо всех жиклеров — горючая смесь обогащается.
Воздушная заслонка имеет предохранительный клапан 11, который открывается автоматически, как только двигатель начинает работать.
Управление воздушной заслонкой осуществляется при помощи кнопки, расположенной на щитке приборов и соединенной с заслонкой гибкой тягой.
Рис. Схема ускорительного насоса с механическим приводом: 1 — воздушный патрубок; 2 — воздушный канал; 3 — жиклер ускорительного насоса; 4 — нажимная пластина; 5 — пружина; 6 — стержень; 7 — поршень; 8 — цилиндр; 9 — обратный клапан; 10 — игольчатый клапан; 11 — тяга; 12 — поводок; 13 — рычаг
По мере прогрева двигателя воздушную заслонку постепенно открывают. Работа двигателя с прикрытой воздушной заслонкой должна быть по возможности кратковременной, так как сильное обогащение горючей смеси при работе холодного двигателя вызывает его повышенный износ.
Ограничитель максимального числа оборотов
Работа двигателя с числом оборотов коленчатого вала свыше максимально допустимых приводит к перерасходу горючего и усиленному износу трущихся деталей двигателя. Во избежание этого двигатели автомобилей часто снабжаются пневматическими ограничителями числа оборотов.
Дроссельная заслонка 4 имеет фигурную форму со скошенной плоскостью левой половины, а ее ось на 1,5—2 мм смещена относительно оси смесительной камеры.
К заслонке присоединена пружина 9, которая стремится удерживать заслонку в открытом положении.
При работе двигателя воздушный поток действует на дроссельную заслонку и, так как верхняя плоскость ее левой половины скошена, а ось смещена вправо, стремится прикрыть заслонку.
Когда число оборотов коленчатого вала становится больше допустимого, давление воздушного потока на левую часть заслонки настолько возрастает, что заслонка, преодолевая сопротивление пружины, прикрывается, в цилиндры подается меньшее количество горючей смеси и обороты коленчатого вала двигателя уменьшаются.
Рис. Ограничитель максимальных оборотов коленчатого вала двигателя: 1 — футорка; 2 — гайка; 3 — штуцер; 4 — дроссельная заслонка; 5 — стержень; 6 — игольчатый подшипник; 7 — ось дроссельной заслонки; 8 — серьга; 9 — пружина; 10 — прокладка; 11 — колпак; 12 — шпилька
Ограничитель числа оборотов действует независимо от педали управления дроссельной заслонкой. При отпущенной педали дроссельная заслонка прикрыта под действием возвратной пружины педали, которая значительно сильнее пружины ограничителя числа оборотов.
При нажатии на педаль дроссельная заслонка освобождается от действия возвратной пружины педали и открывается вследствие натяжения своей пружины.
Изменяя натяжение пружины 9 вращением регулировочной гайки 2, можно отрегулировать максимальное число оборотов вала двигателя.
Рассмотрим устройство и работу карбюраторов, установленных на двигателях некоторых отечественных автомобилей.
Карбюратор К-22Д
Карбюратор К-22Д, устанавливаемый на двигателе автомобиля ГАЗ-69, является трехдиффузорным карбюратором.
Главная дозирующая система карбюратора работает по принципу регулирования разрежения в диффузоре. Она состоит из главного жиклера 27, распылитель которого выходит в малый диффузор 10, дополнительного жиклера 25, распылитель которого выходит в горловину большого диффузора 14, и автоматического перепускного воздушного клапана, состоящего из четырех упругих пластин 5.
Количество бензина, проходящее через главный жиклер, может регулироваться в зависимости от условий работы двигателя игольчатым клапаном 26.
Рис. Карбюратор К-22Д: 1 — фланец; 2 — винт регулировки качества смеси на холостом ходу; 3 — отверстие для выхода эмульсин при переходе с оборотов холостого хода к средним оборотам коленчатого вала двигателя; 4 — отверстие для вакуум-регулятора; 5 — упругая пластина; 6 — жиклер холостого хода; 7 — средний диффузор; 8 — эмульсионный жиклер холостого хода; 9 — воздушные жиклеры холостого хода; 10 — малый дтффузор; 11 — предохранительный клапан воздушной заслонки; 12 — воздушная заслонка; 13 — трубка; 14 — большой диффузор; 15 — жиклер ускорительного насоса; 16 — распылители; 17 — нагнетательный клапан ускорительного насоса; 18— поршень ускорительного насоса; 19 — обратный клапан; 20 — поплавок; 21 — запорная игла; 22 — корпус поплавковой камеры; 23 — шток привода поршня ускорительного насоса; 24 — клапан экономайзера; 25 — дополнительный жиклер; 26 — игольчатый клапан главного жиклера; 27 — главный жиклер; 28 — жиклер экономайзера; 29 — дроссельная заслонка
Система холостого хода состоит из жиклера 6 холостого хода, двух воздушных жиклеров 9 и эмульсионного жиклера 5.
Экономайзер и ускорительный насос объединены в одну систему, состоящую из ускорительного насоса с поршнем 18, нагнетательного клапана 17 насоса, жиклера 15, обратного клапана 19, жиклера 28 и клапана 24 экономайзера. Привод ускорительного насоса механический, от дроссельной заслонки.
Поплавковая камера трубкой 18 сообщается с воздушным патрубком, а не с атмосферой, вследствие чего устраняется влияние сопротивления воздушного фильтра на работу карбюратора.
При работе двигателя на малых оборотах холостого хода дроссельная заслонка прикрыта. Вследствие большой скорости движения воздуха через узкую щель между заслонкой и стенками смесительной камеры в зоне дроссельной заслонки образуется разрежение.
Так как в этой зоне расположено выходное отверстие системы холостого хода, разрежение передается в систему и она работает как самостоятельный карбюратор.
Бензин из поплавковой камеры поступает к жиклеру 6 холостого хода через дополнительный жиклер 25 по каналам карбюратора. Пройдя жиклер холостого хода, бензин поднимается и, встречаясь с воздухом, поступающим через воздушный жиклер 9, перемешивается с ним и в виде эмульсии проходит через эмульсионный, жиклер 8.
Выходя из эмульсионного жиклера, бензин вновь встречается с потоком воздуха, проходящим через втброй воздушный жиклер, и перемешивается с ним. Эмульсия выходит через отверстие холостого хода за дроссельной заслонкой.
Расход эмульсии и, следовательно, качество горючей смеси на холостом ходу регулируется винтом 2.
При работе двигателя и а средних нагрузках (дроссельная заслонка открыта примерно наполовину) разрежение в диффузорах настолько возрастает, что основное количество бензина выходит из распылителей главного 27 и дополнительного 25 жиклеров.
По мере увеличения воздушного потока, проходящего через диффузор, пластины 5 перепускного воздушного клапана расходятся и воздушный поток проходит мимо малого 10 и среднего 7 диффузоров, автоматически регулируя разрежение в малом диффузоре и, следовательно, состав горючей смеси в зависимости от величины открытия дроссельной заслонки.
При работе двигателя с полной нагрузкой дроссельная заслонка полностью открыта. При этом поршень 18 ускорительного насоса находится в нижнем положении и, нажимая на клапан 24 экономайзера, открывает доступ дополнительному количеству бензина, который из поплавковой камеры проходит через жиклер 28 экономайзера к распылителю дополнительного жиклера.
При резком открытии дроссельной заслонки поршень ускорительного насоса резко опускается и выжимает бензин из цилиндра. Обратный клапан 19 закрывается, а клапан 17 ускорительного насоса открывается, и бензин через жиклер 15 струйкой выбрасывается в горловину большого диффузора 14 — горючая смесь обогащается.
Горючая смесь при запуске двигателя обогащается прикрытием воздушной заслонки 12, имеющей предохранительный клапан 11.
По схеме карбюратора К-22Д выполнен и карбюратор К-22Г, который устанавливается на двигатели автомобилей ГАЗ-63 и ГАЗ-51 А.
Карбюратор типа К-82
Рис.
Карбюратор типа К-82: 1 — фланец; 2— эмульсионный канал; 3 — прокладка; 4 — канал ускорительного насоса; 5 — клапан ускорительного насоса; 6 — жиклер ускорительного насоса; 7 — малый диффузор; 8 — кольцевая щель; 9 — корпус воздушного патрубка; 10 — воздушная заслонка; 11 — предохранительный клапан; 12 — жиклер холостого хода; 13 — седло клапана экономайзера с пневматическим приводом; 14 — игла клапана экономайзера; 15 — отверстие, через которое поплавковая камера соединяется с воздушным патрубком; 16 — винт регулировки качества смеси на холостом ходу; 17 — поршень пневматического привода экономайзера; 18 — нажимная пластина; 19 — толкатель клапана экономайзера с механическим приводом; 20 — шток поршня ускорительного насоса; 21 — пружина; 22 — пробка фильтра; 23 — сетчатый фильтр; 24 — запорная игла; 25 — прокладка; 26 — корпус поплавковой камеры; 27 — поплавок: 28 — поршень ускорительного насоса; 29 — обратный клапан; 30 — шток привода поршня ускорительного насоса; 31 — поводок штока; 32— шарик клапана экономайзера; 33 — рычаг привода ускорительного насоса; 34 — пружина клапана экономайзера; 35 — гнездо клапана экономайзера; 36 — уплотнительное кольцо; 37 — пружина поршня экономайзера; 38 — главный жиклер; 39 — канал; 40 — пробка; 41 — жиклер полной мощности; 42 — дроссельная заслонка; 43 — эмульсионная трубка; 44 — воздушный жиклер; 45 — выходное отверстие
Карбюратор типа К-82 является двухдиффузорным карбюратором. Он устанавливается на двигателях автомобилей ЗИЛ-164А и ЗИЛ-164.
Главное дозирующее устройство, работающее по принципу эмульсирования горючего в распылителе, состоит из двух топливных жиклеров 38 и 41, воздушного жиклера 44 и распылителя в виде кольцевой щели 8 в малом диффузоре. В колодце главного дозирующего устройства помещена эмульсионная трубка 43 с отверстиями.
Система холостого хода состоит из жиклера 12 холостого хода, канала 2 и выходного отверстия 45 в виде щели. Качество горючей смеси на холостом ходу регулируется винтом 16, а ее количество — открытием дроссельной заслонки.
Ускорительный насос поршневого типа с механическим приводом от дроссельной заслонки подает горючее по каналу 4 к жиклеру 6.
В карбюраторе имеются два клапана экономайзера. Клапан с механическим приводом состоит из гнезда 35, шарика 32 и пружины 34, которая прижимает шарик к гнезду. Клапан с пневматическим приводом состоит из седла 13 и иглы 14, которая связана с поршнем 17 пневматического привода. Поршень при помощи пружины 37 при неработающем двигателе занимает верхнее положение. Пространство под поршнем соединено каналом 39 со смесительной камерой за дроссельной заслонкой.
При работе двигателя на холостом ходу дроссельная заслонка прикрыта. Разрежение за дроссельной заслонкой распространяется через выходное отверстие 45 по каналу 2 до жиклера 12 холостого хода. Вследствие этого бензин из колодца главного дозирующего устройства поступает к жиклеру холостого хода. Одновременно к жиклеру поступает воздух. Смесь бензина с воздухом, пройдя через жиклер холостого хода, поступает к выходному отверстию.
Работа двигателя на средних оборотах. С увеличением открытия дроссельной заслонки возрастает воздушный поток, проходящий через малый диффузор, в результате чего разрежение в диффузоре оказывается достаточным для того, чтобы в работу вступила главная дозирующая система.
Бензин из поплавковой камеры поступает через жиклеры 38 и 41 в колодец. Сюда же поступает воздух через жиклер 44 и отверстия в эмульсионной трубке 43. Смесь бензина с воздухом выходит через кольцевую щель 8 в малом диффузоре.
Сечения топливного и воздушного жиклеров подобраны так, чтобы приготавливалась смесь обедненного состава при небольших и средних величинах открытия дроссельной заслонки. В этих случаях оба клапана экономайзера закрыты. Клапан экономайзера с механическим приводом закрыт под действием пружины 34. Клапан с пневматическим приводом закрыт вследствие разрежения в цилиндре под поршнем 17. Под действием разрежения, которое передается из смесительной камеры, поршень занимает нижнее положение, сжимая пружину 37. Вместе с поршнем в нижнем положении находится игла 14, которая своим нижним концом прижимается к седлу 13 и закрывает топливный канал.
Чтобы разрежение не передавалось в поплавковую камеру, поршень 17 в иижием положении садится на уплотнительное кольцо 36.
С увеличением открытия дроссельной заслонки разрежение под поршнем пневматического экономайзера уменьшается и поршень под действием пружины 37 поднимается. Когда разрежение за дроссельной заслонкой уменьшится до определенной величины (125 мм рт. ст.), поршень и вместе с ним игла 14 поднимутся настолько, что игла откроет входное отверстие жиклера и дополнительное количество бензина из поплавковой камеры начнет поступать к жиклеру 41 полной мощности. Горючая смесь несколько обогащается, что необходимо при неустановившемся движении автомобиля (например, при разгоне, при движении автомобиля по грунтовым дорогам и местности).
Клапан экономайзера с механическим приводом открывается, когда дроссельная заслонка почти полностью открыта.
При открытии дроссельной заслонки шток 30 опускается; когда заслонка почти полностью открыта, пластина 18 на штоке 30 нажимает на толкатель 19, который, опускаясь, откроет шариковый клапан. Бензии из поплавковой камеры дополнительно поступает к жиклеру 41 полной мощности, сечение которого рассчитано на приготовление обогащенной смеси.
При резком открытии дроссельной заслонки обогащение смеси осуществляется ускорительным насосом. В этом случае поршень резко опускается и бензин выжимается из-под поршня. Обратный клапан 29 прижимается к седлу и перекрывает канал, ведущий, в поплавковую камеру. Бензин по каналу 4 подается к жиклеру 6 и вытекает из него тонкой струйкой, обогащая горючую смесь. Обогащение горючей смеси при запуске холодного двигателя осуществляется прикрытием воздушной заслонки. Воздушная и дроссельная заслонки связаны между собой приводными тягами так, что при полном закрытии воздушной заслонки дроссельная заслонка немного открыта. Это достаточно обогащает смесь и обеспечивает надежный запуск двигателя.
Устройство и работа простейшего карбюратора
Устройство и работа простейшего карбюратора. Для грамотной эксплуатации карбюратора необходимо изучить прежде всего конструктивные его особенности и понять принципы работы систем на различных режимах, знать возможные неисправности и разрегулировки, причины возникновения, а также методы их обнаружения и устранения.
Рис. 2. Принципиальная схема простейшего карбюратора:
1 — поплавковая камера; 2 – рычаг; 3 – поплавок; 4 – игла; 5 — топливный клапан; 6 — топливный канал; 7 — распылитель; 8 — главный воздушный канал; 9 – диффузор; 10 — дроссельная заслонка; 11 — топливный жиклер.
В поплавковой камере за счет поплавка с иглой и топливного клапана поддерживается постоянный уровень топлива h, поступающего из бензинового бака.
Главный воздушный канал обеспечивает подачу воздуха в карбюратор. В средней части он сужается, образуя диффузор, предназначенный для увеличения скорости воздушного потока и обеспечивающий улучшение условий испарения топлива и смесеобразования.
Дроссельная заслонка 10 предназначена для изменения количества горючей смеси, поступающей в цилиндры двигателя в соответствии с требуемой мощностью.
Истечение из жиклера топлива сопровождается затратой энергии на его поднятие к распылителю 7. Распад струи топлива начинается при разности скоростей движения топлива и воздушного потока равной 4—6 м/с. В современном карбюраторе размер капель составляет 20—120 мкм.
Оптимальной является величина капель равная 50 мкм. При этом мелкость распыливания (дробления) топлива уменьшается с повышением температуры топлива за счет снижения коэффициента поверхностного натяжения и увеличения разности относительной скорости топлива и воздушного потока. Скорость истечения топлива в 25 раз меньше скорости воздушного потока.
Работа карбюратора осуществляется в соответствии с эжекционным (пульверизационным) принципом. Под действием разрежения, представляющим разность между давлением в поплавковой камере и в диффузоре карбюратора, топливо из поплавковой камеры через топливный жиклер и распылитель поступает в диффузор, а затем в главный воздушный канал.
В современных карбюраторах истечение топлива начинается при достижении разрежения 100 Па (10 мм вод. ст.). При меньших значениях через карбюратор поступает только чистый воздух. Уменьшение давления в зоне распылителя обусловлено ростом скорости воздушного потока в диффузоре и местного сопротивления.
При неработающем двигателе давление в поплавковой камере и в зоне распылителя в диффузоре одинаковое. При пуске двигателя разрежение, возникающее в цилиндре при ходе всасывания, передается через впускной трубопровод и главный воздушный жиклер в зону распылителя. В результате за счет возникшей разности давления в поплавковой камере и диффузоре топливо поступает из поплавковой камеры к распылителю и вытекает из него в главный воздушный канал, смешивается с воздухом и поступает в цилиндры.
Повышение скорости потока воздуха при его прохождении через диффузор приводит к дальнейшему снижению давления в зоне распылителя. Уменьшать сечение диффузора можно только до определенного предела, так как в дальнейшем это вызывает повышенное сопротивление для прохода воздуха, что сопровождается снижением мощности двигателя из-за уменьшения коэффициента наполнения цилиндров.
Образование горючей смеси в смесительной камере карбюратора происходит не в полном объеме. Часть топлива в виде капелек не успевает испариться и перемешаться с воздухом. Не испарившиеся капельки топлива движутся в потоке воздуха и оседают на стенках смесительной камеры и впускного трубопровода. Топливо, осевшее на стенки, образует пленку, которая движется с малой скоростью.
Чтобы испарить пленку топлива, впускной трубопровод при работе двигателя подогревается. Чаще всего используется жидкостный подогрев (от системы охлаждения двигателя) или подогрев теплом отработавших газов. Таким образом, можно считать, что образование горючей смеси заканчивается в конце впускного трубопровода двигателя.
В зависимости от направления потока воздуха в смесеобразующем устройстве, карбюраторы подразделяются на несколько типов. Наиболее широко применяют карбюраторы, в которых горючая смесь движется сверху вниз (рис. 2). Такие карбюраторы называют карбюраторами с падающим потоком смеси. Они обеспечивают высокие мощностные и экономические показатели и удобное для обслуживания расположение на двигателе. Карбюраторы с движением горючей смеси вверх называют карбюраторами с восходящим потоком. Они относятся к устаревшим конструкциям, и поэтому нами рассматриваться не будут.
Для современных многоцилиндровых двигателей стали применять двухкамерные карбюраторы с параллельным и последовательным открытием дроссельных заслонок. Название «двухкамерные» карбюраторы получили по числу имеющихся в них смесительных устройств, или смесительных камер. Двухкамерный карбюратор (рис. 3) с параллельным открытием дроссельных заслонок имеет две смесительные камеры 2, одну поплавковую камеру 1 и две дроссельные заслонки 3, закрепленные на одной оси. При повороте оси дроссельные заслонки будут открывать сечение выпускных патрубков 4 карбюратора синхронно, обеспечивая параллельное действие смесительных камер. Каждая смесительная камера карбюратора отдельным трубопроводом соединяется с группой цилиндров и питает их горючей смесью.
Двухкамерный карбюратор с последовательным открытием дроссельных заслонок имеет примерно такое же устройство. Разница заключается лишь в приводе дроссельных заслонок и конструкции выпускного патрубка, который делается общим для обеих смесительных камер. При работе этого карбюратора вначале открывается дроссельная заслонка одной камеры (основной). Как только первая заслонка откроется на 70—80% от полного открытия, начинает открываться дроссельная заслонка второй камеры (дополнительной). При этом вступает в работу дополнительная смесительная камера, обеспечивая поступление в цилиндры большого количества горючей смеси.
Рис. 3. Двухкамерный карбюратор с параллельным открытием дроссельных заслонок: 1— поплавковая камера; 2 — смесительные камеры; 3 — дроссельные заслонки; 4 — выпускные патрубки карбюратора.
Число камер в карбюраторах не ограничивается двумя, но определяется числом и расположением цилиндров двигателя. Так на двигателе БМВ 740 установлен карбюратор, имеющий 4 камеры, причем работающий как два двухкамерных карбюратора с последовательным открытием дроссельных заслонок. Использование многокамерных (двухкамерных) карбюраторов позволяет улучшить наполнение цилиндров двигателя горючей смесью, так как уменьшаются потери напора смеси во впускных трубопроводах. Это объясняется тем, что смесь движется постоянно в одном направлении. Особенно хорошие результаты дают такие карбюраторы в V-образных двигателях, где каждая камера карбюратора снабжает горючей смесью один ряд цилиндров.
Применение многокамерных карбюраторов обеспечивает увеличение мощности двигателя, снижение расхода топлива и токсичности отработавших газов. Это преимущество многокамерных карбюраторов наиболее полно проявляется у карбюраторов с последовательным открытием дроссельных заслонок.
Карбюраторы Автомобильные — Солекс, Озон.
Пособие по ремонту и обслуживанию автомобильных карбюраторов марки — Озон и Солекс. В каждом руководстве изложены принципы работы основных систем карбюратора, описана конструкция карбюраторов семейства «Солекс» и «Озон». Подробно рассмотрены возможные неисправности, их причины и способы устранения. Процессы регулировки, ремонта и доработки карбюраторов проиллюстрированы и снабжены подробными комментариями.
Инструкции по ремонту карбюраторов предназначены для водителей, желающих самостоятельно обслуживать и ремонтировать автомобили с двигателями, оборудованными карбюраторы марки «Солекс» и «Озон».
Характеристика карбюраторов | Автолюкс.ру
Характеристика карбюраторов. Простейший карбюратор на двигателях автомобилей практически не используется, так как имеет серьезные недостатки, главный из которых заключается в том, что этот карбюратор не может изменять состав приготовляемой смеси при изменении режимов работы двигателя.
Для оценки работы карбюраторов используют функциональную зависимость между коэффициентом избытка воздуха и степенью открытия дроссельной заслонки.
На рис. 4 приведены зависимости изменения составов смеси от ее количества, поступающего в двигатель. Из рассмотрения этих зависимостей можно заключить, что коэффициент избытка воздуха, обеспечиваемый простейшим карбюратором, уменьшается по мере роста расхода смеси. Это означает обогащение горючей смеси при увеличении ее поступления в двигатель.
Обогащение горючей смеси в простейшем карбюраторе при увеличении ее подачи в двигатель объясняется тем, что в этом случае дроссельная заслонка открывается на больший угол и увеличивается поток воздуха через диффузор карбюратора. Это вызывает увеличение разрежения в диффузоре и более интенсивное истечение топлива из распылителя, в результате чего смесь обогащается.
Для нормальной работы двигателя необходимо, наоборот, при увеличении подачи смеси в двигатель обеднять ее, при полной подаче—обогащать (кривая 2). Следовательно, характеристика простейшего карбюратора и требуемая характеристика совершенно противоположны.
Совпадение их в точке А говорит о том, что простейший карбюратор может обеспечить требуемый состав смеси лишь для какого-то ограниченного режима двигателя. В случае меньшего открытия дроссельной заслонки карбюратор будет давать переобедненную смесь, при большом открытии—переобогащённую.
Причиной переобеднения смеси при малом открытии дроссельной заслонки является уменьшение разрежения в диффузоре, так как скорость потока воздуха падает. Малое разрежение не обеспечивает поднятия топлива до устья распылителя и преодоления его поверхностного натяжения. Вследствие этого поступление топлива в диффузор прекращается и двигатель в режиме холостого хода при малом открытии дроссельной заслонки перестает работать.
Из рассмотрения характеристики простейшего карбюратора (кривая 1) также видно, что карбюратор не обеспечивает необходимого обогащения смеси в случае разгона автомобиля при резком открытии дроссельной заслонки. В начальный момент при этом произойдет обеднение смеси, так как воздух имеет большую подвижность, чем топливо, и устремится в смесительную камеру в большом количестве. Вместо увеличения частоты вращения коленчатого вала двигателя может произойти «провал» в его работе или полная остановка.
Рис.4. Изменение коэффициента избытка воздуха от количества смеси, поступающей в двигатель:
1 – характеристика простейшего карбюратора;
2 – требуемая характеристика.
При пуске холодного двигателя в цилиндр должно поступать большое количество горючей смеси, образующейся из легкоиспаряющихся фракций топлива. Это достигается очень сильным обогащением смеси подачей в смесительную камеру карбюратора большого количества топлива. Однако простейший карбюратор не может обеспечить этого требования, так как на малой частоте вращения коленчатого вала при пуске в диффузоре будет недостаточное разрежение.
Чтобы обеспечить работу двигателя во всех режимах эксплуатации, в простейший карбюратор вводят дополнительные устройства. Такими устройствами являются:
- система холостого хода,
- система компенсации смеси или главная дозирующая система,
- экономайзер и эконостат,
- ускорительный насос,
- пусковые приспособления.
Все приспособления и устройства, обеспечивающие необходимый состав смеси для различных режимов работы двигателя, называют дозирующими. Кроме дозирующих устройств карбюраторы имеют различные вспомогательные приспособления, автоматизирующие управление карбюратором и двигателем.
Карбюраторы Автомобильные — Солекс, Озон.
Пособие по ремонту и обслуживанию автомобильных карбюраторов марки — Озон и Солекс. В каждом руководстве изложены принципы работы основных систем карбюратора, описана конструкция карбюраторов семейства «Солекс» и «Озон». Подробно рассмотрены возможные неисправности, их причины и способы устранения. Процессы регулировки, ремонта и доработки карбюраторов проиллюстрированы и снабжены подробными комментариями.
Инструкции по ремонту карбюраторов предназначены для водителей, желающих самостоятельно обслуживать и ремонтировать автомобили с двигателями, оборудованными карбюраторы марки «Солекс» и «Озон».
PowerPedia: Карбюратор — PESwiki.com
{| cellspacing = «0» cellpadding = «0»
| __TOC__
|}
Карбюратор, карбюратор или карбюратор (также называемый «карбюратор» или «карбюратор») — это устройство, которое смешивает воздух и топливо для двигателя внутреннего сгорания. Он был изобретен венгерскими учеными Донатом Банки и Яношом Чонкой в 1893 году. Карбюраторы до сих пор используются в небольших двигателях, а также в более старых или специализированных автомобилях, например, в тех, которые предназначены для гонок на серийных автомобилях.Однако впрыск топлива, впервые представленный в конце 1950-х годов и впервые успешно реализованный в начале 1970-х годов, в настоящее время является предпочтительным методом доставки автомобильного топлива. Большинство мотоциклов по-прежнему оснащаются карбюратором из-за меньшего веса и стоимости, но с 2005 года многие новые модели теперь вводятся с впрыском топлива.
Введение
Карбюратор был изобретен венгерским инженером Донатом Банки в 1893 году. Фредерик Уильям Ланчестер из Бирмингема, Англия, рано экспериментировал с фитильным карбюратором в автомобилях.В 1896 году Фредерик и его брат построили первый в Англии автомобиль с бензиновым двигателем — одноцилиндровый двигатель внутреннего сгорания мощностью 5 л.с. (4 кВт) с цепным приводом. Недовольные производительностью и мощностью, они перестроили двигатель в следующем году в двухцилиндровую горизонтально-оппозитную версию, используя его новую конструкцию фитильного карбюратора. Эта версия завершила поездку на 1000 миль (1600 км) в 1900 году, успешно включив карбюратор в качестве важного шага в автомобилестроении. Слово карбюратор происходит от французского слова «карбюратор», что означает «карбид».Джордж Кингстон изобрел карбюратор в 1902 году, известный как карбюратор Kingston, в Кокомо, штат Индиана. Компания Kingston также производила такие вещи, как роликовые коньки и радио. Карбюрировать — значит сочетать с углеродом. В химии топлива этот термин имеет более конкретное значение увеличения содержания углерода (и, следовательно, энергии) в топливе путем его смешивания с летучим углеводородом.
Большинство карбюраторных двигателей (в отличие от двигателей с впрыском топлива) имеют один карбюратор, хотя в некоторых двигателях используется несколько карбюраторов.В более старых двигателях использовались карбюраторы с восходящим потоком, где воздух поступает снизу карбюратора и выходит через верх. Это имело то преимущество, что никогда не «заливало» двигатель, так как любые капли жидкого топлива выпадали из карбюратора, а не во впускной коллектор, это также позволяло использовать воздухоочиститель с масляной ванной, где лужа масла под сеткой Элемент под карбюратором всасывается в сетку, а воздух проходит через покрытую маслом сетку. Это была эффективная система в то время, когда бумажных воздушных фильтров не существовало.Начиная с конца 1930-х годов карбюраторы с нисходящим потоком были самым популярным типом для автомобильного использования в Соединенных Штатах. В Европе карбюраторы с боковой тягой заменили нисходящую тягу, поскольку свободное пространство в моторном отсеке уменьшилось, а использование карбюратора типа SU (и аналогичных устройств других производителей) увеличилось. В небольших плоских авиадвигателях с воздушным винтом все еще используется конструкция с восходящим потоком воздуха.
Карбюратор работает по принципу Бернулли: тот факт, что движущийся воздух имеет более низкое давление, чем неподвижный воздух, и что чем быстрее движется воздух, тем ниже давление.Дроссельная заслонка или акселератор не контролирует поток жидкого топлива. Вместо этого он контролирует количество воздуха, проходящего через карбюратор. Более быстрые потоки воздуха и большее количество воздуха, поступающего в карбюратор, втягивают больше топлива в карбюратор из-за создаваемого частичного вакуума.
Карбюраторы Тип
Карбюраторы:
Фиксированная трубка Вентури: изменяющаяся скорость воздуха в трубке Вентури изменяет поток топлива. Эта архитектура используется в большинстве карбюраторов с нисходящим потоком, установленных на американских и некоторых японских автомобилях.
Регулируемая трубка Вентури: (постоянное разрежение) отверстие топливного жиклера изменяется потоком воздуха для изменения потока топлива. Это делается с помощью поршня с вакуумным приводом, соединенного с конической иглой, которая скользит внутри топливного жиклера. Наиболее распространенный карбюратор типа Вентури (с постоянным разрежением) — карбюратор SU с боковой тягой и аналогичные модели от Hitachi, Zenith-Stromberg и других производителей. Расположение компаний SU и Zenith-Stromberg в Великобритании помогло этим карбюраторам занять доминирующее положение на автомобильном рынке Великобритании, хотя такие карбюраторы также очень широко использовались на автомобилях Volvo и других производителей за пределами Великобритании. Другие похожие конструкции используются на некоторых европейских и некоторых японских автомобилях.
Условия и функции
Карбюратор должен при любых условиях эксплуатации двигателя:
Измерьте расход воздуха двигателя
Подавать правильное количество топлива, чтобы поддерживать топливно-воздушную смесь в надлежащем диапазоне (с поправкой на такие факторы, как температура)
Тщательно и равномерно перемешайте оба вещества
Эта работа была бы простой, если бы воздух и бензин (бензин) были идеальными жидкостями на практике, однако их поведение отклонялось от идеального из-за вязкости, сопротивления жидкости, инерции и т. Д.требуют большой сложности для компенсации при исключительно высоких или низких оборотах двигателя. Карбюратор должен обеспечивать надлежащую топливно-воздушную смесь в широком диапазоне температур окружающей среды, атмосферного давления, частоты вращения и нагрузки двигателя, а также центробежных сил:
Холодный старт
Горячий старт
На холостом ходу или медленно
Разгон
Высокая скорость / высокая мощность при полном открытии дроссельной заслонки
Крейсерская скорость при частичной дроссельной заслонке (небольшая нагрузка)
Кроме того, для этого требуются современные карбюраторы при сохранении низкого уровня выбросов выхлопных газов.
Для правильной работы во всех этих условиях большинство карбюраторов содержат сложный набор механизмов для поддержки нескольких различных режимов работы, называемых контурами.
Основные элементы и операции
Карбюратор в основном состоит из открытой трубы, «горловины» или «бочки», через которые воздух проходит во впускной коллектор двигателя. Труба имеет форму трубки Вентури — она сужается в поперечном сечении, а затем снова расширяется, в результате чего скорость воздушного потока увеличивается в самой узкой части.Под трубкой Вентури находится дроссельная заслонка — вращающийся диск, который можно повернуть вплотную к воздушному потоку, чтобы почти не ограничивать поток, или можно повернуть так, чтобы он (почти) полностью блокировал поток воздуха. воздух. Этот клапан регулирует поток воздуха через горловину карбюратора и, таким образом, количество воздушно-топливной смеси, которую система будет подавать, регулируя тем самым мощность и скорость двигателя. Дроссельная заслонка обычно соединяется тросом или механической связью стержней и шарниров или, реже, пневматической связью, с педалью акселератора на автомобиле или аналогичным устройством управления на других транспортных средствах или оборудовании.
Топливо вводится в воздушный поток через небольшие отверстия в самой узкой части трубки Вентури. Расход топлива в ответ на определенный перепад давления в трубке Вентури регулируется с помощью точно откалиброванных отверстий, называемых жиклерами, в топливном тракте
.
Цепь холостого хода
Когда дроссельная заслонка закрыта или почти закрыта, цепь холостого хода карбюратора работает. Закрытый дроссель снижает поток воздуха через трубку Вентури до уровня, который не может преодолеть сопротивление потоку топлива, но это также означает, что за закрытым дроссельным клапаном возникает довольно значительный вакуум.Этого разрежения в коллекторе достаточно для вытягивания топлива через небольшие отверстия, расположенные после дроссельной заслонки (а в карбюраторах SU и подобных карбюраторах с боковой тягой для вытягивания поршня и дозирующего стержня вверх).
Таким образом может пройти только довольно небольшое количество воздуха и топлива. Поскольку этот небольшой объем топливно-воздушной смеси может генерировать так мало силы, чтобы двигатель продолжал вращаться, поддерживать его работу на холостом ходу труднее, чем поддерживать его работу на более высоких оборотах. Поскольку воздушный поток слишком слаб для того, чтобы карбюратор вообще мог среагировать, он не может компенсировать колебания, вместо этого техник или механик устанавливает поток воздуха на холостом ходу вручную, регулируя винт, который открывает дроссельную заслонку на крошечную долю, чтобы пропустить минимальное количество воздуха. и еще один винт, который служит клапаном в цепи холостого хода топлива для регулировки объема подаваемого топлива.Эти регулировки взаимодействуют друг с другом, а также влияют на вакуум в коллекторе, который влияет на опережение зажигания в распределителе, что, в свою очередь, влияет на скорость холостого хода, так что регулировка холостого хода до оптимума (самый высокий вакуум в коллекторе при указанных оборотах холостого хода двигателя) не является полностью тривиальной операцией. В то время как эксперты часто заявляют о возможности идеально настраивать холостой ход на слух, большинство людей лучше справляются с этой задачей, используя тахометр и вакуумметр. С появлением средств контроля выбросов на серийных автомобилях расход топлива на холостом ходу обычно устанавливается на заводе на «обедненную» сторону от оптимального, ограничивая поток топлива таким образом, чтобы частота вращения холостого хода упала на 100-150 об / мин по сравнению с тем значением, которое было при оптимальной настройке.
, чтобы уменьшить количество несгоревших углеводородов и окиси углерода с некоторой незначительной потерей надежной и плавной работы на холостом ходу, регулировка холостого хода обычно герметизируется на заводе, чтобы предотвратить вмешательство, так что регулировка по мере старения и износа вызывает большое отклонение от правильной работы, требует высверливания заглушка регулировочного винта или аналогичная модификация для доступа.
Контур холостого хода
Поскольку дроссельная заслонка немного открывается из полностью закрытого положения, дроссельная заслонка открывает дополнительные отверстия для подачи топлива, расположенные немного выше в горловине карбюратора, которые позволяют протекать большему количеству топлива, а также компенсируют пониженный вакуум, который возникает при открытии дроссельной заслонки таким образом сглаживается переход к дозированию расхода топлива через штатный открытый дроссельный контур.
Главный контур открытого дросселя
По мере того, как дроссельная заслонка постепенно открывается, разрежение в коллекторе уменьшается, поскольку существует меньшее ограничение для воздушного потока, уменьшая поток через контуры холостого хода и холостого хода. Именно здесь имеет значение форма Вентури горловины карбюратора из-за принципа Бернулли (т.е. с увеличением скорости давление падает). Трубка Вентури (иногда вторая или «бустерная» трубка Вентури помещается внутри трубки Вентури в форме горловины карбюратора для увеличения эффекта) увеличивает скорость воздуха, и эта высокая скорость и, следовательно, низкое давление всасывают топливо в воздушный поток через сопло, расположенное в центр трубки Вентури.
При закрытии дроссельной заслонки поток воздуха через трубку Вентури падает до тех пор, пока пониженное давление не становится недостаточным для поддержания этого потока топлива, и снова включается контур холостого хода, как описано выше.
Клапан силовой
Для работы с открытым дросселем более богатая смесь будет производить больше мощности, предотвращать детонацию и поддерживать охлаждение двигателя. Обычно это решается с помощью подпружиненного «силового клапана», который закрывается вакуумом двигателя. Когда дроссельная заслонка открывается, разрежение в двигателе уменьшается, и пружина открывает клапан, позволяя большему количеству топлива попасть в главный контур.
Насос ускорительный
Точно так же большая инерция жидкого бензина по сравнению с воздухом означает, что если дроссельная заслонка внезапно открывается, воздушный поток будет увеличиваться быстрее, чем поток топлива, вызывая временное «обедненное» состояние, которое заставляет двигатель «спотыкаться» под ускорение (противоположное тому, что обычно предполагается при открытии дроссельной заслонки).Это устраняется использованием небольшого механического насоса (часто просто плунжера, который проталкивает вниз небольшую трубку, заполненную бензином, которая подается в горловину карбюратора), который впрыскивает дополнительное количество топлива при открытии дроссельной заслонки, чтобы покрыть эту бедную смесь. период обычно регулируется как для громкости, так и для продолжительности, иногда просто сгибая связь. Часто уплотнения вокруг движущихся поршневых частей насоса изнашиваются, так что производительность насоса снижается, эта потеря работы ускорительного насоса вызывает характерное спотыкание или увязание при ускорении, которое часто наблюдается в старых, изношенных двигателях, пока не будут заменены уплотнения на насосе. .Для этой цели широко доступны специализированные комплекты послепродажного обслуживания. Существуют и другие варианты насосов, такие как насосы на основе диафрагмы.
Дроссель
Когда двигатель холодный, топливо испаряется с меньшей готовностью и имеет тенденцию конденсироваться на стенках впускного коллектора, что приводит к нехватке топлива в цилиндрах и затрудняет запуск двигателя, поэтому для запуска требуется более богатая смесь (больше топлива к воздуху). и дайте двигателю поработать, пока он не прогреется.
Для подачи дополнительного топлива обычно используется дроссель — это устройство, ограничивающее поток воздуха на входе в карбюратор, перед трубкой Вентури.При наличии этого ограничения в цилиндре карбюратора создается дополнительный вакуум, который протягивает топливо через трубку Вентури, чтобы дополнить топливо, забираемое из контуров холостого хода и холостого хода. Это обеспечивает богатую смесь, необходимую для поддержания работы при низких температурах двигателя.
Кроме того, дроссельная заслонка соединена с «кулачком быстрого холостого хода» или другим подобным устройством, которое предотвращает полное закрытие дроссельной заслонки, что может привести к нехватке вакуума в Вентури и вызвать остановку двигателя. Это также помогает быстро прогреть двигатель за счет работы на холостом ходу на более высоких, чем обычно, оборотах.Кроме того, он увеличивает поток воздуха во впускной системе, что помогает лучше распылять холодное топливо и сглаживать холостой ход.
В старых карбюраторных автомобилях воздушная заслонка управлялась тросом, соединенным с ручкой на приборной панели (GB — facia), управляемой водителем. В большинстве карбюраторных автомобилей, выпускаемых с середины 1960-х годов (середина 1950-х годов в Соединенных Штатах), он обычно автоматически управляется термостатом, использующим биметаллическую пружину, которая подвергается воздействию тепла двигателя.Это тепло может передаваться на термостат воздушной заслонки посредством простой конвекции, через охлаждающую жидкость двигателя или через воздух, нагретый выхлопными газами. В более поздних конструкциях тепло двигателя используется только косвенно: датчик определяет тепло двигателя и подает электрический ток на небольшой нагревательный элемент, который воздействует на биметаллическую пружину, контролируя ее натяжение, тем самым управляя воздушной заслонкой. Разгрузочное устройство воздушной заслонки представляет собой рычажное устройство, которое заставляет воздушную заслонку открываться против его пружины, когда акселератор транспортного средства перемещается в конец его хода.Это положение позволяет очистить «залитый» двигатель, чтобы он запустился.
Некоторые карбюраторы не имеют дроссельной заслонки, но вместо этого используют контур обогащения смеси или обогатитель. Обычно используемые в небольших двигателях, особенно на мотоциклах, обогатители работают, открывая вторичный топливный контур под дроссельными клапанами. Этот контур работает точно так же, как и контур холостого хода, и когда он включен, он просто подает дополнительное топливо, когда дроссельная заслонка закрыта.
Классические британские мотоциклы с карбюраторами с боковой заслонкой и дроссельной заслонкой использовали другой тип «устройства холодного пуска», называемый «щекоткой».Это просто подпружиненный стержень, который при нажатии вручную толкает поплавок вниз и позволяет избытку топлива заполнить поплавок и затопить впускной тракт. Если «щеклер» удерживался слишком долго, он также заливал внешнюю часть карбюратора и картер под ним, что приводило к нескольким пожарам.
Основная идея этих устройств заключается в том, что дополнительное топливо (богатое состояние) необходимо для запуска и работы «холодного» двигателя в течение короткого периода времени. Либо воздух ограничен (дроссель), либо добавлено больше топлива (обогатитель и щеклер).
Прочие элементы
На взаимодействие между каждой цепью также могут влиять различные механические соединения или соединения, работающие под давлением воздуха, а также чувствительные к температуре и электрические компоненты. Они вводятся по таким причинам, как реакция, топливная экономичность или контроль автомобильных выбросов. Различные отводы воздуха (часто выбираемые из точно откалиброванного диапазона, аналогично форсункам) позволяют воздуху попадать в различные части топливных каналов для улучшения подачи и испарения топлива.В комбинацию карбюратор / коллектор могут быть включены дополнительные усовершенствования, такие как некоторая форма нагрева для облегчения испарения топлива.
Подача топлива и поплавковая камера
Чтобы обеспечить готовую подачу топлива, карбюратор имеет «поплавковую камеру» (или «чашу»), в которой находится готовое к использованию количество топлива под давлением, близким к атмосферному. Этот резервуар постоянно пополняется топливом, подаваемым топливным насосом. Правильный уровень топлива в бачке поддерживается с помощью поплавка, управляющего впускным клапаном, аналогично тому, как это используется в туалетных баках.Когда топливо израсходовано, поплавок опускается, открывая впускной клапан и впуская топливо. Когда уровень топлива повышается, поплавок поднимается и закрывает впускной клапан. Уровень топлива, поддерживаемого в поплавковой чаше, обычно можно отрегулировать с помощью установочного винта или чего-то грубого, например, сгибая рычаг, к которому подсоединен поплавок. Обычно это критически важная регулировка, и правильная регулировка обозначается линиями, начерченными в окошке на чаше поплавка, или измерением того, насколько далеко поплавок висит ниже верхней части карбюратора в разобранном виде, и т. Д.Поплавки могут быть изготовлены из различных материалов, например, из листовой латуни, впаянной в полую форму, или из пластиковых полых поплавков могут возникать небольшие утечки, а пластиковые поплавки могут в конечном итоге стать пористыми и потерять плавучесть, в любом случае поплавок не будет плавать, уровень топлива будет слишком высоко, и двигатель не будет нормально работать, если не будет заменен поплавок. Сам клапан изнашивается по бокам из-за его движения в «седле» и в конечном итоге пытается закрыть под углом и, таким образом, не может снова полностью перекрыть подачу топлива, это вызовет чрезмерный поток топлива и плохую работу двигателя.И наоборот, когда топливо испаряется из поплавкового резервуара, оно оставляет после себя осадок, остатки и лак, которые закупоривают каналы и могут мешать работе поплавка. Это особенно проблема в автомобилях, эксплуатируемых только часть года и оставленных стоять с полными поплавковыми камерами в течение нескольких месяцев, в то время как коммерческие добавки для стабилизации топлива доступны, чтобы уменьшить эту проблему.
Обычно специальные вентиляционные трубки позволяют воздуху выходить из камеры при заполнении или входить при опорожнении, поддерживая атмосферное давление внутри поплавковой камеры. Обычно они проходят в горловину карбюратора.Размещение этих вентиляционных трубок может иметь критическое значение для предотвращения вытекания топлива из них в карбюратор, и иногда они модифицируются более длинными трубками. Обратите внимание, что при этом топливо остается под атмосферным давлением, и поэтому оно не может попасть в горловину, которая находится под давлением нагнетателя, установленного выше по потоку. В таких случаях весь карбюратор должен находиться в герметичной герметичной коробке для работы. В этом нет необходимости в установках, где карбюратор установлен перед нагнетателем, который по этой причине используется чаще.Тем не менее, это приводит к тому, что нагнетатель заполняется сжатой топливно-воздушной смесью с сильной тенденцией к взрыву, если двигатель дает обратную вспышку, этот тип взрыва часто наблюдается в гонках сопротивления, которые по соображениям безопасности теперь включают в себя сбросные пластины для сброса давления. впускной коллектор, отрывные болты, крепящие нагнетатель к коллектору, и улавливающие осколки баллистические нейлоновые покрытия, окружающие нагнетатели.
Если двигатель должен работать в любом положении (например, цепная пила), поплавковая камера не может работать.Вместо этого используется диафрагменная камера. Гибкая диафрагма образует одну сторону топливной камеры и расположена так, что по мере того, как топливо втягивается в двигатель, диафрагма вынуждается внутрь под давлением окружающего воздуха. Диафрагма соединена с игольчатым клапаном, и по мере движения внутрь она открывает игольчатый клапан, чтобы впустить больше топлива, пополняя тем самым топливо по мере его потребления. Когда топливо пополняется, диафрагма выдвигается из-за давления топлива и небольшой пружины, закрывая игольчатый клапан. Достигается сбалансированное состояние, при котором создается постоянный уровень топлива в резервуаре, который остается постоянным при любой ориентации.
Стволы нескольких карбюраторов
В то время как карбюраторы с низкой производительностью могут иметь только один цилиндр, большинство карбюраторов имеют более одного цилиндра Вентури или «цилиндра», чаще всего два цилиндра, при этом 4 ствола являются обычными в более мощных двигателях с большим рабочим объемом, чтобы приспособиться к более высокому расходу воздуха с больший объем двигателя. Многоствольные карбюраторы могут иметь неидентичные первичный и вторичный цилиндры разных размеров и откалиброваны для подачи различных топливно-воздушных смесей. Они могут приводиться в действие рычажным механизмом или вакуумом двигателя «прогрессивно», так что вторичные цилиндры не начинайте открывать, пока праймериз не откроются почти полностью.Это желательная характеристика, которая максимизирует поток воздуха через первичный цилиндр (стволы) на большинстве скоростей двигателя, тем самым максимизируя «сигнал» давления от труб Вентури, но уменьшает ограничение воздушного потока на высоких скоростях за счет увеличения площади поперечного сечения для большего воздушного потока. Эти преимущества могут быть не важны в высокопроизводительных приложениях, где работа частичной дроссельной заслонки не имеет значения, а первичные и вторичные приводы могут открываться одновременно, также для простоты и надежности двигатели V-конфигурации с двумя рядами цилиндров, питаемыми от одного карбюратора, могут быть сконфигурирован с двумя одинаковыми цилиндрами, каждый из которых снабжает один ряд цилиндров.Точно так же в широко известной комбинации карбюратора V8 и 4-цилиндрового карбюратора часто используются два первичных и два вторичных цилиндра.
Аналогичным образом, несколько карбюраторов могут быть установлены на одном двигателе, часто с прогрессивными рычажными механизмами три двухцилиндровых карбюратора часто встречаются на высокоэффективных американских двигателях V8, а несколько четырехкамерных карбюраторов теперь часто встречаются на очень мощных двигателях.
Регулировка карбюратора
Слишком много топлива в топливно-воздушной смеси называется слишком «богатым», недостаточно топлива слишком «бедным».»Смесь» обычно регулируется регулируемыми винтами автомобильного карбюратора или пилотным рычагом на самолетах с поршневым двигателем (поскольку смесь зависит от плотности (высоты) воздуха). (Стехиометрическое) соотношение воздуха к бензину составляет 14,6: 1, что означает, что на каждую единицу веса бензина будет сожжено 14,6 единиц воздуха. Теоретически это самый эффективный по соотношению мощность / потребление. Но поскольку камеры сгорания, используемые в двигателях, не могут обеспечить полное сгорание бензина со стехиометрической смесью, смесь около 18: 1 даст лучшие результаты в отношении экономии топлива и загрязнения, а избыток воздуха обеспечивает более полное сгорание.Более богатая смесь около 11: 1 обеспечит большую мощность, поскольку избыток топлива будет охлаждать цилиндры и поршни, но цена, которую придется заплатить, — это повышенный расход и загрязнение окружающей среды.
Регулировку карбюратора можно проверить, измерив содержание окиси углерода, углеводорода и кислорода в выхлопных газах. О смеси также можно судить по состоянию и цвету свечей зажигания: черные, сухие, покрытые сажей свечи указывают на слишком богатую смесь, отложения от белого до светло-серого цвета на свечах указывают на бедную смесь.Правильный цвет должен быть коричневато-серым. См. Также чтение свечей зажигания. В начале 1980-х годов многие автомобили американского рынка использовали специальные карбюраторы с «обратной связью», которые могли изменять базовую смесь в ответ на сигналы датчика кислорода выхлопных газов. Они в основном использовались для экономии затрат (поскольку они работали достаточно хорошо, чтобы соответствовать требованиям по выбросам 1980-х годов и были основаны на существующих конструкциях карбюраторов), но в конечном итоге исчезли, поскольку падение цен на оборудование и более жесткие стандарты выбросов сделали впрыск топлива стандартным элементом.
Каталитические карбюраторы
Ходят упорные слухи, которые, по-видимому, доходят до городских легенд или даже до теории заговора об исключительно эффективных карбюраторах. Однако для этих слухов или утверждений могут быть какие-то основания. Каталитический карбюратор смешивает пары топлива с водой и воздухом в присутствии нагретых катализаторов, таких как никель или платина. Топливо разлагается на метан, спирты и другие легкие виды топлива. Был представлен оригинальный каталитический карбюратор, чтобы фермеры могли использовать тракторы на модифицированном и обогащенном керосине.Утверждается, что армия США использовала каталитические карбюраторы во время Второй мировой войны в пустынной кампании в Северной Африке, чтобы добиться существенной неожиданности в логистике и, следовательно, тактического и стратегического преимущества против немцев.
Однако известно, что менее чем через два года после коммерческого внедрения первого каталитического карбюратора, в 1932 году, тетраэтилсвинец был введен в качестве добавки для повышения устойчивости бензина к самовозгоранию, что позволило использовать более высокие степени сжатия.Тогда же прекратилась разница в цене на тепловую калорийность бензина и керосина. Тетраэтилсвинец отравлял каталитические карбюраторы. Многие современные бензины содержат добавки для «очистки», которые оказывают тот же эффект, образуя лаки или смолы в присутствии воды, что, конечно, не рекомендуется. Бензин / бензин — это нечистая смесь линейного гептана и октана, а также других легких алканов. Коммерческие бензины обычно содержат добавки для очистки двигателей, искусственно заниженные точки испарения и (предположительно) отравляющие каталитические карбюраторы (эффект, который, безусловно, реальный, но может быть случайным).
Знаменитый механик NASCAR Смоки Юник много лет работал над «паровым карбюратором» с высокой экономией топлива. Подробная информация об операции не получила широкого распространения, но общий принцип заключается в нагреве топлива отработанным теплом двигателя для усиления парообразования и улучшения характеристик сгорания топлива. Это было достаточно эффективно по сравнению с обычными карбюраторами того времени, но было сложно реализовать. За годы его разработки средний серийный двигатель перешел с центрально расположенных карбюраторов на электронный впрыск топлива, при котором топливо доставляется прямо во впускной канал.Это значительно снижает конденсацию топлива и образование луж во впускном коллекторе и направляющих, что делает конструкцию Smokey решением проблемы, которой больше не существовало, поэтому она никогда не была коммерчески разработана.
Обледенение и нагрев карбюратора
Обледенение карбюратора — это обледенение, которое может повлиять на любой карбюратор при определенных атмосферных условиях. Хотя это относится ко всем карбюраторам, на самом деле это проблема только в самолетах с поршневыми двигателями, особенно в небольших однодвигательных легких самолетах.Нагрев карбюратора (обычно сокращенно обозначаемый как «нагрев карбюратора») — это система, используемая в легких самолетах с поршневым двигателем для предотвращения или устранения обледенения карбюратора. Обычно он управляется вручную пилотом. Он состоит из заслонки, которая направляет теплый воздух вокруг выпускного коллектора в воздухозаборник двигателя. Более теплый воздух обычно очищает карбюратор от обледенения. Применение подогрева карбюратора в обычном порядке встроено в многочисленные проверки в полете и перед посадкой. Двигатели, оснащенные впрыском топлива, не требуют подогрева карбюратора или аналогичной системы, поскольку они не склонны к обледенению.Некоторые впускные коллекторы автомобилей имели это по тем же причинам, что и самолеты. Он был у многих Chevrolet из начала 50-х годов, но также и у ряда коллекторов для вторичного рынка от Clifford Performance.
Самолеты с карбюраторными двигателями оснащены системами обогрева карбюратора для решения проблемы обледенения. В автомобилях обледенение карбюратора иногда может быть неприятностью, но обычно не является большой проблемой, так как через впускной коллектор и детали карбюратора часто циркулирует теплая вода из системы водяного охлаждения.Мотоциклы также могут страдать от обледенения карбюратора, хотя некоторые конструкции двигателей более подвержены этому, чем другие. Двигатели с воздушным охлаждением могут быть более подвержены обледенению, хотя в основном это явление является серьезной проблемой для самолетов.
Обледенение карбюратора возникает, когда воздух влажный, а падение температуры в трубке Вентури вызывает замерзание водяного пара. Лед образуется на поверхностях горловины карбюратора, еще больше ограничивая его. Это может первоначально усилить эффект Вентури, но в конечном итоге ограничит поток воздуха, возможно, даже вызовет полную блокировку карбюратора.Обледенение также может вызвать заклинивание механических частей карбюратора, таких как дроссельная заслонка. Для получения информации о том, когда есть вероятность обледенения карбюратора, обратитесь к графику (составленному британским CAA), который можно скачать здесь: Таблица обледенения карбюратора.
Обледенение возникает в определенных условиях из-за трубки Вентури внутри карбюратора, которая увеличивает скорость воздуха в карбюраторе, что снижает его давление (см. Принцип Бернулли) и, следовательно, температуру (закон Бойля).Если наружный воздух уже имеет низкую температуру, температура в карбюраторе может упасть ниже точки замерзания воды, а если воздух влажный, внутри карбюратора может образоваться лед, сужая отверстие горловины, что может создать еще более сильный эффект Вентури и т. д. Если не контролировать, карбюратор со временем выйдет из строя, что приведет к отказу двигателя или возникновению аварийной ситуации. Внутри карбюратора часто наблюдаются перепады температуры на 20 градусов C и более, поэтому обледенение может возникнуть даже в относительно теплые дни.Кроме того, адиабатический градиент (падение температуры) составляет около 4 градусов Цельсия на тысячу футов, поэтому на самом деле влажность воздуха является более важным индикатором возможных условий обледенения.
Как это ни парадоксально, зимние полеты часто менее подвержены обледенению, поскольку холодная погода редко ассоциируется с высокой влажностью, а температура воздуха может опускаться настолько ниже точки замерзания, что в воздухе может быть мало или совсем нет водяного пара. Отвод теплого воздуха в воздухозаборник обычно удаляет имеющееся обледенение, хотя в некоторых условиях этого может быть недостаточно.Мудрый пилот не будет пытаться лететь в известных условиях обледенения, если его самолет не оборудован для борьбы с ним. Отвод теплого воздуха во впускной канал снижает термодинамический КПД двигателя, что проявляется в небольшом снижении мощности при подаче тепла карбюратора. Снижение мощности указывает пилоту на отсутствие обледенения, что является обнадеживающей информацией. Если есть обледенение, применение нагрева углеводов может не показать этого начального снижения, а по мере того, как лед очищается, мощность может увеличиваться.Опять же, пилот отметит это как доказательство наличия условий обледенения.
Если обледенение карбюратора приводит к остановке двигателя, первое, что сделает пилот, это нагреет карбюратор в попытке удалить обледенение, хотя, поскольку двигатель не будет работать, выхлоп может охладиться достаточно быстро. что очистить глазурь будет невозможно. В любом случае пилот будет выполнять процедуру аварийной посадки с возможным перезапуском двигателя. Исход зависит от условий, быстроты действий и умения.Опять же, избегать обледенения намного лучше, чем пытаться очистить его в чрезвычайной ситуации.
СУ карбюраторы
Произошла ошибка при работе с вики: Код [1]
SU (названные в честь Skinners Union, компании, которая их производила) были маркой карбюраторов с боковым тягом, широко использовавшейся в британских (Austin, Morris, Triumph, MG) и шведских (Volvo, Saab 99) автомобилях на протяжении большей части двадцатого века. Первоначально разработанные и запатентованные Джорджем Гербертом Скиннером в 1905 году, они производились до 1980-х годов, когда они стали частью BMC / British Leyland Group.Hitachi также построила карбюраторы на основе конструкции SU, которые использовались на Datsun 240Z и других автомобилях Datsun. Хотя они выглядят одинаково, они достаточно разные, поэтому иглы (см. Ниже) — единственная деталь, которая подходит для обоих.
{|
! Http://www.mgbexperience.com/article/images/su-hs4-section.gif
| —
| Тюнинг карбюратора SU HS4 (Изображение из библиотеки: Тюнинг карбюратора SU HS4)
|}
КарбюраторыSU имели регулируемую Вентури, управляемую поршнем.Этот поршень имеет конический дозирующий стержень (обычно называемый «иглой»), который входит в отверстие («жиклер»), через которое топливо попадает в воздушный поток, проходящий через карбюратор. Поскольку игла имеет конусообразную форму, при подъеме и опускании она открывает и закрывает отверстие в жиклере, регулируя прохождение топлива, поэтому движение поршня контролирует количество подаваемого топлива в зависимости от потребности двигателя.
Поток воздуха через трубку Вентури создает пониженное статическое давление в трубке Вентури.Это падение давления передается на верхнюю сторону поршня через воздушный канал. Нижняя сторона поршня сообщается с атмосферным давлением. Разница в давлении между двумя сторонами поршня создает силу, стремящуюся поднять поршень. Этой силе противодействуют сила веса поршня и сила пружины сжатия, которая сжимается при подъеме поршня, потому что пружина работает в очень небольшой части своего возможного диапазона растяжения, сила пружины приближается к постоянной сила.В установившемся режиме силы, направленные вверх и вниз на поршень, равны и противоположны, и поршень не перемещается.
Если поток воздуха в двигатель увеличивается — за счет открытия дроссельной заслонки или за счет повышения оборотов двигателя при постоянной настройке дроссельной заслонки — падение давления в трубке Вентури увеличивается, давление над поршнем падает, и поршень всасывается вверх, увеличивая размер трубки Вентури, пока падение давления в трубке Вентури не вернется к своему номинальному уровню.Точно так же, если поток воздуха в двигатель уменьшится, поршень упадет. В результате падение давления в трубке Вентури остается неизменным независимо от скорости воздушного потока — отсюда и название карбюраторов, работающих по этому принципу, «постоянное разрежение» — но поршень поднимается и опускается в зависимости от скорости воздушного потока.
Поскольку положение поршня определяет положение иглы в жиклере и, следовательно, открытую зону жиклера, в то время как разрежение в трубке Вентури, всасывающей топливо из жиклера, остается постоянным, скорость подачи топлива всегда является определенной функцией. скорости доставки воздуха.Точный характер функции определяется профилем иглы. При соответствующем выборе иглы подача топлива может быть в большей степени согласована с требованиями двигателя, чем это возможно с более распространенным карбюратором Вентури с фиксированным диаметром, изначально неточным устройством, конструкция которого должна включать в себя множество сложных выдумок для получения полезной точности заправка. Хорошо контролируемые условия, в которых работает жиклер, также позволяют добиться хорошего и стабильного распыления топлива во всех рабочих условиях.
Такая саморегулирующаяся природа делает выбор максимального диаметра Вентури (в просторечии, но неточно, называемого «размером штуцера») гораздо менее важным, чем для карбюратора Вентури с фиксированным диаметром. Двухдюймовый карбюратор SU — полезное устройство, которое можно иметь в мастерской при экспериментах с двигателями, поскольку его можно прикрепить болтами практически к любому двигателю, и двигатель, если он находится в хорошем состоянии, оживает без необходимости сложные регулировки карбюратора для его запуска.
Для предотвращения неустойчивых и резких движений поршня он демпфируется легким маслом в демпфере, который требует периодической дозаправки. Демпфирование асимметрично, оно сильно сопротивляется движению поршня вверх. Он служит эквивалентом «ускорительного насоса» на традиционных карбюраторах, временно увеличивая скорость воздуха через трубку Вентури, тем самым увеличивая насыщенность смеси.
Красота S.U. заключается в ее простоте и отсутствии множественных жиклеров и легкости регулировки.Регулировка осуществляется изменением начального положения жиклера относительно иглы на винте с мелкой головкой. На первый взгляд, принцип кажется похожим на тот, который используется на многих мотоциклах, где положение основной иглы поднимается и опускается за счет прямого соединения с тросом дроссельной заслонки, а не косвенно за счет разрежения в трубке Вентури. Однако это очевидное сходство вводит в заблуждение. Поршень в карбюраторе мотоциклетного типа управляется требованиями водителя, а не требованиями двигателя, поэтому дозирование топлива будет неточным, если только мотоцикл не движется с постоянной скоростью при постоянной настройке дроссельной заслонки — условиях, которые являются встречается редко, кроме как на трассах.Эта неточность приводит к бесполезной трате топлива, особенно потому, что карбюратор должен быть настроен на слегка обогащенную смесь, чтобы избежать повреждения обедненной смеси в переходных условиях. По этой причине японские производители мотоциклов перестали устанавливать карбюраторы скольжения и заменили карбюраторы с постоянным понижением давления, которые, по сути, являются миниатюрным японским SU. Также возможно — действительно, легко — переоборудовать карбюраторы SU на байк, который изначально был изготовлен со скользящим карбюратором, и таким образом получить улучшенную экономию топлива и более послушное поведение на низких скоростях.
Карбюраторы Weber
Произошла ошибка при работе с вики: Код [2]
{|
! Http://www.racepages.com/images/brand/weber_carburetor-big.jpg
| —
| Карбюраторы Weber (Изображение с http://www.racepages.com)
|}
КарбюраторыWeber были первоначально произведены в Италии Эдоардо Вебером как часть комплекта для переоборудования Fiats 1920-х годов. Вебер впервые применил карбюраторы с двумя цилиндрами с двумя цилиндрами (или трубками Вентури) разных размеров: меньший для работы на низкой скорости, а больший оптимизированный для работы на высоких скоростях.В 1930-х годах Weber начал производить карбюраторы с двумя цилиндрами для автоспорта, в которых использовались два цилиндра одинакового размера. Они были расположены так, что каждый цилиндр двигателя имел собственный цилиндр карбюратора. Эти карбюраторы нашли применение в гоночных автомобилях Maserati и Alfa Romeo. Со временем карбюраторы Weber стали устанавливать на стандартные серийные автомобили и заводские гоночные машины таких марок, как Abarth, Alfa Romeo, Aston Martin, BMW, Ferrari, Fiat, Ford, Lamborghini, Lancia, Lotus, Maserati, Porsche и Triumph.В наше время впрыск топлива заменил карбюраторы как в серийных автомобилях, так и в автоспорте. Компоненты топливной системы Weber распространяются отделом послепродажного обслуживания Magneti-Marelli.
Карбюратор Zenith
Произошла ошибка при работе с вики: Код [3]
Zenith Carburetters — британская компания, производящая карбюраторы. В 1955 году они присоединились к их основному довоенному конкуренту Solex Carburetters, и со временем торговая марка Zenith вышла из употребления.Права на дизайн Zenith принадлежали Solex UK (дочерняя компания Solex во Франции). Крупнейшими продуктами Zenith были Zenith-Stromberg (используемые в MG, ранних Saab 99, Saab 90, ранних Saab 900, некоторых Volvo 140 1960-х и Triumph 1960-х, например Triumph Spitfire) и карбюраторах Zenith IV. Карбюратор Stromberg оснащен регулируемой трубкой Вентури, управляемой поршнем. Этот поршень имеет длинный конический дозирующий стержень (обычно называемый «иглой»), который помещается в отверстие («жиклер»), через которое топливо попадает в воздушный поток, проходящий через карбюратор.Поскольку игла имеет конусообразную форму, при подъеме и опускании она открывает и закрывает отверстие в жиклере, регулируя прохождение топлива, поэтому движение поршня контролирует количество подаваемого топлива в зависимости от потребности двигателя.
{|
! Http://www.356registry.org/Tech/images/zeniths/zenith42.jpg
| —
| Zenith Carburetter Co. Ltd (Изображение с http://www.356registry.org/Tech)
|}
Поток воздуха через трубку Вентури создает пониженное статическое давление в трубке Вентури.Это падение давления передается на верхнюю сторону поршня через воздушный канал. Нижняя сторона поршня сообщается с атмосферным давлением. Разница в давлении между двумя сторонами поршня создает силу, стремящуюся поднять поршень. Этой силе противодействует сила веса поршня и сила сжатия пружины, которая сжимается при подъеме поршня, потому что пружина работает в очень небольшой части своего возможного диапазона растяжения, сила пружины приближается к постоянной сила.В установившемся режиме силы, направленные вверх и вниз на поршень, равны и противоположны, и поршень не перемещается.
Если поток воздуха в двигатель увеличивается — за счет открытия дроссельной заслонки или за счет увеличения оборотов двигателя при постоянной настройке дроссельной заслонки — падение давления в трубке Вентури увеличивается, давление над поршнем падает, и поршень всасывается вверх, увеличивая размер трубки Вентури, пока падение давления в трубке Вентури не вернется к своему номинальному уровню.Точно так же, если поток воздуха в двигатель уменьшится, поршень упадет. В результате падение давления в трубке Вентури остается неизменным независимо от скорости воздушного потока — отсюда и название карбюраторов, работающих по этому принципу, «постоянное разрежение» — но поршень поднимается и опускается в зависимости от скорости воздушного потока.
Поскольку положение поршня контролирует положение иглы в жиклере и, следовательно, открытую зону жиклера, в то время как разрежение в трубке Вентури, всасывающей топливо из жиклера, остается постоянным, скорость подачи топлива всегда является определенной. функция скорости подачи воздуха.Точный характер функции определяется коническим профилем иглы. При соответствующем выборе иглы подача топлива может быть в большей степени согласована с требованиями двигателя, чем это возможно с более распространенным карбюратором Вентури с фиксированным диаметром, изначально неточным устройством, конструкция которого должна включать в себя множество сложных выдумок для получения полезной точности заправка. Хорошо контролируемые условия, в которых работает жиклер, также позволяют добиться хорошего и стабильного распыления топлива во всех рабочих условиях.
Такая саморегулирующаяся природа делает выбор максимального диаметра Вентури (в просторечии, но неточно, называемого «размером штуцера») гораздо менее важным, чем для карбюратора Вентури с фиксированным диаметром. Во избежание беспорядочных и резких движений поршня он демпфируется легким маслом в демпфере (на рисунке под белой пластиковой крышкой), который требует периодической дозаправки.
Ссылки и дополнительная литература
Произошла ошибка при работе с вики: Код [4]
Произошла ошибка при работе с вики: Код [5]
Произошла ошибка при работе с вики: Код [6]
Произошла ошибка при работе с вики: Код [7]
Общий
Руководство по ремонту владельцев карбюраторов Weber, Haynes Publishing, ISBN 0856963933
Карбюраторы Weber, Пэт Брейден, ISBN 0895863774
Карбюраторный цех, основан 1974
Heldstab, Уэйн, «Секрет сверхмощных кабураторов: как они работают, как их строить».
Карбюратор для рыбы: http://www.fireballroberts.com/Fish_Patents.htm
http://byronw.www1host.com/
Двухтопливный агрегат в 1975 году Chevy Suburban работает на бензине и спирте:
http://www.mikebrownsolutions.com/dual1.htm
http://www.mikebrownsolutions.com/dual2.htm
http://www.mikebrownsolutions.com/dual3.htm
http://www.mikebrownsolutions.com/dual4.htm
http: //www.mikebrownsolutions.com / dual5.htm
Миф о карбюраторе на 100 миль на галлон, глава III Книги о карбюраторах для рыб.
Источники
Burlen Fuel Systems — производитель оригинальных карбюраторов SU
Руководство по эксплуатации карбюратора— Руководство по эксплуатации старого автомобиля, проект
Howstuffworks, «Как работает карбюратор? Задача карбюратора — смешать необходимое количество бензина с воздухом, чтобы двигатель работал.
Произошла ошибка при работе с wiki: Code [1]
, Wikipedia: The Free Encyclopedia.Фонд Викимедиа.
Motorcycle Carburetor Theory 101, MOTOCROSS.COM, 10-7-00.
Карбюраторы Weber, Weber North America.
Патенты
G.B. ? atent 11119 — Смесительная камера — Donát Bánki
Произошла ошибка при работе с вики: Код [8]
— Карбюратор — Произошла ошибка при работе с вики: Код [15]
Произошла ошибка при работе с вики: Код [9]
— Карбюратор — Произошла ошибка при работе с вики: Код [16]
Произошла ошибка при работе с вики: Код [10]
— Карбюратор — Чарльз Нельсон Пог
Произошла ошибка при работе с вики: Код [11]
— Карбюратор — Чарльз Нельсон Пог
Произошла ошибка при работе с вики: Код [12]
— Карбюратор — Чарльз Нельсон Пог
Произошла ошибка при работе с wiki: Код [13]
— Система парового топлива — Роберт С.Шелтон
При работе с wiki произошла ошибка: Код [14]
— Система экономии топлива для двигателя внутреннего сгорания — Thomas H. W. W. Ogle
См. Также
Справочник: эффективность использования топлива
Разработка суперкарбюратора с открытым исходным кодом
— PowerPedia
— Главная страница
Схема пирамиды— Простая английская Википедия, бесплатная энциклопедия
Этот рисунок показывает, насколько невозможно поддерживать схемы пирамид.Пирамида — это способ заработка, который не может продолжаться очень долго. Она предполагает обещание людям оплаты, услуг или идеалов, в первую очередь для привлечения других людей в схему или обучения их участию. Он не предлагает никаких реальных инвестиций или продажи продуктов или услуг населению. Пирамиды — это форма мошенничества. По этой причине финансовые пирамиды запрещены во многих странах.
Схема такого типа существует не менее века (100 лет).Способ описания схемы иногда меняется, чтобы скрыть то, что она делает. Многие считают, что многоуровневый маркетинг (MLM) — это тоже пирамида.
Успешная финансовая пирамида объединяет бизнес, который кажется реальным, с простым для понимания описанием зарабатывания денег, которое используется для получения прибыли. Идея состоит в том, что первый человек, мистер Х, производит платеж. Чтобы получить деньги, мистер X должен нанять других, подобных ему, которые также будут платить. Мистеру X платят из денег, полученных от этих новых людей (новобранцев).Новобранцы продолжают привлекать других. Поскольку каждый новый рекрут делает оплату, мистер X получает свою долю. Ему обещают постоянно увеличивать выгоды по мере расширения «бизнеса». У таких «предприятий» нет реальных продуктов или услуг. Чтобы сделать их более правдоподобными, у большинства таких мошенников есть поддельные письма от успешных участников и информация. Только первый человек (иногда называемый «фараоном») и очень немногие на верхних уровнях пирамиды зарабатывают много денег. Дальше по пирамиде суммы становятся намного меньше.Кто-то внизу пирамиды теряет деньги. Они заплатили за вход, но никого не могут пригласить.
Привлечение большого количества других в схему может быть трудным, поэтому используется система, которая кажется более простой. В этой модели каждый человек должен нанять только двух других. Однако требуется большее количество уровней, прежде чем человеку заплатят деньги. Схема требует, чтобы один человек нанял еще двоих, каждый из которых должен нанять еще двоих, каждый из которых должен нанять еще двоих. Модель «восемь мячей» состоит всего из пятнадцати членов.Эта схема получила название «Самолетная игра», и четыре уровня, обозначенные как «капитан», «второй пилот», «экипаж» и «пассажир», обозначают уровень человека. Такие схемы могут скрывать свою пирамидальную природу, называя себя «кружками дарения» с «подаренными деньгами». Каждый из восьми пассажиров должен заплатить (или «подарить») определенную сумму (например, 1000 долларов США), чтобы присоединиться к схеме. Эта сумма в 8000 долларов достается капитану, покинувшему схему. Все оставшиеся поднимаются на один уровень. Теперь у нас два новых капитана, поэтому группа делится на две части, и каждой группе требуется восемь новых пассажиров.Человек, который присоединяется к схеме в качестве пассажира, не получит никаких денег, пока не продвинется через уровни экипажа и второго пилота до капитана. Следовательно, участники трех нижних ярусов пирамиды теряют свои деньги, если схема рушится. Так поступают популярные схемы, такие как «Женщины, расширяющие права и возможности женщин».
Введение в схему и ее реализацию
Введение в схему и ее реализацию — Компиляция схемы Перейти к первому, предыдущему, следующему, последнему разделу оглавления.[Пример компилятора в compiler.scm — это скелет простого компилятор для подмножества Scheme, структура которого достаточно соответствует близко к примеру интерпретатора в eval.scm. ]
[это неуместно или сначала требуется более вводное введение:]
Если у интерпретатора есть базовая процедура отправки, называемая eval
, которая
может оценивать любые выражения, у компилятора есть базовая отправка
Подпрограмма compile
может компилировать любые выражения.Подобно eval
, compile
проверяет выражение, которое нужно скомпилировать,
и отправляет подпрограмму, соответствующую этому виду выражения.
Подпрограмма, которая компилирует выражение, может рекурсивно вызывать compile для
компилировать подвыражения, так же как интерпретирующий вычислитель может вызвать eval
рекурсивно для оценки подвыражений.
[Это в некоторой степени дублирует более ранние материалы, но более конкретно. Срубить?]
Прежде чем ответить, что такое компилятор, давайте вернемся назад и поговорим о переводчики.
Что такое переводчик?
На самом деле интерпретатор делает две вещи:
- он проверяет выражения и отправляет в соответствующие код для такого выражения
- он выполняет фактические операции, указанные программой
Как правило, большая часть работы переводчика выполняется в первую очередь. категория — наш примерный интерпретатор, например, тратит много время изучить выражения, чтобы увидеть, оценивают ли они себя сами или символы или списки и отправка в соответствующую процедуру чтобы оценить такое выражение.Эта отправка чередуется с фактической работой, которая оценивает выражения.
Одна из проблем переводчика заключается в том, что каждый раз
выражение встречается, оно снова анализируется. Рассмотрим
выражение типа (+ foo bar)
встроено в цикл, который повторяет
много раз. Наш интерпретатор встретит это выражение на каждом
итерация цикла, и на каждой итерации цикла она будет
делать в основном то же самое: он проверяет выражение и находит
из этого списка, затем вызовите eval-list
, который дополнительно изучит
чтобы узнать, что это комбинация (не специальная форма или макрос),
и позвоните по номеру eval-combo
.Тогда eval-combo
вызовет eval
рекурсивно
для оценки подвыражений, и каждый вызов eval
будет проверять
подвыражения и отправка в соответствующие специализированные
процедура оценки. Только тогда мы начинаем фактически вычислять
значение выражения, вычисляя значения
подвыражения +
, foo
и bar
, т.е. поиск
вверх значения этих переменных.
Хорошо, а что за компилятор?
Мы бы предпочли исключить большую часть этой избыточной работы и изучить
выражение только один раз, чтобы увидеть, что делать.Тогда каждый раз, когда мы
«оценивать» выражения, мы можем просто делать эти вещи. За
выражение (+ foo bar)
, набор действий интерпретатор
выполнит (без учета всего анализа и отправки
является):
искать панель переменных найти переменную foo искать переменную + применять
(Здесь мы предположили, что оцениваем подвыражения комбинации справа налево, а не более интуитивно понятным слева направо заказ; это законный способ сделать это в схеме, и оказывается удобно в очень простом компиляторе, как мы объясним через минуту.)
[возможно, мне стоит изменить это так, чтобы аргументы выполнялись слева направо, но оператор последний, как RScheme. ]
Для такого кода, в котором нет никаких условий,
мы можем очень легко преобразовать интерпретатор в компилятор. Мы
просто измените интерпретатор так, чтобы вместо фактического вычисления
выражения, он просто записывает, какие операции будет выполнять если бы он интерпретировал выражение. Я намеренно
неясно, как именно эти простые операции (например, look-up-
variable
) работают, но вы должны увидеть, что
каждый из них должен быть переведен на несколько машин
инструкции.Так работает большинство компиляторов: они сначала переводят
программа в промежуточный код представление , как наш
операции поиска переменных, а затем перевести это представление
в машинные инструкции. (Между ними может быть один или несколько шагов
которые «оптимизируют» промежуточный код, и каждый шаг может
представить код по-другому.)
Итак, этот простой компилятор просто «притворяется», что оценивает выражение, но всякий раз, когда он доходит до фактического действия (например, поиска переменной или вызов процедуры), он просто записывает, какие действия он предпримет, если это был просто переводчик.Результатом является список действий, которые, если принять, будет иметь тот же эффект, что и интерпретация выражения.
Вот еще пример:
(пусть ((x 22) (Y 15)) (+ х (* х у)))
Предположим, что наше промежуточное представление кода представляет собой последовательность списки, представляющие операции и их операнды, код, который наши простой компилятор сгенерирует:
(буква-буква 22) (буква-буква 15) (привязать x y) (поисковая переменная y) (поисковая переменная x) (поисковая переменная *) (вызов-процедура) (поисковая переменная x) (вызов-процедура) (отвязать)
Позже мы поговорим более подробно о том, где значения временно сохраняются, когда они просматриваются, и различные настройки чтобы сделать возможным перевод промежуточного кода в меньшие и более быстрые последовательности машинных инструкций.А пока просто обратите внимание что мы можем связать вместе последовательности этого промежуточного кода операций, и если мы просто переведем каждую из них на какую-то машину инструкций, мы можем связать эти последовательности машинных инструкций вместе и получим более крупную последовательность, которую мы можем выполнить для оценки все выражение. Мы можем выполнять его столько раз, сколько захотим, и все анализа и отправки выражения уже были done — единственная работа, выполняемая каждый раз, это работа, фактически связывает переменные, ищет значения, вызывает процедуры и скоро.
Не намного сложнее скомпилировать условные выражения вроде , если
.
Когда мы компилируем if
, нам нужно сгенерировать код для условия
выражение, последовательное выражение и альтернативное выражение.
(«Консеквент» — это код, выполняемый, если условие истинно,
а «альтернативой» является код, выполняемый, если он ложный.) Затем мы
необходимо соответствующим образом связать код для этих выражений
с некоторыми условными ветвями:
<код для условия> (ветвь-если-ложь "метка-действия") <код для консеквента> (ветвь безоговорочно "конечная метка") "еще-действие-ярлык" <код альтернативы> "конец ярлыка"
Этикетки здесь будут фактически переведены на адреса
код, который они помечают, и ветви будут заполнены этими
адреса.(Мы должны быть осторожны, чтобы использовать уникальную пару новых
метки для каждого , если
мы компилируем, или другой подобный трюк,
так что мы можем вложить , если
выражений и сохранить их метки прямо.)
(Один из способов генерации машинного кода из этого представления — перевести каждое из операторов в короткую последовательность сборки инструкции и каждую этикетку в сборочную этикетку, нанизывая их вместе, как показано. Затем ассемблерный код можно собрать в Машинный код.)
Обратите внимание, что для , если
, структура управления компилятора
на самом деле проще, чем управляющая структура интерпретатора. В
интерпретатор оценит выражение условия, а затем решит
во время выполнения следует ли оценивать консеквентное («затем») выражение
или альтернативное («else») выражение. Компилятор всегда будет
скомпилировать все три подвыражения и объединить их
условные ветви, которые будут принимать решение во время выполнения, на основе
на значение времени выполнения, вычисленное кодом для выражения условия.
Вот немного более сложный пример:
(пусть ((x 15)) (если x (пусть ((y (* 2 x))) (+ х у)) #t))
переводится в промежуточный код примерно так:
(буква-буква 15) (привязать x) (поисковая переменная x) (ветвь-если-ложь "else22") (поисковая переменная x) (выборка-литерал 2) (поисковая переменная *) (вызов-процедура) (привязать y); создать и ввести envt, который связывает y (поисковая переменная y) (поисковая переменная x) (поисковая переменная +) (вызов-процедура) (отвязать); exit envt, который связывает y (ветка "end22") "else22" (выборка-литерал #t) "end22"
На самом деле есть пара мелких ошибок в коде, который мы генерируется, но это довольно близко к работоспособному промежуточному представление.
[Поговорим о машинном коде, интерпретирующих виртуальных машинах и т. Д.]
Основная функция компилятора - компиляция
, которая генерирует
промежуточный код для выражения, который может вызывать само себя
рекурсивно для генерации кода для подвыражений.
Звонки на номер , компиляция
передают ему выражение и некоторую бухгалтерию
информацию мы обсудим позже. Компиляция возвращает промежуточный результат
код, а также обновленные версии некоторой бухгалтерской информации.
Чтобы начать этот процесс, формы верхнего уровня (например, те, что вы вводите
в цикл read-
compile-
run-
print
loop, или
определения процедур верхнего уровня) немного массируются, затем
для них генерируется промежуточный код. Тогда промежуточный
код преобразуется в реальный исполняемый код и упаковывается как
закрытие, которое можно назвать.
Мы обсудим эти вопросы массирования форм верхнего уровня и создание исполняемых закрытий позже; а пока главное понять — это рекурсивная генерация промежуточного кода для вложенных выражений.
Вот основная процедура отправки компилятора, которая аналогична
интерпретатору eval
:
(определить (скомпилировать выражение c-t-envt literal-state c-t-cont) (условное ((символ? выражение) (compile-symbol expr c-t-envt литеральное-состояние c-t-cont)) ((пара? выражение) (compile-list expr c-t-envt литеральное-состояние c-t-cont)) ((самооценка? expr) (compile-self-eval expr c-t-envt literal-state c-t-cont)) (#t (синтаксическая ошибка "Неверная форма выражения" expr))))
Пока проигнорируйте большинство аргументов и скомпилируйте
, мы объясним
их позже.Главное отметить, что это очень похоже на оценка
.
[ бла бла бла…]
[Где-то важно выявить разницу между взаимная рекурсия eval и apply в интерпретаторе и как работает компилятор. Eval повторяется локально, но просто генерирует код для применения … Управляющая структура компилятора на самом деле проще, чем для переводчика, потому что вся эта непростая вещь во время выполнения …]
Прежде чем пытаться разобраться в самом компиляторе более подробно, вероятно, лучше иметь конкретное представление о том, что данных, как работают вызовы процедур и как используются регистры.То есть вы должны понять «абстрактную машину», которую компилятор компилируется для.
Абстрактная машина — это абстракция низкоуровневых операций и объектов. Компилятор сначала компилирует код с исходного языка в этот представление нижнего уровня, а затем переводит «абстрактную машину» язык »в реальный исполняемый код. (Исполняемый код может быть машинный код, который работает непосредственно на оборудовании, или интерпретирующий исполняемый код, такой как байт-коды, которые интерпретируются быстрым переводчик.)
Вы можете думать об абстрактной машине как о ассемблере, а не о интерпретатор, но, может быть, немного умнее большинства ассемблеров.
Я опишу один конкретный набор функций, чтобы сделать вещи конкретными; это не совсем так, как работает RScheme, или Scheme-48, или какой-либо конкретный другая система, о которой я знаю, но в ней нет ничего необычного кроме, может быть, простоты.
Разрабатывая наш пример компилятора, предположим, что наша система работает сюда:
- У нас есть несколько важных регистров, которые используются стереотипно, е.g., чтобы удерживать указатель на текущую среду привязки.
- У нас есть оценочный стек, который используется для хранения промежуточных значения при оценке вложенных выражений.
- Мы используем цепочку продолжения для представления сохраненного состояния вызывающие абоненты, их абоненты и т. д., чтобы их можно было возобновить после процедуры возвращается.
Регистры абстрактной машины могут представлять собой аппаратные регистры, или просто места хранения, которые используются таким стереотипным образом.(Например, при компиляции в C регистры могут быть глобальными. переменные, и компилятор C может позволить, а может и не позволить вам указать что переменные должны быть помещены в аппаратные регистры.)
Регистры
Предположим, что есть несколько важных регистров, которые может использоваться кодом, который генерирует наш компилятор:
- Регистр
VALUE
, где выражение оставляет значение так что его можно использовать в закрывающем выражении.В В случае процедуры, здесь значение остается для вызывающего, когда процедура вернется. Значение Регистр также используется при вызове процедуры. - Регистр
ENVT
, который содержит указатель на среда, в которой в настоящее время выполняется код. - Регистр
CONT
, который содержит указатель на цепочку сохраненные продолжения звонков. - Регистр
TEMPLATE
, который содержит указатель на специальный структура данных, связанная с процедурой, которая в настоящее время выполняется, и - Регистр
PC
(счетчик программ), в котором указано, какой инструкция, которую мы сейчас выполняем.(Если мы компилируем для обычного машинного кода это специальный регистр, встроенный в CPU для этой цели, и мы используем его почти как любой другой код будет. Если мы компилируем интерпретирующий исполняемый код, вероятно, это переменная в интерпретаторе.)
Оценочный стек (или, для краткости, оценочный стек)
Стек eval используется для хранения значений, которые были вычислены. путем оценки подвыражений, но еще не использованных и не связанных.
При оценке выражения (+ foo 22)
три значения будут
быть вычисленным.Когда каждое значение вычислено, оно будет оставлено в
регистр ЗНАЧЕНИЕ
. Оцениваем справа налево, а после
оценивая каждый аргумент, мы выполняем операцию PUSH
над
стек eval, который копирует значение из регистра значений в
стек eval. Когда мы дойдем до первого подвыражения (
тот, который должен возвращать функцию для вызова), мы оставляем
значение в регистре значений, потому что там мы помещаем
указатель закрытия для вызова процедуры.
Стек eval используется для двух основных целей:
- хранение промежуточных значений для вложенных выражений и
- передача аргументов процедурам.
Стек eval — , а не , используемый для хранения промежуточных значений. или локальные переменные для приостановленных процедур — это не похоже на активацию stack в обычной реализации C или Pascal. Значения в стек eval при любом заданном time — это только промежуточные значения, сохраненные для в настоящее время выполнение процедуры . Промежуточные значения для приостановленных процедур: сохраняются в цепочке продолжения по мере необходимости.
Когда мы вызываем процедуру, единственными значениями в стеке eval являются аргументы процедуры.Любые другие значения, используемые вызывающим абонентом. перед вызовом перемещаются из стека eval в продолжение.
Продолжение цепочки
Цепочка продолжения — это структура данных, которая примерно заполняет роль активационного стека в реализации обычного язык программирования. Цепочка продолжения — это связанный список частичных продолжений , каждое из которых является записью, хранящей сохраненное состояние процедуры.
Когда процедура выполняет вызов процедуры, не являющейся хвостовой, она упаковывает его важная информация о состоянии до частичного продолжения; этот запись сохраняет значения среды, шаблона, ПК и продолжения регистры и любые временные значения в стеке eval.
Как только вызывающий абонент сохранил свое состояние в частичном продолжении, тогда вызываемый может делать все, что захочет, с важными регистрами и оценочный стек. (Это называется вызывающий сохраняет использование регистра соглашения, потому что вызывающая процедура обязана сохранять любые значения, которые потребуются при возобновлении.)
Помните, что продолжения размещаются в сборщике мусора. куча и неизменяемы — мы никогда не изменяем продолжение, если оно создан.Когда мы возобновляем сохраненное частичное продолжение, мы копируем значения из продолжения partail в регистры и стек eval, но это не меняет самого частичного продолжения — оно все равно сидит там в куче. Это важно для возможности реализовать call-with-current-continue: это то, что позволяет нам возобновлять одно и то же продолжение любое количество раз.
Окружающая среда
Компилятор предполагает, что среда привязки представляет собой цепочку кадров , каждый из которых представляет собой вектор слотов, которые являются переменными привязки.Каждый фрейм также имеет статическую ссылку или ссылку области видимости поле, которое указывает на фрейм, представляющий следующий лексически включающий Окружающая среда.
Среды верхнего уровня представлены особым образом в виде хеш-таблиц. которые сопоставляют имена привязкам. Мы будем использовать хеш-таблицу вместо списки ассоциаций, которые мы использовали в нашем простом интерпретаторе, потому что они быстрее, если у вас много привязок. Связывающий объект для среда верхнего уровня почти такая же, как в интерпретаторе: маленький вектор с двумя важными слотами: слот для его имени и другой слот, который является полем фактического значения.
Местная среда представлена совсем иначе, чем на верхнем уровне. среды: каждый кадр — это вектор слотов, и не сохраните имена привязок. Оказывается, имена только необходимы во время компиляции, поэтому на самом деле их не нужно хранить в среда выполнения. (Компилятор также может выполнять большую часть работы по поиску переменной верхнего уровня при компиляции время, поэтому скорость наших хэш-таблиц не будет критичной для наша скорость выполнения.)
Заявление о закрытии и звонок
Замыкания в нашей системе представлены в виде объектов с двумя полями: указатель на среду, захваченную замыканием, и указатель к объекту, который называется шаблоном , который, в свою очередь, содержит указатель на код процедуры.
Когда мы оцениваем следующее выражение
(пусть ((foo 22) (такт 15)) (лямбда (...) ...))
мы создадим фрейм среды для привязки foo и
bar и инициализируйте их как 22
и 15
соответственно.Этот фрейм среды будет иметь ссылку области действия, указывающую на среду
мы выполняли, когда мы вошли в let
. Внутри этой среды
мы создадим закрытие. Замыкание будет содержать указатель на
новое окружение и указатель на объект шаблона, представляющий
анонимная процедура закрывается. В шаблоне будет указатель на
фактический исполняемый код. Все эти вещи будут размещены в куче
объекты, и в нашей реализации мы дадим каждому поле заголовка
показывая, что это за объект:
<в envt.| + ---------- + | | envt. фр. | | , ------> + ========== + | / область | + ---- + ---- + + ---------- + / + ---------- + | закрытие | / foo | 22 | + ========== + / + ---------- + envt | + ---- + - 'полоса | 15 | + ---------- + + ---------- + proc | + ---- + -.+ ---------- + \ + ---------- + \ | шаблон | + ---------- + `---> + ========== + | код | код | + ---- + -----> + ========== + + ---------- + | исполняемый файл | | | + код для + + ---------- + | процедура | | | + + + ---------- + | ... | | ... | + ---------- + + ---------- +
Объект шаблона содержит не только указатель на фактический код, но любые другие удобные значения, которые компилятор может вычислить или найти время компиляции, и которое должно быть доступно для процедуры при запуске время. Мы обсудим это позже.
Когда мы хотим применить процедуру к некоторым значениям аргументов, мы помещаем
значения аргументов в стеке eval и указатель на замыкание, которое мы хотим
позвонить в регистр ЗНАЧЕНИЕ
.Затем мы выполняем короткую последовательность
инструкции, выполняющие вызов:
- Извлеките указатель среды из замыкания и поместите его в реестре окружающей среды. (Это в основном просто индексированная загрузка с использованием регистра значений в качестве основы.)
- Извлеките указатель шаблона из закрытия и вставьте его регистр шаблона. (Это просто еще один индексированный загрузить, используя регистр значений в качестве основы.)
- Извлеките указатель кода из шаблона и поместите его в регистр счетчика программ, т.е.е., перейдите к этому коду. (Это в основном просто еще одна проиндексированная загрузка с использованием регистра шаблона в качестве базы, и переход по этому адресу.)
Таким образом, фактический машинный код для нашей операции «применить» в нашем промежуточном представление — это всего лишь несколько инструкций, которые делают это — стереотипная небольшая последовательность инструкций, которая разрушает замыкание и помещает соответствующие значения в регистры перед началом выполнения процедуры.
Поскольку так работает соглашение о вызове процедур, мы знайте, что когда мы начинаем выполнение кода для процедуры, регистр среды укажет на нужную среду (где процедура была определена), и регистр шаблона будет указывать на шаблон для этой процедуры.Любые значения, хранящиеся в шаблоне компилятор можно получить во время компиляции, выполнив индексированную загрузку используя регистр шаблона в качестве основы.
Рассмотрим эту процедуру:
(определить (foo x y) (список 'bar x y))
Здесь буквальная полоса нужна процедуре — там должны быть какие-то
код в foo, который каким-то образом получит указатель на строку символов. Это
для чего предназначен объект шаблона. Когда эта процедура составлена,
компилятор накапливает список таких литералов, и когда шаблон
объект для процедуры создается, все эти значения будут сохранены
внутрь.Когда компилятор генерирует код для получения символа bar
,
он просто смотрит на позицию символа в литеральном списке (и, следовательно, его
смещение в объекте шаблона) и генерирует код для выполнения индексированного
load, чтобы получить это значение из шаблона во время выполнения.
Применение процедуры не сохраняет состояние вызывающего
Помните, что когда мы вызываем процедуру, мы делаем не обязательно сохранить состояние звонящего. Для нехвостового вызова компилятор
должен сгенерировать код для сохранения состояния вызывающего абонента плюс код для
фактический звонок.Для хвостового вызова нет необходимости сохранять состояние.
Из-за этого на самом деле нет ни одного «вызова процедуры»
операция, которая сохраняет состояние вызывающего и вызывает вызываемого.
Есть две отдельные операции: сохранение-продолжение
и применить
.
Как упоминалось выше, кодовая последовательность, выполняющая процедуру
аппликатин предполагает, что указатель на вызываемое замыкание
в регистре ЗНАЧЕНИЕ
. Процедура оставит свою ценность в том, что
зарегистрируйтесь, когда он вернется.
Продолжение сохранения
сохранить-продолжение
— это операция, которая сохраняет состояние
в настоящее время выполняется процедура в частичном продолжении, и
помещает его в цепочку продолжения.
При продвижении продолжений важно сохранить все значения в стеке eval, кроме для аргументов процедуры называется. Поэтому при генерации кода для комбинации (вызов процедуры) выражение, код для сохранения состояния вызывающего не , а не приходит непосредственно перед фактическим кодом для вызова процедуры.Это приведет к удалению аргументов процедуры из стека eval. Вместо этого сохранение продолжения происходит непосредственно перед кодом, который генерирует значения аргументов, которые будут переданы в процедуру:
(сохранение-продолжение <метка>); сохраните все остальное перед вычислением аргументов <вычислить аргумент> ... <вычислить аргумент1> <вычислить вызываемого> (применять) <метка>
таким образом, аргументы вызова (и ничего больше) будут в стеке eval при вызове процедуры и когда процедура возвращается, она восстановит другие значения из частичное продолжение в стеке eval.
Особенно выглядит такое разделение кода сохранения и вызова. забавно для вложенных выражений, вызывающих процедуры, но это делает Отличный смысл.
save-continue
принимает аргумент, который является адресом
код, выполняемый при возобновлении продолжения. Этот
адрес сохраняется в частичном продолжении, а когда
продолжение будет возобновлено, оно будет разветвлено до (вставьте ПК
регистр).
Пример
Теперь, когда у нас есть более подробное представление о том, как регистры, стек eval, и продолжения работают, вот пример:
(+ (- а б) (/ в г))
компилируется в промежуточный код примерно так:
(нажатие-продолжение "resume23"); сохранить продолжение для звонка в + (нажатие-продолжение "resume24"); сохранить продолжение для звонка на - (поисковая переменная d); получить значение d в значение reg (От себя) ; поместить значение d в стек eval (поисковая переменная c); получить значение c в значение reg (От себя) ; поместить значение c в стек eval (поиск-переменная /); Погляди / (применять) ; вызов /, который находится в значении reg после поиска (От себя) "resume24" (нажать-продолжение "resume25"); сохранить продолжение для -, вкл.значение (/ c d) (поисковая переменная b); получить значение b (От себя) (поисковая переменная a); получить ценность (От себя) (поисковая переменная -); получить значение - (применять) ; вызов - (От себя) ; поместить возвращаемое значение поверх восстановленного электронного стека "resume25" (поисковая переменная +); искать + (применять) ; хвостовой зов + "resume23"
На что обратить внимание:
- после первого
примените
, вызываемую процедуру (или что-то еще прямо или косвенно хвостовые вызовы) в конечном итоге выполнят процедуру вернуться и открыть последнее нажатое продолжение, восстанавливая все, что было в стеке eval в этот момент, и возобновление исполнение на label1.[OOPS … исправить] - после второго применения вызываемая процедура в конечном итоге (прямо или косвенно) выполнить возврат процедуры, который будет выдавать
второе продолжение, которое мы нажали, восстанавливая уже вычисленное
значение подвыражения
(/ c d)
в стек eval. - мы сгенерировали код для выражения
(+ (- a b)
(/ c d))
для использования в хвостовой позиции. Этот код не сохраняет продолжение перед финальным звонком в +.Если выражение должно использоваться в не в хвостовой позиции, мы должны сгенерировать немного другой код, который сохранит продолжение, которое возобновится после этого выражения.
Создание уникальных этикеток
[Куда это идет? ]
Подобно compile-if
, compile-combo
генерирует метки как
необходимо, чтобы иметь возможность назвать код, в котором выполнение должно быть возобновлено
после вызова — в генерируемом коде ставит метку непосредственно перед
команда промежуточного кода для возобновления и та же метка
в вызове сохранить-продолжение
, которое должно возобновиться там.
Легко создавать уникальные метки для каждой возобновляемой точки
в программе. Мы просто ведем счетчик использованных этикеток, поэтому
далеко, и чтобы создать новый, мы добавляем цифры, представляющие
это число в строку "резюме"
, чтобы мы получили «resume1»
, «resume2»
и так далее.
Мы можем написать процедуру схемы generate-label
, которая сохраняет
счетчик, а при передаче строки в качестве аргумента возвращает новый
строка с такими же символами плюс цифры, представляющие
номер в счетчике.Таким образом, мы можем использовать ярлыки, которые начинаются
с "else"
и "end"
для обозначения целевых объектов ветвления , если выражение
, и метки, начинающиеся с "возобновить"
до
представляют собой точки возобновления для продолжения сохранения. Это делает
промежуточный код, который мы генерируем, довольно понятен, обеспечивая при этом
Этикетки по-прежнему уникальны и просты в использовании в качестве ассемблерных этикеток
при переводе промежуточного кода на машинный язык.
Чтобы получить приемлемую производительность для нашей системы, мы хотим обработать среда верхнего уровня отличается от привязки локальной переменной среды.Мы будем использовать трюк с лексической областью видимости для предварительного вычисления большая часть работы выполняется при поиске привязки локальной переменной, а другой трюк, позволяющий ускорить поиск переменных верхнего уровня.
Как мы уже говорили ранее, каждый контур привязки локальной переменной (например,
привязки, введенные let
, или путем привязки аргументов к процедуре)
представлен во время выполнения в виде кадра со слотами для каждой переменной,
плюс ссылка на область видимости, которая указывает на фрейм, представляющий охватывающий
контур.
Среда верхнего уровня, вероятно, будет большой, и мы захотим иметь возможность получить к нему доступ особыми способами. Представим это как хеш таблица, которая отображает символы (имена переменных) на их привязки верхнего уровня. Сами привязки будут представлены в виде объектов, основные функция должна иметь одно поле, которое содержит текущее значение переменная. Для простоты мы также сделаем их самоидентифицируемыми: не только имена будут использоваться в качестве ключей в хеш-таблице, но объекты привязки будут содержать указатели на их имена, а также ценности.
Имейте в виду, что это представление просто удобное. Среда верхнего уровня может быть представлена как таблицы (например, список ассоциаций), но мы хотим, чтобы он был разумно быстрый доступ, даже если есть тысячи переменных верхнего уровня. (Мы воспользуемся специальным приемом, чтобы сделать обычный доступ к верхнему уровню связывание переменных очень быстро во время выполнения, но мы хотим сделать их достаточно быстро во время компиляции, а хеш-таблицы хороши для этого.)
Предположим, мы оцениваем следующие выражения на верхнем уровне, чтобы определить и инициализировать пару переменных:
(определите quux "fubar") (определить (двойной x) (+ x x))
Это изменит среду верхнего уровня, добавив привязки для quux
и double
, в дополнение к тому, что уже есть:
+ ------------------------------------------------- ------------------ + | | | | \ | / | + ------------------ + | | toplevel env.| | + ================== + + ---------- + | | минусы | * ---- + --------> | переплет | | + -------- + --------- + + ========== + | | | | значение | * ---- + ------> <закрытие для минусов> | . . + ---------- + | . . имя | минусы | | .. + ---------- + | | | | | + ---------- + | + -------- + --------- + | переплет | | | quux | * ---- + --------> + ========== + | + -------- + --------- + значение | * ---- + ------> "фубар" | | | | + ---------- + | .. имя | quux | | . . + ---------- + | . . | | | | | + ---------- + | + -------- + --------- + | переплет | + ---------- + | | двойной | * ---- + --------> + ========== + | закрытие | | + -------- + --------- + значение | * ---- + ---------> + ========== + | | | | + ---------- + envt | * ---- + ----- + .. имя | двойной | + ---------- + . . + ---------- + proc | * ---- + ---> ... . . + ---------- +
Следует отметить несколько моментов:
- Представление самой хеш-таблицы может не совсем быть простым массивом пар имя-значение, но я не хотел чтобы загромождать картинку переполненными ведрами и прочим.
- В принципе, нам не нужны указатели для разделения привязка объектов.Мы могли бы просто сохранить значения привязок прямо в таблице, используя поля значений пары имя-значение для хранения фактических значений переменных. (Ведь привязка на самом деле просто место с именем, используемое для хранения значения.) Будет удобно для нашей реализации иметь отдельные объекты, содержащие значения.
- Вхождения имен символов на картинке действительно были бы
указатели на объекты символов, а строка
"fubar"
будет действительно быть самим объектом.Как обычно, мы выборочно сократите наше графическое представление, чтобы не загромождать вещи. - Мы называем объекты привязки верхнего уровня объектами, но они
не объекты схемы — стандартная схема не дает вам возможности
получить указатель на один из них и поиграть с ним изнутри
язык. Эти «объекты» являются объектами в том смысле, что
они размещаются в куче и упоминаются с помощью указателей
компилятором и скомпилированным кодом, но они не «первоклассные».»
(Расширенная версия языка Scheme может
позволить вам получить
на них изнутри языка, но это нестандартно.)
Когда компилятор компилирует код для литерала, например 'foo
или "foo"
или 22
в следующем выражении,
(список 'foo "foo" 22)
он замечает, какие литералы потребуются выражению во время выполнения, и гарантирует, что эти литералы появятся в шаблоне процедура.Он хранит список литералов, необходимых для процедуры он компилируется, и после компиляции кода процедуры он использует этот список для создания шаблона, соответствующего коду.
Если foo
— первый встреченный литерал, он может быть помещен в
список первым и назначается первый свободный слот в шаблоне
(после указателя кода). "foo"
может быть назначен второй слот,
и так далее. В терминологии языковой реализации
шаблон действует как буквальный фрейм , а также удерживает указатель
к коду процедуры.
После присвоения литералу позиции в шаблоне компилятор
может сгенерировать одну или две инструкции, которые могут извлечь значение
шаблона, используя адрес шаблона, добавляя
смещение этого слота и загрузка с полученного адреса.
Поскольку адрес шаблона гарантированно находится в ШАБЛОНЕ
register, вероятно, это всего лишь одна индексированная инструкция загрузки.
В псевдо-C это может выглядеть так:
значение_регистр = * (регистр_шаблона + смещение)
где смещение вычисляется компилятором и поэтому вероятно непосредственный операнд инструкции загрузки, которая загружает значение в регистр значений.
Обратите внимание: здесь мы используем тот факт, что компилятор работает в нашей системе и генерирует код, который является просто данными в нашем система. Код будет работать в той же куче, и компилятор сможет поэтому просто вычислите значения и поместите их в шаблон, и они останутся до тех пор, пока этот код не будет выполнен. (Жизнь становится немного сложнее, если вы хотите сгенерировать код, который будет загружен в другую систему и выполняется там.)
[Теперь мы должны объяснить, что аргумент буквального состояния
для compile
— это список литералов, замеченных до сих пор при компиляции
процедура.Возвращаемое значение compile
является промежуточным.
код, который включает обновленное литеральное состояние
. ]
Из-за лексической области видимости компилятору легко сказать разница между ссылкой на привязку переменной верхнего уровня и ссылка на локальную переменную. Поговорим об этом подробнее позже, а пока просто предположим, что компилятор знает разницу в точке, где он генерирует код для ссылки на переменную.
Когда компилятор генерирует код для переменной верхнего уровня, он может обычно ищут привязку этой переменной в среде, которая код создается для — выражения, которое определяет переменная уже была выполнена, значит, привязка уже существует.
Таким образом, компилятор может выполнять фактический поиск во время компиляции, например, хеширование в хеш-таблицу, которая реализует верхний уровень окружение и получение указателя на фактический объект привязки на которые будут ссылаться во время выполнения.
Чтобы быстро ссылаться на этот объект, компилятор может просто поместите этот указатель в шаблон для компилируемой процедуры, как если бы это было буквальное значение.
Будьте ясны в том, что здесь происходит: компилятор не может найти значение переменной, потому что это не известно до момента ссылка на переменную выполняется во время выполнения.(Перед выполнением кода какой-то другой фрагмент кода может запуститься и изменить значение, хранящееся в привязка.) Но личность привязки известна, и может быть спрятан в буквальной рамке.
На самом деле, все немного сложнее. Переменная может использоваться в определении процедуры перед самой переменной определено. (Это называется «прямой ссылкой».) Чтобы обойти это компилятор «обманывает» и создает привязку объект и его вход в среду верхнего уровня до определения переменной действительно встречается.На языковом уровне переменная не связана и не имеет значения, но мы продолжаем и создать уникальный объект привязки и использовать его при компиляции других выражения. Для проверки ошибок мы помещаем специальное значение в привязка, чтобы указать, что привязка еще не «настоящая» — мы помещаем ссылка на какой-то объект, который мы считаем «ненастоящим», так что мы можем обнаружить использование переменной, которая на самом деле не связана.
(В системе, разработанной для максимальной безопасности и ранней проверки ошибок,
мы могли бы гарантировать, что каждая ссылка на переменную верхнего уровня будет
проверьте это значение и сообщите об ошибке, если оно будет найдено.Если мы
не очень заботясь о ранней проверке ошибок, мы можем подождать, пока
кто-то пытается использовать такое значение, например, добавляя его к
что-то, или взять машину
из нее, и мы полагаемся на нормальный
проверка типа языка, чтобы сообщить нам, что что-то не так
указывает, что операция происходит.)
Теперь рассмотрим компиляцию такой процедуры, как
(определить (make-foo-list) (список 'foo "foo"))
Компилятор накопит список привязок и литералов верхнего уровня.
необходим для процедуры, а именно строка "foo"
, символ foo
и привязка верхнего уровня для символа list
.Эти будут
быть помещенным в шаблон для процедуры, в первом, втором и третьем
слоты после указателя кода. Код, созданный для этой процедуры
(при оценке справа налево) будет примерно так:
(выборка-литерал 1); получить строку "foo" из слота 1 шаблона (От себя) ; поместите его в стек eval (выборка-литерал 2); получить символ foo из слота шаблона 2 (От себя) ; поместите его в стек eval (выборка-литерал 3); получить привязку верхнего уровня списка из слота 3 шаблона (т-л-бдг-получить); извлечь значение из привязки (применять) ; (хвост-) список звонков
Обратите внимание, конечно, что мы сделали наше промежуточное представление кода
теперь более конкретно — мы используем номера слотов в качестве аргументов для fetch-literal,
и мы явно получаем значение переменной верхнего уровня из верхнего уровня
объект привязки в регистре значений.Чтобы установить значение в привязке,
мы будем использовать другую инструкцию промежуточного кода, t-l-bdg-set!
( t-l-binding-set!
ожидает, что регистр значений будет содержать указатель на
объект привязки верхнего уровня; он извлекает значение привязки и
оставляет это значение в регистре значений.)
[Теперь мы можем подробнее рассказать о литеральных состояниях — мы составляем список буквальных значений и привязок переменных верхнего уровня, которые должны быть доступен во время выполнения процедуры. ]
К настоящему времени должно быть очень ясно, как вы переведете каждый из этих небольшие операции в нашем промежуточном представлении на несколько инструкции на языке ассемблера.
[нужна фотография? ]
Мы не можем найти привязки локальных переменных во время компиляции
мы можем повысить уровень привязок — привязки локальных переменных еще не существуют, когда
мы компилируем выражения, которые их создают и используют. (Рассмотрим
факт, что каждый раз, когда вы вводите , позволяйте
или вызываете процедуру, которая связывает
arguments создается новый фрейм среды привязки. Код, который выполняет
в таких средах будет виден другой фрейм среды привязки в
регистр среды каждый раз при запуске.)
Что мы, , можем сделать, так это использовать лексическую область видимости для предварительного вычисления большинства из выполняет поиск переменной в среде.
Рассмотрим выполнение этой процедуры:
(лямбда (x y) (let ((a <какое-то выражение> (b <какое-то выражение>)) (перечислите a b x y)))
Когда мы вычисляем аргументы для вызова из списка
, очевидно, что
первая и вторая переменные ( a
и b
) будут в первой
и вторые слоты первого кадра среды привязки, указывающие прямо
по регистру ENVT
.Это среда, созданная лет
. Третья и четвертая переменные ( x
и y
) будут
находиться в следующем кадре среды, на который указывает ссылка области действия первого.
Компилятор может вычислить лексический адрес каждой привязки переменной. в том месте, где скомпилирована ссылка на него — это относительный расположение переменной, начиная с регистра среды. Лексический адрес состоит из двух частей: количества кадров среды чтобы пропустить, чтобы найти правильный кадр, и смещение привязки в этот кадр.В приведенном выше примере лексические адреса:
а: 0,1 б: 0,2 х: 1,1 y: 1,2
(Мы используем соглашение, согласно которому номера кадров начинаются с нуля, но слот номера начинаются с 1, потому что ссылка на область видимости находится в слоте 0.)
Код, созданный для ссылки на a, может быть просто индексированной загрузкой. инструкция, используя регистр среды плюс смещение для захвата значение в первом слоте привязки переменной. В псевдо-C это что-то типа
value_register = * (envt_register + смещение)
где смещение, вероятно, составляет 4 (байта) для индексации за слот ссылки области.Говоря более абстрактно, его лексический адрес — [ЧТО? ]
Код для ссылки на переменную y
будет включать один уровень
косвенного обращения — сначала необходимо извлечь указатель ссылки области видимости из
первый кадр среды, а затем его можно использовать для индексированного
load, чтобы получить значение второго слота второго кадра:
value_register = * (envt_register); получить ptr для 2-го кадра envt value_register = * (envt_register + смещение)
где смещение, вероятно, составляет 8 (байтов) для индексации после ссылки области
и переплет х
.
По этой схеме для доступа к локальной переменной требуется время, пропорциональное к количеству кадров среды, находящихся между компилируемое выражение и среда, на которую ссылается переменная определена. Обычно это довольно быстро по двум причинам:
- Глубина лексической вложенности обычно невелика — соответствует вложенности выражений привязки в программе, и является обычно от одного до трех, редко больше пяти или так.
- Большинство ссылок, которые выполняются во время выполнения, относятся к переменным в текущем объеме или, может быть, на один или два уровня ниже этого. (Рассмотрим ссылки на переменные во внутренних циклах, которые составляют наиболее часто исполняемый код в большинстве программ.)
По этим причинам большинство ссылок на локальные переменные будут иметь место между одна и пять инструкций. В первом приближении время до ссылочные локальные переменные можно рассматривать как небольшую константу.(А немного более шикарный компилятор может уменьшить это, используя больше регистров, и оставляя много значений в регистрах вместо того, чтобы нажимать и выскакивать их из стека eval, но это более сложная техника, чем мы хотим обратиться сюда.)
Лексическая адресация и среды времени компиляции
Компилятор очень легко вычисляет лексические адреса. Все это необходимо поддерживать структуру данных, называемую периодом компиляции среда , которая записывает структуру среды выполнения.
Каждый раз, когда компилятор компилирует выражение, которое создает новые привязки,
он расширяет среду времени компиляции, чтобы отразить изменения в
структура среды, и при компиляции выражений, которые будут
выполнить в этой среде, он передает новое время компиляции
среда для рекурсивного вызова compile
, который скомпилирует
это выражение.
Например, при компиляции let
компилятор отправляет compile-let
, аналог eval-let
, который выполняет четыре
вещи:
- Компилирует код для выражений начального значения.Этот код
выполняется в среде за пределами
let
, поэтомуcompile-let
uses the environment задается, когда выполнение рекурсивных вызовов, компиляция
для генерации код начального значения. - Создает код для создания среды привязки и инициализации это с этими ценностями.
- Расширяет среду времени компиляции новым фреймом, отражающим
Дело в том, что корпус
пусть
выполнят в новом объеме включая новые привязки. - Вызывает
compile-sequence
для компиляции телаlet
, передавая ему новую среду времени компиляции.
Так же, как общая рекурсивная структура компилятора внимательно напоминает рекурсивную структуру интерпретатора, роль среды времени компиляции очень похожа на роль среда в интерпретаторе.
Когда интерпретатор (компилятор) оценивает (компилирует) подвыражения которые выполняются в той же среде, что и их родительские выражения, передает рекурсивный вызов той же среде, в которой он был.Когда интерпретатор (компилятор) оценивает (компилирует) выражение в новая среда, он передает рекурсивный вызов новому (время компиляции) Окружающая среда.
Структура среды времени компиляции в любой момент в процесс компиляции отражает структуру среды выполнения где будет выполняться код. В отличие от представления интерпретатора среды, однако среда времени компиляции не содержать фактические привязки — он не может и не должен.
Фактически, мы разделяем среду интерпретатора на две части. с параллельной структурой.Где среда переводчика цепочки кадров, содержащие пары привязки имен, компилятор разбивает их на две цепочки фреймов: среда выполнения, чьи фреймы содержат фактические привязки, а время компиляции среда, фреймы которой содержат соответствующие имена.
Рассмотрим выражение
(пусть ((x 1) (y 2)) (пусть ((foo 3) (такт 4)) (список foo bar x y)))
В точке, где (список a b x y)
компилируется или выполняется,
среда для интерпретируемой системы отображается, как показано на
слева внизу, пока отображаются среды для скомпилированной системы
как показано справа:
ИНТЕРПРЕТИРОВАННАЯ СОСТАВЛЕННАЯ НАБОР (время компиляции) (время выполнения) / \ / \ / \ | | | + --------------- + | + ---------- + | + ---------- + | | envt.рамка | | | c.t.e.fr. | | | envt. фр. | | + =============== + / + ========== + / + ========== + / | + ---- + - '| + ---- + - '| + ---- + - ' + ------- + ------- + + ---------- + + ---------- + | х | 1 | | х | | 1 | + ------- + ------- + + ---------- + + ---------- + | y | 2 | | y | | 2 | + ------- + ------- + + ---------- + + ---------- + _ _ _ | \ | \ | \ \ \ \ \ \ \ + --------------- + | + ---------- + | + ---------- + | | envt.рамка | | | c.t.e.fr. | | | envt. фр. | | + =============== + / + ========== + / + ========== + / | + ---- + - '| + ---- + - '| + ---- + - ' + ------- + ------- + + ---------- + + ---------- + | foo | 3 | | foo | | 3 | + --------------- + + ---------- + + ---------- + | бар | 4 | | бар | | 4 | + ------- + ------- + + ---------- + + ---------- +
Обратите внимание, что между временем компиляции существует связь «многие к одному».
среды и среды выполнения: let
или лямбда
выражение компилируется один раз, и соответствующий фрейм среды
создается и передается рекурсивным вызовам, которые компилируют подвыражения.Однако код может выполняться много раз, и каждый раз во время выполнения
фрейм окружения будет создан таким образом, чтобы код для подвыражений
может быть выполнен в этой среде.
Подробный пример
Делая это шаг за шагом, давайте посмотрим на компиляцию выражение
(пусть ((x 1234) (y 3456)) (пусть ((foo z)) (+ (- фу х) (+ полоса у))))
идет следующим образом. (Предположим, что это выражение встречается в верхний уровень.)
Поскольку мы компилируем выражение верхнего уровня, мы компилируем его в среда времени компиляции, соответствующая верхнему уровню Окружающая среда. Особо обрабатываются среды верхнего уровня, потому что они не создаются динамически, как локальная привязка среды. Есть отношения один на один среды компиляции верхнего уровня и соответствующие среды выполнения. Мы представим время компиляции верхнего уровня среда как особый вид рамки среды, которая действительно просто содержит указатель на среду выполнения верхнего уровня, поэтому что переменные верхнего уровня можно найти.
Итак, мы начнем со среды верхнего уровня, которую мы изобразим
как [верхний уровень]
; мы передаем это , компилируем
вместе с
выражение для компиляции. компиляция
— это основная рассылка, которая
анализирует выражение; в этом случае он анализирует его и отправляет (через compile-list
и compile-special-form
) в compile-let
,
специализированная процедура для составления let
выражений.
compile-let
компилирует выражения начального значения для x
и y
с использованием compile-multi
, который, в свою очередь, вызывает compile
рекурсивно; они скомпилированы в среде (верхнего уровня), которая просто
прошло, потому что новых сред еще не было создано.В данном случае это не имеет значения, потому что они просто
литералы. (Значения 1234
и 3456
добавляются к литералу
list на этом этапе.) Затем compile-let
генерирует код для привязки x
и y
.
Пока что сгенерированный код выглядит так:
(буква-литерал №1); получить 1234 (От себя) ; поместите его в стек eval (буква-буква № 2); получить 3456 (От себя) ; поместите его в стек eval (связать 2); связать 2 вары (x и y) со значениями из стека eval
а список литералов содержит 1234
и 3456
.
compile-let
затем вызывает compile-sequence
для компиляции
тело пусть
, но сначала он создает новую среду времени компиляции,
чтобы представить тот факт, что последовательность тела будет выполняться в новом
среда выполнения после привязки x
и y
.
Структура этой среды
[x y] -> [верхний уровень]
(Это наш новый краткий способ рисования данных в виде прямоугольника и стрелки. структура для сред времени компиляции.Я устал рисовать ascii искусство.)
compile-sequence
вызывает compile
рекурсивно для оценки
последовательность выражений; в этом случае есть только одно выражение
в теле.
Рекурсивный вызов скомпилирует
отправлений (снова через compile-list
и compile-special-form
to compile-let
,
для компиляции внутреннего позвольте
.
compile-let
компилирует выражения начального значения, используя компиляция-мульти
. compile-multi
звонков compile
рекурсивно скомпилировать одно выражение в списке, символ z
. (Опять же, та же среда просто передается, потому что
мы не создали новую среду.)
Рекурсивный вызов compile теперь отправляется на compile-symbol
,
который ищет информацию о привязке для символа z
в
среда времени компиляции. В первом кадре привязки нет
(содержащий x
и y
), поэтому поиск переходит ко второму кадру,
которая является средой верхнего уровня, а привязка верхнего уровня
возвращается.Это приводит к отправке compile-
toplevel-
var-ref
,
который добавляет привязку верхнего уровня z
к списку литералов и
генерирует код, чтобы получить его из шаблона и извлечь его значение
во время выполнения.
Затем compile-let
генерирует код для привязки полученного значения как
локальная переменная foo.
Сгенерированный на данный момент код:
(выборка-литерал 1); получить 1234 (От себя) (выборка-литерал 2); получить 3456 (От себя) (связать 2); связать 2 значения (x и y) (выборка-литерал 3); получить привязку верхнего уровня (из z) (т-л-бдг-получить); получить значение из привязки (z) (От себя) (привязка 1); привязать одну переменную (foo)
а список литералов содержит 1234
, 3456
, а привязка
из z
.Теперь compile-let
создает новую среду времени компиляции для представления
среда, созданная внутренним let
; его структура
[foo] -> [x y] -> [верхний уровень]
и он передает это compile-sequence
для компиляции тела
позволять. compile-sequence
вызовов рекурсивно скомпилировать
один раз, передавая
это новая среда, чтобы скомпилировать одно выражение тела, (+ (- foo x) (+ bar y))
.
Рекурсивный вызов компилирует
отправлений (через compile-list
) в compile-combo
, который рекурсивно вызывает скомпилировать
три раза, чтобы сгенерировать код для подвыражений (+ bar y)
, (- foo x)
и +
. Поскольку новых привязок нет
создаются, рекурсивные вызовы получают ту же среду.
Рекурсивный вызов call (+ bar y)
аналогичным образом отправляется в компилирует-комбо
и компилирует и
, bar
и +
.Каждый из этих вызовов отправляется на compile-symbol
и переменные
ищутся во время компиляции. Поиск для y
возвращает лексический адрес 1,2, поэтому сгенерированный промежуточный код
(местная-вар-ссылка 1 2)
Поиск для панели не находит локальных привязок и возвращает привязка верхнего уровня, поэтому привязка добавляется к литералу список и промежуточный код
(буквальный поиск 4) (t-l-bdg-get)
Точно так же поиск для +
не находит никаких локальных привязок и
возвращает привязку верхнего уровня, поэтому привязка добавляется к литералу
список и промежуточный код
(буквальный поиск 4) (t-l-bdg-get)
теперь вызов compile-combo
, который компилирует (+ bar y)
, может
соедините эти три фрагмента вместе, чтобы получить
(сохранение-продолжение "resume26"); сохранить состояние для вызова + (местная-вар-ссылка 1 2); посмотри на тебя (От себя) (буквальный поиск 4); получить привязку верхнего уровня (бара) (т-л-бдг-получить); получить значение из bdg (бара) (От себя) (буквальный поиск 5); получить привязку верхнего уровня (из +) (т-л-бдг-получить); получить значение от привязки (из +) (применять) ; звонок + "resume26"
и верните это.Обратите внимание, что для подвыражений аргументов compile-combo
вставляет (push)
es для сохранения значений в
стек eval. Для первого подвыражения (позиция функции) он оставляет
значение в регистре значений, где оно ожидается
(к применять
).
Рекурсивный вызов compile-combo
для компиляции (- foo x)
идет примерно так же, как и для (+ bar y)
, основной
разница в том, что foo
и x
оказываются
локальные переменные и скомпилированы соответствующим образом, с
результатом является последовательность
(сохранение-продолжение "resume27"); сохранить состояние для звонка - (местная-вар-ссылка 1 2); посмотри х (От себя) (местная-вар-ссылка 0 1); посмотри фу (От себя) (буквальный поиск 4); получить привязку верхнего уровня (из -) (т-л-бдг-получить); получить значение из привязки (из -) (применять) ; вызов - "resume27"
Рекурсивный вызов для компиляции символа +
идет прямо вперед
на compile-symbol
, который ищет +
и обнаруживает, что это
переменная верхнего уровня; привязка уже есть в списке литералов, поэтому
сгенерированный код:
(буквальный поиск 5); получить привязку верхнего уровня (из +) (т-л-бдг-получить); получить значение от привязки (из +)
и это возвращается к внешнему вызову compile combo
.Затем он может объединить код для внешнего выражения +
,
поместив сохранение-продолжение
вперед и добавив apply
в конце. Этот код возвращается при внутреннем вызове compile-let
, который добавляет его в свой код и возвращает в
внешний вызов compile-let
, который возвращает весь
кодовая последовательность
(выборка-литерал 1); получить 1234 (От себя) (выборка-литерал 2); получить 3456 (От себя) (связать 2); связать 2 значения (x и y) (выборка-литерал 3); получить привязку верхнего уровня (из z) (т-л-бдг-получить); получить значение из привязки (z) (От себя) (привязка 1); привязать одну переменную (foo) (сохранение-продолжение "resume26"); сохранить состояние для вызова + (местная-вар-ссылка 1 2); посмотри на тебя (От себя) (буквальный поиск 4); получить привязку верхнего уровня (бара) (т-л-бдг-получить); получить значение из bdg (бара) (От себя) (буквальный поиск 5); получить привязку верхнего уровня (из +) (т-л-бдг-получить); получить значение от привязки (из +) (применять) ; звонок + "resume26" (сохранение-продолжение "resume27"); сохранить состояние для звонка - (местная-вар-ссылка 1 2); посмотри х (От себя) (местная-вар-ссылка 0 1); посмотри фу (От себя) (буквальный поиск 4); получить привязку верхнего уровня (из -) (т-л-бдг-получить); получить значение из привязки (из -) (применять) ; вызов - "resume27" (буквальный поиск 5); получить привязку верхнего уровня (из +) (т-л-бдг-получить); получить значение от привязки (из +) (применять) ; (хвост-) вызов +
Одна очень важная вещь, которую мы только что упустили, описывая работа компилятора заключалась в том, когда именно сохранять продолжения, а когда не надо.Важно сохранить продолжение.
Простая схема декодирования достоверности кодов BCH и RS в мультимедийных передачах
Классические линейные блочные коды, такие как коды Бозе-Чаудхури-Хоккенгема (BCH) и Рида-Соломона (RS), широко распространены. используются в мультимедийных передачах, но их декодирование с мягким решением все еще представляет собой открытую проблему. Среди нескольких подходов, предложенных для этой цели, важную роль играет принцип итеративного распространения доверия, применение которого к кодам с низкой плотностью проверки на четность (LDPC) позволяет приблизиться к пропускной способности канала.В этой статье мы разрабатываем новую технику декодирования классических двоичных и недвоичных кодов с помощью алгоритма распространения убеждений. Мы сосредотачиваемся на кодах RS, включенных в недавний стандарт CDMA2000, и сравниваем предложенный метод с подходом адаптивного распространения убеждений, который может обеспечить очень хорошую производительность, но с большей сложностью. Более того, мы рассматриваем случай длинных кодов BCH, включенных в стандарт DVB-S2, для которого мы показываем, что использование «чистых» кодов LDPC обеспечит лучшую производительность.
1. Введение
Классические семейства линейного блока, несмотря на возраст, коды, такие как Bose-Chaudhuri-Hocquenghem (BCH) и коды Рида-Соломона (RS), продолжают применяться во многих телекоммуникационных стандарты. Например, самый последний европейский стандарт спутниковой цифровой связи. видеовещание (DVB-S2) включает схему исправления ошибок на основе конкатенация внешнего кода BCH с последующей внутренней проверкой четности с низкой плотностью (LDPC) код [1].Классические схемы кодирования приняты также для вещания. услуги, реализованные в разных сетях, например мобильные с коммутацией пакетов сети: американский стандарт CDMA2000 включает коды RS для развертывания услуги высокоскоростной передачи данных [2].
Кодирование и декодирование кодов BCH и RS может быть достигается с помощью очень простых схем, реализующих операции над конечным поля. Однако классические методы декодирования полагаются на декодеры с жестким решением, которые позволяют исправлять ошибки вплоть до d — минимальное расстояние кода и наибольшее целое число, меньшее или равное x .Напротив, использование канала измерения в декодерах с мягким решением могут значительно уменьшить ошибку возможность коррекции, таким образом приближаясь, для высоких отношений сигнал / шум, теоретический предел исправления ошибок [3].
Хороший обзор алгоритмов декодирования с мягким решением применительно к линейным блочным кодам и, в частности, к кодам RS, можно найти в [4], где также предлагается новый подход, основанный на итеративном алгоритм распространения убеждений (BP). Благодаря принятию BP коды LDPC могут приблизиться к показателям максимального правдоподобия (ML), сохраняя при этом низкую сложность декодирования [5].
Алгоритм BP работает на графах Таннера, которые двудольные графы с переменными узлами и проверочные узлы, соответствующие битам кода и уравнения четности соответственно. Ребро, соединяющее узел переменной v i с контрольным узлом z j , существует тогда и только тогда, когда Матрица проверки на четность, связанная с графом Таннера, имеет 1 в позиции ().
Для достижения хорошей производительности декодирование BP матрица проверки на четность со следующими характеристиками: (i) разреженность (то есть, фактически присущие LDPC-кодам), (ii) отсутствие коротких циклов в ассоциированных Граф Таннера и (iii) регулярный или оптимизированный неправильный вес строки и столбца раздачи.Такие свойства редко могут быть обеспечены матрицами проверки на четность двоичные циклические коды. Например, можно показать, что коды -BCH, где — длина кодового слова, а k — количество информационных битов, с скорость больше или равна 1/2 и не может иметь графа Таннера без циклов длины 4 [6].
По этим причинам было предложено множество альтернативных решений. предложено в литературе для эффективного применения декодеров BP для общих линейные блочные коды, двоичные циклические коды или определенные классы циклических кодов [7–15].Все эти методы направлены на поиск через различные подходы, графическое представление кода, который хорошо подходит для декодирования БП.
В [7, 8], например, обобщенная матрица проверки на четность (GPCM) принят для уменьшения количества коротких циклов. Такой подход получил дальнейшее развитие. исследовано в [9], где представлен алгоритм, который достигает представление, свободное от длины-4 цикла. Однако все методы, основанные на GPCM, требуют введения вспомогательных битов, не соответствующих передаваемые биты и, следовательно, не дают информации о канале положение дел; это, в свою очередь, может вызвать снижение производительности.В [10] показано, что технику Варди можно используется для поиска разреженных матриц проверки на четность для кодов Рида-Соломона.
Может быть, лучший метод для мягкого декодирования линейных блочные коды, характеризующиеся плотными матрицами контроля четности, являются «адаптивными распространение убеждений »[4, 11]. Обоснование этого метода заключается в изменении матрица проверки четности на каждой итерации в соответствии с битовой надежностью, например что ненадежные биты соответствуют разреженной подматрице, подходящей для БП алгоритм.Фактически, значительное улучшение производительности в отношении жесткого решения декодирование и стандартное декодирование BP могут быть достигнуты с помощью этого метода. Как аналога, его сложность довольно высока, и часто не подходит для реализация в приложениях реального времени (или почти в реальном времени), так как те требуется во многих мультимедийных передачах. Как описано в [4], этот метод требует реализации исключения Гаусса на каждой итерации декодирования алгоритм, который обычно дает большое количество операций.Сложность может быть каким-то образом сокращается за счет объединения этого подхода с алгебраическим методом Кеттера-Варди. алгоритм декодирования с мягким решением [12], но он в любом случае остается достаточно высоким.
В [13] вместо этого соблазняется другой подход: автор предлагает использовать так называемую расширенную матрицу проверки на четность (EPCM), чтобы получить регулярный граф Таннера, связанный с кодом. Понятие EPCM будет напомним в Разделе 2.2; метод очень прост и позволяет получить матрицы больше подходят, в принципе, для применения декодирования БП.К сожалению, однако для большинства кодов производительность, достижимая с помощью этого метода, очень бедные. Примеры будут приведены в Разделе 4.
Принимая во внимание, с одной стороны, простоту Методы на основе EPCM и, с другой стороны, удивительные результаты адаптивного BP, в этой статье мы расширяем альтернативный подход, который мы недавно использовали представлены [14, 15], основанные на «расширенных» матрицах контроля четности. Мы улучшаем такой подход за счет принятия адаптивной версии алгоритма, где адаптация, однако, намного проще, чем в [4].
Сначала применим новый метод к случаю коротких Коды BCH, где, как мы показываем, можно достичь очень хорошей производительности, если по сравнению с методами на основе EPCM. Короткие коды часто используются в мультимедиа сообщения с очень строгими требованиями о задержках и сложности [16]. С другой стороны, как уже упоминалось, некоторые важные стандарты электросвязи принимают недвоичные циклические коды или очень длинные коды для соответствие длины кодов LDPC в сцепленных схемах.По этой причине мы также изучить применимость предложенной процедуры к кодам РС, таким как включены в стандарт CDMA2000, и длинные коды BCH, такие как внешние коды в стандарт DVB-S2.
Работа организована следующим образом. В разделе 2 мы анализируем матрицу проверки на четность рассматриваемых кодов и представим некоторые варианты ее модификация. В разделе 3 мы описываем стандартный алгоритм декодирования и новая версия работает над кодом распространения.В разделе 4 предлагаемая техника оценивается с помощью численного моделирования. Наконец, раздел 5 завершает статью.
2. Матрицы проверки на четность линейных блочных кодов
Чтобы оптимизировать матрицу проверки на четность для применение алгоритмов декодирования распространения убеждений, мы рассматриваем первый двоичный циклические коды, представляющие частные случаи линейных блочных кодов. Мы получаем альтернативное представление их матрицы проверки на четность, рассматривая ее цикличность.Предлагаемый метод может быть применен к кодам BCH и может быть распространяется на другие семейства кодов, как будет показано в следующих разделах.
Дан двоичный циклический код длиной n , размер k , и резервирование, каждый кодовое слово c может быть связано с полином над. Более того, все сдвинутые версии, то есть x i c ( x ), являются допустимыми кодовыми словами из-за цикличность кода.В наборе кодовых полиномов в C , существует уникальный монический многочлен g ( x ) с минимальной степенью, называемый порождающим многочленом C . Каждый полином кодового слова может быть однозначно выражен как, где — полином степени < k . Образующий полином г ( x ) C является множителем (), и существует полином четности со степенью k , h ( x ), такой что.Более того, поскольку g ( x ) делит c ( x ), следующие отношение удовлетворено:
2.1. Стандартная матрица проверки на четность
Стандартная форма матрицы проверки на четность (PCM) двоичный циклический код выглядит следующим образом [17]: где — двоичные коэффициенты h ( x ).