Энэ бичлэгээр ADC
хэрхэн ажилладаг, AVR микроконтроллерийн ADC системийн талаар авч үзнэ. Ямар нэгэн үзэгдлээс мэдээлэл
ихэвчлэн тус зүйлийг хэмждэг мэдрэгчээс (сенсор) аналог сигналаар ирдэг. Энэхүү сигналийг ашиглан үр дүy
гаргахын тулд тоон сигнал болгон хувиргадаг бөгөөд энэ хувиргалтыг хоёртын
толуур дээр суурьласан аналог тоон хувиргагч ашиглана. Доорх зурагт тоолуур дээр
суурьласан тоон хувиргагчийг харуулсан байна. Хэрэв гаднаас орж ирж байгаа
аналог сигнал DAC-аас
гарч байгаа хүчдэлээс бага байх юм бол тоолуур тоолж байх ба тоолуурын утга
нэмэгдэхэд DAC-ийн
гаралтын хүчдэл нэмэгдэн явсаар аналог
оролтын хүчдэлтэй тэнцэхэд тоолуур зогсоно. Энэ үеийн тоолуурын гаралт гаднаас
өгч буй хүчдэлийн тоон утга болно.
Зураг:
Тоолуур дээр суурьласан ADC
ATMega микроконтроллерийн
ADC
нь тоолуур дээр суурьласан систем юм.
• 10-битийн үр дүнг харуулна
• ±2 LSB нарийвчлалтай
• 13 - 260 μs хооронд хөрвүүлэх хугацааг тохируулж болно
• 15 kSPS хүртэл хурдаар өгөгдөлийг боловсруулж чадна
• Нэг шугамыг мультиплексерээр олшруулсан 8
оролттой
• 7 –н дифферециал оролттой
• 2 дифференциал оролт нь тусгай 10x, 200x хүчдэл
өсгөгчтэй
• 0 - VCC ADC хүртэл оролтын хүчдэлийн далайцтай байж болно
• Тулгуур (reference)
хүчдэлийг гаднаас
болон дотроос 2.56V
–оор тохируулж болно
• Чөлөөтэй болон нэг удаа хөрвүүлэхыг сонгож болно
• ADC ажиллахдаа автоматаар хөрвүүлэлтыг эхлэх боловсруулах үйл
ажилгааг хийнэ
• Хөрвүүлж дууссан бол програмд тасалдал өгч болно
• Шуугиангүй
болгох идэвхгүй горимтой
Зураг 5.2:
ADC регистерүүд
Зурагт АТМега микроконтроллерийн ADC системийн регистрүүдийг харуулав. Бидний жишээ авсан
аналог тоон хувиргуурыг бодвол энэ систем маань хурьцангуй олон хүчирхэг
үйлдлүүдийг гүйцэтгэж чаддаг. Гурван төрлийн регистер системд байна.
ADC Multiplexer Selection Register. ADMUX
Энэ регистерт тулгуур хүчдэлийг тохируулах REFS[1:0] битүүд багтана.
Энэ регистерт тулгуур хүчдэлийг тохируулах REFS[1:0] битүүд багтана.
• REFS[0:0] = 00:
AREF гадаад хөлөнд өгсөн потенциал ADC системийн тулгуур хүчдэл болно
• REFS[0:1] = 01:
AVCC хөлөөр тулгуур хүчдэлээ авах ба AREF портонд конденсатор холбож өгнө
• REFS[1:0] = 10:
AREF хөлөөр
• REFS[1:1] = 11: Дотоод 2.56-VDC хүчдэл
тулгуур хүчдэл болох ба энэ горимоор ажиллахдаа AREF хөлөнд конденсатор холбож өгөх шаардлагатай
ADLAR
бит нь өгөгдөлийн регистрийн байрлалийг зохицуулна.
Системийн нарийвчлал нь 10 бит ба бид 8 битийн микропроцессор ашиглаж байгаа учир
хоёр регистерт хувааж байрлуулах шаардлага гарна. Хэрэв ADLAR=1 байвал ахлах регистер дүүрэн өгөгдөлийн сүүлийн 2 бага
бит хоёр дахь бага регистерт багтсан байна.
MUX[4:0] битүүд нь аль сувгийн өгөгдөлийг авахыг зааж өгнө. MUX4,3 битүүд дифференциал өсгөгч удирдах битүүд MUX 2,1,0 нь алв сувгаар өгөгдөл авахыг заана. Жишээ нь MUX[4;0]=00011 дифференциал өсгөгч ашиглахгүй ADC3 хөлний хүчдэлийн утгыг өгөгдөл болгон авч байна.
Зураг: Регистерүүд
ADC
Control and Status Register A- ADCSRA
Энэ регистерт ADC-гийн ажиллагааг зөвшөөрч өгөх ADEN
бит багтсан. Хэрэв уг бит нэг байвал ADC
ажиллахыг зөвшөөрч өгсөн байна гэж үзнэ. Дараагийн нь ADSC
бит ба энэ битийг зөвшөөрвөл хөрвүүлэлт эхлэх болно. Мөн
хөрвүүлэлт гүйцэтгэгдэж дууслаа гэж мэдэгдэх ADIF бит багтсан байх бөгөөд ADC системийн ажиллах давтамжийг ADPS[2:0]
битүүдээр тохируулна.
•
ADPS[2:0]
= 000: division factor: 2
•
ADPS[2:0]
= 001: division factor: 2
•
ADPS[2:0]
= 010: division factor: 4
•
ADPS[2:0]
= 011: division factor: 8
•
ADPS[2:0]
= 100: division factor: 16
•
ADPS[2:0]
= 101: division factor: 32
•
ADPS[2:0]
= 110: division factor: 64
•
ADPS[2:0]
= 111: division factor: 128
Ингэж хуваах тоо нь үндсэн
микроконтроллерийг ажиллуулж байгаа системийн давтамжийг хуваасан тоог харуулна.
Энэ давтамжаас ADC системийн ажиллах хурд хамаарах бөгөөд жишээ нь ADPS[2:0]
= 010, ба микроконтроллерийн ажиллах
давтамж 4MHz байсан
бол хөрвүүлэлт хийх хугацааг дараах байдлаар тодорхойлно.
ADC
ажиллах давтамж нь 4Mhz / 4 =1Mhz
Нэг удаа хөрвүүлэлт хийх
давтамж нь 1Mhz / (210) =976.5hz буюу үе буюу нэг удаа хөрвүүлэлт хийх хугацаа нь 1
/ 976.5hz= 1ms орчим болж байна.
ADC-програм
2 төрлийн функцийг жишээ болгож
тайлбарлая. Эхний функц нь ADC-г ажилгаанд бэлдэх горимыг тодорхойлж өгөх функц. Харин ReadADC
гэсэн функцийн аргумент нь аль сувгаар өгөгдөлийг унших, функцийн утга
нь өгөгдөлийг илэрхийлнэ. Үндсэн програмаас уг функцийг ашиглахдаа хувьсагч=ReadADC(2); /2-р сувгын ADC-ний утгыг авъя/ гэсэн байдлаар бичиж өгнө.
void InitADC( void)
{
ADMUX = 0; //тулгуур
хүчдэлийг гаднаас AREF хөлөөр суваг 0-г сонго
ADCSRA = 0xC3; //хөрвүүлэлтийг
эхлүүлж давтамжийг 8 хуваа
while (!(ADCSRA
& 0x10));//хөрвүүлэлт дуустал хүлээ
ADCSRA |= 0x10;
}
//**************************************************
//**************************************************
unsigned int ReadADC(unsigned char channel)
{
unsigned int adcdata;
unsigned int adclow;
unsigned int adchigh;
ADMUX = channel;
ADCSRA |= 0x40;
while (!(ADCSRA
& 0x10));
ADCSRA |= 0x10;
adclow = ADCL;
adchigh = ((unsigned int)(ADCH
<< 8));
adcdata = adclow | adchigh;
return adcdata; //ADCH:ADCL
}
Atmega8 микроконтроллер дээр жишээ болгож AVRSTUDIO5 дээр нэг коде бичлээ. Доорх линкээр ороод татаад аваарай.
http://www.mediafire.com/?x7o1sarknk33tu6
Keep it up!
ReplyDeleteЗавтай үедээ Транзисторын талаар асуултанд хариулж өгөөч.1) npn биполяр транзистор ерөнхий эмиттертэй холболттой үед баазаар гүйдлийг удирдан, коллектороос эмиттер лүү хэлхээний гүйдэл гүйнэ гэж ойлгосон маань зөв үү?Ө.х транзистор түлхүүрийн үүрэг гүйцэтгэнэ гэж?
ReplyDelete2)npn биполяр транзистор ерөнхий баазтай холболттой үед эмиттерээр гүйдлийг удирдан, хэлхээний гүйдэл баазаас коллектор луу чиглэн гүйх ба транзистор өсгөлтийн үүрэг гүйцэтгэнэ гэж ойлгосон зөв үү?
Эхнийх нь бараг зөвөө, гэхдээ транзистор түлхүүрийн үүрэг гүйцэтгэж байгаа юм биш. Түлхүүр гэдэг бол транзистор нээгдэж хаагдаж ажиллахыг л хэлнэ. Өсгөгчийн транзистор идэвхитэй горимд ажилладаг юм.
DeleteХарин хоёр дахь бол буруу байна. Эндээс унш.
http://www.allaboutcircuits.com/vol_3/chpt_4/7.html
Цаг зав гаргасанд баярлалаа.
DeleteТранзисторыг түлхүүрийн горимд ажиллуулах тухай мэдээлэл өгч тус болооч
ReplyDeleteThis comment has been removed by the author.
ReplyDeleteхүний яриаг тоон болгох технологийн талаар мэдээлэл хэлж өгч туслаач
ReplyDelete