目前單片機(jī)在電子產(chǎn)品中已得到廣泛應(yīng)用,,許多類型的單片機(jī)內(nèi)部已帶有A/D轉(zhuǎn)換電路,但此類單片機(jī)會(huì)比無A/D轉(zhuǎn)換功能的單片機(jī)在價(jià)格上高幾元甚至很多,,本文給大家提供一種實(shí)用的用普通單片機(jī)實(shí)現(xiàn)的A/D轉(zhuǎn)換電路,,它只需要使用普通單片機(jī)的2個(gè)I/O腳與1個(gè)運(yùn)算放大器即可實(shí)現(xiàn),而且它可以很容易地?cái)U(kuò)展成帶有4通道A/D轉(zhuǎn)換功能,,由于它占用資源很少,,成本很低,其A/D轉(zhuǎn)換精度可達(dá)到8位或更高,,因此很具有實(shí)用價(jià)值,。
其電路如圖一所示:
圖一
其工作原理說明如下:
1,、硬件說明:
圖一中“RA0”和“RA1”為單片機(jī)的兩個(gè)I/O腳,分別將其設(shè)置為輸出與輸入狀態(tài),,在進(jìn)行A/D轉(zhuǎn)換時(shí),,在程序中通過軟件產(chǎn)生PWM,由RA0腳送出預(yù)設(shè)占空比的PWM波形,。RA1腳用于檢測比較器輸出端的狀態(tài),。
R1、C1構(gòu)成濾波電路,,對RA0腳送出的PWM波形進(jìn)行平滑濾波,。RA0輸出的PWM波形經(jīng)過R1、C1濾波并延時(shí)后,,在U1點(diǎn)產(chǎn)生穩(wěn)定的電壓值,,其電壓值U1=VDD*D1/(D1+D2),若單片機(jī)的工作電壓為穩(wěn)定的+5V,,則U1=5V*D1/(D1+D2),。
圖一中的LM324作為比較器使用,其輸入負(fù)端的U1電壓與輸入正端的模擬量電壓值進(jìn)行比較,,當(dāng)U1大于模擬量輸入電壓時(shí),,比較器的輸出端為低電平,反之為高電平,。
2,、A/D轉(zhuǎn)換過程:
如果使RA0輸出PWM波形,其占空比由小到大逐漸變化,,則U1的電壓會(huì)由小到大逐漸變化,,當(dāng)U1電壓超過被測電壓時(shí),比較器的輸出端由高電平變?yōu)榈碗娖?,因此可以認(rèn)為在該變化的瞬間被測的模擬量與U1的電壓相等,。
由于U1的電壓值=VDD*D1/(D1+D2),當(dāng)VDD固定時(shí),,其電壓值取決于PWM波形的占空比,,而PWM的占空比由單片機(jī)軟件內(nèi)部用于控制PWM輸出的寄存器值決定,,若軟件中用1個(gè)8位寄存器A來存放RA0輸出的PWM的占空比值D1,,因此在RA1檢測到由“1”變?yōu)?ldquo;0”的瞬間,A寄存器的值D1即為被測電壓的A/D轉(zhuǎn)換值,,其A/D轉(zhuǎn)換結(jié)果為8位,。如果用16位寄存器來作輸出PWM的占空比,則A/D轉(zhuǎn)換值可達(dá)到16位,。
3,、A/D轉(zhuǎn)換誤差分析及解決辦法:
A/D轉(zhuǎn)換的誤差主要由以下幾個(gè)方面決定,,分別說明如下:
(1) 單片機(jī)的電源電壓VDD:在該A/D轉(zhuǎn)換中,,VDD電壓是造成A/D轉(zhuǎn)換誤差的主要原因,,如果使VDD電壓精度做到較高,則A/D轉(zhuǎn)換誤差可以做到很小,,在VDD電壓精度為0.5%情況下,,實(shí)際的A/D轉(zhuǎn)換誤差小于1%。
?。?) 軟件產(chǎn)生的PWM占空比:若用于產(chǎn)生PWM的軟件設(shè)計(jì)不良,,會(huì)使存放占空比的寄存器值與實(shí)際輸出的PWM占空比不一致,這會(huì)導(dǎo)致測量誤差,。
?。?) 比較器輸入端的失調(diào)電壓:該電壓對A/D轉(zhuǎn)換精度有一定影響,但影響較小,。
?。?) RC濾波電路的紋波:在R1、C1取值不當(dāng)?shù)那闆r下,,U1處的電壓紋波較大,,并且延時(shí)時(shí)間不夠,會(huì)使A/D轉(zhuǎn)換產(chǎn)生誤差,,因此R1,、C1取值不能太小,但太大又會(huì)影響A/D轉(zhuǎn)換速度,,推薦使用圖一中所示的R1,、C1參數(shù),在紋波合理的情況下,,其轉(zhuǎn)換誤差也可通過軟件消除,。
A/D轉(zhuǎn)換誤差的解決辦法:
(1) 對VDD造成的誤差,,只能通過提高VDD電壓精度來解決,,它相當(dāng)于A/D轉(zhuǎn)換的基準(zhǔn)電壓。
?。?) 對于軟件中PWM設(shè)計(jì)不良導(dǎo)致的誤差,,可修改軟件進(jìn)行解決,本文提供了用軟件產(chǎn)生PWM的程序流程圖,,實(shí)際使用中可按此流程設(shè)計(jì)程序,。
(3) 對比較器及RC濾波電路的紋波導(dǎo)致的誤差,,在軟件中可通過上,、下檢測法進(jìn)行消除,,即先將PWM的占空比由小到大變化,使U1電壓由低往高逐漸變化,,在比較器輸出端變化時(shí)記錄其A/D轉(zhuǎn)換值,,再將PWM的占空比由大到小變化,使U1電壓由高到低變化,,在比較器輸出端變化時(shí)記錄其A/D轉(zhuǎn)換值,,將兩次的A/D轉(zhuǎn)換值進(jìn)行平均,可有效地消除這兩種誤差,。
?。?) 對A/D轉(zhuǎn)換值進(jìn)行數(shù)字濾波,如多次轉(zhuǎn)換求平均值等,。數(shù)字濾波消除誤差的方法很多,,在此不再贅述。
4,、A/D轉(zhuǎn)換速度及提高辦法:
由于該A/D轉(zhuǎn)換是通過PWM濾波后再進(jìn)行比較來完成的,,其PWM的產(chǎn)生與濾波都需要一定的時(shí)間,因此其A/D轉(zhuǎn)換速度較慢,,適用于對A/D轉(zhuǎn)換速度要求不高的產(chǎn)品中,,其A/D轉(zhuǎn)換速度取決于以下幾個(gè)方面:
(1) 單片機(jī)的運(yùn)行速度:單片機(jī)的運(yùn)行速度越高則PWM的頻率可以越高,, RC值就可以取得越小,,其延時(shí)時(shí)間也可以更短,轉(zhuǎn)換速度就更快,。
?。?) 被測電壓值的大小:由于U1電壓時(shí)是由小到大逐漸加大的,,當(dāng)被測電壓值較小時(shí),,U1電壓上升到相應(yīng)值的時(shí)間就越短,完成A/D轉(zhuǎn)換的速度就越快,。
?。?) 初始占空比:初始占空比越高,U1電壓較大,,其上升到被測電壓值的時(shí)間也就會(huì)越短,,完成A/D轉(zhuǎn)換的速度也就越快。
由上所述,,A/D轉(zhuǎn)換的速度可以通過提高單片機(jī)的工作頻率,,并在預(yù)知被測電壓范圍時(shí)盡可能地設(shè)置較高的初始占空比值來加快轉(zhuǎn)換速度,,如果所要求的A/D轉(zhuǎn)換精度要求不高,,還可以在軟件中縮短PWM輸出的延時(shí)時(shí)間來提高A/D轉(zhuǎn)換速度,。若單片機(jī)帶有外部電平變換中斷和定時(shí)器中斷,其A/D轉(zhuǎn)換的精度和速度還可以得到提高,。
目前單片機(jī)在電子產(chǎn)品中已得到廣泛應(yīng)用,,許多類型的單片機(jī)內(nèi)部已帶有A/D轉(zhuǎn)換電路,但此類單片機(jī)會(huì)比無A/D轉(zhuǎn)換功能的單片機(jī)在價(jià)格上高幾元甚至很多,,本文給大家提供一種實(shí)用的用普通單片機(jī)實(shí)現(xiàn)的A/D轉(zhuǎn)換電路,,它只需要使用普通單片機(jī)的2個(gè)I/O腳與1個(gè)運(yùn)算放大器即可實(shí)現(xiàn),而且它可以很容易地?cái)U(kuò)展成帶有4通道A/D轉(zhuǎn)換功能,,由于它占用資源很少,,成本很低,其A/D轉(zhuǎn)換精度可達(dá)到8位或更高,,因此很具有實(shí)用價(jià)值,。
其電路如圖一所示:
圖一
其工作原理說明如下:
1、硬件說明:
圖一中“RA0”和“RA1”為單片機(jī)的兩個(gè)I/O腳,,分別將其設(shè)置為輸出與輸入狀態(tài),,在進(jìn)行A/D轉(zhuǎn)換時(shí),在程序中通過軟件產(chǎn)生PWM,,由RA0腳送出預(yù)設(shè)占空比的PWM波形,。RA1腳用于檢測比較器輸出端的狀態(tài)。
R1,、C1構(gòu)成濾波電路,,對RA0腳送出的PWM波形進(jìn)行平滑濾波。RA0輸出的PWM波形經(jīng)過R1,、C1濾波并延時(shí)后,,在U1點(diǎn)產(chǎn)生穩(wěn)定的電壓值,其電壓值U1=VDD*D1/(D1+D2),,若單片機(jī)的工作電壓為穩(wěn)定的+5V,,則U1=5V*D1/(D1+D2)。
圖一中的LM324作為比較器使用,,其輸入負(fù)端的U1電壓與輸入正端的模擬量電壓值進(jìn)行比較,,當(dāng)U1大于模擬量輸入電壓時(shí),比較器的輸出端為低電平,,反之為高電平,。
2、A/D轉(zhuǎn)換過程:
如果使RA0輸出PWM波形,,其占空比由小到大逐漸變化,,則U1的電壓會(huì)由小到大逐漸變化,當(dāng)U1電壓超過被測電壓時(shí),比較器的輸出端由高電平變?yōu)榈碗娖?,因此可以認(rèn)為在該變化的瞬間被測的模擬量與U1的電壓相等,。
由于U1的電壓值=VDD*D1/(D1+D2),當(dāng)VDD固定時(shí),,其電壓值取決于PWM波形的占空比,,而PWM的占空比由單片機(jī)軟件內(nèi)部用于控制PWM輸出的寄存器值決定,若軟件中用1個(gè)8位寄存器A來存放RA0輸出的PWM的占空比值D1,,因此在RA1檢測到由“1”變?yōu)?ldquo;0”的瞬間,,A寄存器的值D1即為被測電壓的A/D轉(zhuǎn)換值,其A/D轉(zhuǎn)換結(jié)果為8位,。如果用16位寄存器來作輸出PWM的占空比,,則A/D轉(zhuǎn)換值可達(dá)到16位。
3,、A/D轉(zhuǎn)換誤差分析及解決辦法:
A/D轉(zhuǎn)換的誤差主要由以下幾個(gè)方面決定,,分別說明如下:
(1) 單片機(jī)的電源電壓VDD:在該A/D轉(zhuǎn)換中,,VDD電壓是造成A/D轉(zhuǎn)換誤差的主要原因,,如果使VDD電壓精度做到較高,則A/D轉(zhuǎn)換誤差可以做到很小,,在VDD電壓精度為0.5%情況下,,實(shí)際的A/D轉(zhuǎn)換誤差小于1%。
?。?) 軟件產(chǎn)生的PWM占空比:若用于產(chǎn)生PWM的軟件設(shè)計(jì)不良,,會(huì)使存放占空比的寄存器值與實(shí)際輸出的PWM占空比不一致,這會(huì)導(dǎo)致測量誤差,。
?。?) 比較器輸入端的失調(diào)電壓:該電壓對A/D轉(zhuǎn)換精度有一定影響,但影響較小,。
?。?) RC濾波電路的紋波:在R1、C1取值不當(dāng)?shù)那闆r下,,U1處的電壓紋波較大,,并且延時(shí)時(shí)間不夠,會(huì)使A/D轉(zhuǎn)換產(chǎn)生誤差,,因此R1,、C1取值不能太小,但太大又會(huì)影響A/D轉(zhuǎn)換速度,,推薦使用圖一中所示的R1,、C1參數(shù),,在紋波合理的情況下,其轉(zhuǎn)換誤差也可通過軟件消除,。
A/D轉(zhuǎn)換誤差的解決辦法:
?。?) 對VDD造成的誤差,只能通過提高VDD電壓精度來解決,,它相當(dāng)于A/D轉(zhuǎn)換的基準(zhǔn)電壓。
?。?) 對于軟件中PWM設(shè)計(jì)不良導(dǎo)致的誤差,,可修改軟件進(jìn)行解決,本文提供了用軟件產(chǎn)生PWM的程序流程圖,,實(shí)際使用中可按此流程設(shè)計(jì)程序,。
(3) 對比較器及RC濾波電路的紋波導(dǎo)致的誤差,,在軟件中可通過上,、下檢測法進(jìn)行消除,即先將PWM的占空比由小到大變化,,使U1電壓由低往高逐漸變化,,在比較器輸出端變化時(shí)記錄其A/D轉(zhuǎn)換值,再將PWM的占空比由大到小變化,,使U1電壓由高到低變化,,在比較器輸出端變化時(shí)記錄其A/D轉(zhuǎn)換值,將兩次的A/D轉(zhuǎn)換值進(jìn)行平均,,可有效地消除這兩種誤差,。
(4) 對A/D轉(zhuǎn)換值進(jìn)行數(shù)字濾波,,如多次轉(zhuǎn)換求平均值等,。數(shù)字濾波消除誤差的方法很多,在此不再贅述,。
4,、A/D轉(zhuǎn)換速度及提高辦法:
由于該A/D轉(zhuǎn)換是通過PWM濾波后再進(jìn)行比較來完成的,其PWM的產(chǎn)生與濾波都需要一定的時(shí)間,,因此其A/D轉(zhuǎn)換速度較慢,,適用于對A/D轉(zhuǎn)換速度要求不高的產(chǎn)品中,其A/D轉(zhuǎn)換速度取決于以下幾個(gè)方面:
?。?) 單片機(jī)的運(yùn)行速度:單片機(jī)的運(yùn)行速度越高則PWM的頻率可以越高,, RC值就可以取得越小,其延時(shí)時(shí)間也可以更短,,轉(zhuǎn)換速度就更快,。
(2) 被測電壓值的大小:由于U1電壓時(shí)是由小到大逐漸加大的,,當(dāng)被測電壓值較小時(shí),,U1電壓上升到相應(yīng)值的時(shí)間就越短,完成A/D轉(zhuǎn)換的速度就越快,。
?。?) 初始占空比:初始占空比越高,U1電壓較大,,其上升到被測電壓值的時(shí)間也就會(huì)越短,,完成A/D轉(zhuǎn)換的速度也就越快。
由上所述,,A/D轉(zhuǎn)換的速度可以通過提高單片機(jī)的工作頻率,,并在預(yù)知被測電壓范圍時(shí)盡可能地設(shè)置較高的初始占空比值來加快轉(zhuǎn)換速度,如果所要求的A/D轉(zhuǎn)換精度要求不高,,還可以在軟件中縮短PWM輸出的延時(shí)時(shí)間來提高A/D轉(zhuǎn)換速度,。若單片機(jī)帶有外部電平變換中斷和定時(shí)器中斷,其A/D轉(zhuǎn)換的精度和速度還可以得到提高,。
5,、輸入電壓的測量范圍:
A/D轉(zhuǎn)換的輸入電壓測量范圍為0V至單片機(jī)的電源電壓(VDD),若需要提高被測電壓范圍,,可將輸入電壓通過電阻分壓后進(jìn)行測量,,但其A/D轉(zhuǎn)換的誤差會(huì)受分壓電阻影響。
6,、A/D轉(zhuǎn)換通道的多路擴(kuò)展:
圖中所用的運(yùn)算放大器為LM324,,該集成電路內(nèi)部帶有4個(gè)運(yùn)放,其余3個(gè)運(yùn)放的輸入端可分別作為另外3個(gè)A/D轉(zhuǎn)換通道,,其輸出端與單片機(jī)連接,,在軟件上略作修改,就可以在不增加成本的情況下實(shí)現(xiàn)4路A/D轉(zhuǎn)換,。
7,、用同樣的工作原理實(shí)現(xiàn)D/A轉(zhuǎn)換:
如圖二所示,可使該電路很容易地只用單片機(jī)的一個(gè)I/O腳實(shí)現(xiàn)D/A轉(zhuǎn)換功能,。其輸出的模擬量電壓Vout=VDD*D1/(D1+D2),。該輸出電壓帶有紋波,當(dāng)RC值足夠大時(shí),,該紋波值幾乎為零,,可忽略不計(jì)。
圖二
8,、單片機(jī)的A/D轉(zhuǎn)換軟件程序流程圖: