關(guān)于HCS12(X)單片機AD的深層次的一些東西
關(guān)于AD,一直有人問一些東西,應(yīng)該是屬于AD比較深的東西,答應(yīng)總結(jié)一個貼子.
大部分來自中電網(wǎng)陳剛版主的精典問答,如果要用加速度傳感器,請看完下面的,如果想用好多路AD轉(zhuǎn)換請看完下面的.
一般小車可能不需要,因為一般用的是單次轉(zhuǎn)換單通道無FIFO模式.
1為什么要多次轉(zhuǎn)換?
ATD模塊有8個結(jié)果寄存器,所以它的AD轉(zhuǎn)換有這樣的功能,就是對一個或多個通道連續(xù)進行轉(zhuǎn)換,將結(jié)果順序放入這8個結(jié)果寄存器中。這樣用戶如果要取一個通道的平均值,或取多個通道的值,都很方便了,就不用軟件一次一次地去轉(zhuǎn)換了
2 ATDCTL3 那個S8C、S4C等決定的轉(zhuǎn)換序列長度是什么意思?
ATDCTL3中的S8C~S1C決定了一個轉(zhuǎn)換序列的長度,即一個轉(zhuǎn)換序列共轉(zhuǎn)換多少次。你可以選擇做一次AD轉(zhuǎn)換的過程,是對一個通道連續(xù)轉(zhuǎn)換多次,還是對多個通道連續(xù)進行轉(zhuǎn)換,這由ATDCLT5的MULT位決定。
3 如果選擇了多通道,MULT=1,那么CC、CB、CA、只是控制第一個轉(zhuǎn)換的通道那么我就沒有找到該如何制定具體由哪幾個通道轉(zhuǎn)換的控制字。。。比如光要0、1、3三個通道轉(zhuǎn)換。。。難道本身轉(zhuǎn)換就是8個通道全部轉(zhuǎn)一遍的?
S8C~S1C就控制每輪進行多少次轉(zhuǎn)換,最多為8。比如可以選擇為6,那么每6次轉(zhuǎn)換稱為一個序列。 如果選擇了多通道轉(zhuǎn)換,那么CC、CB和CA選擇首個轉(zhuǎn)換的通道,后面的通道按通道號排列。比如S8C~S1C選擇轉(zhuǎn)換數(shù)為6,MULT設(shè)為1,而CC、CB和CA選擇通道4,那么轉(zhuǎn)換開始后,AD模塊將按通道4、通道5、通道6、通道7、通道0、通道1的順序依次進行轉(zhuǎn)換,并將轉(zhuǎn)換結(jié)果依次放入6個結(jié)果寄存器中。要注意并不能間隔選擇通道。
4 在HC12系列單片機中,當控制寄存器5中S8CM=0(即一個轉(zhuǎn)換序列轉(zhuǎn)4次),MULT=0(即單通道轉(zhuǎn)換)時,是在一個轉(zhuǎn)換序列中對一個通道連續(xù)轉(zhuǎn)換四次;而在S12系列中,當轉(zhuǎn)換序列長度設(shè)置為1,MULT=0時,每進行一個序列的轉(zhuǎn)換是對該通道轉(zhuǎn)換一次,還是轉(zhuǎn)換四次?
在S12系列中,當轉(zhuǎn)換序列長度設(shè)置為1(S8C:S1C=0001),MULT=0時,只對一個通道進行一次轉(zhuǎn)換。
5 關(guān)于控制寄存器ATD0CTL3中FIFO的使用
假定要轉(zhuǎn)換的序列為3,即通道3、4、5,轉(zhuǎn)換模式為連續(xù)轉(zhuǎn)換(SCAN=1)
(1)當FIFO=0時,轉(zhuǎn)換結(jié)果是存儲在ATD0DR0-ATD0DR2中,還是存儲在ATD0DR3-ATD0DR5中?
當一個序列轉(zhuǎn)換結(jié)束后,下一個轉(zhuǎn)換序列的結(jié)果還是存儲在這幾個對應(yīng)寄存器中,對嗎?
(2)當FIFO=1時,轉(zhuǎn)換結(jié)果是存儲在ATD0DR0-ATD0DR2中,還是存儲在ATD0DR3-ATD0DR5中?
當一個序列轉(zhuǎn)換結(jié)束后,下一個轉(zhuǎn)換序列的結(jié)果是存儲在緊接其后的幾個對應(yīng)寄存器中,循環(huán)存儲(即存儲到ATD0DR7后,返回ATD0DR0,在從ATD0DR0-ATD0DR7存儲),對嗎?
假定要轉(zhuǎn)換的序列為3,即通道3、4、5,轉(zhuǎn)換模式為連續(xù)轉(zhuǎn)換(SCAN=1)
(1)當FIFO=0時,轉(zhuǎn)換結(jié)果是存儲在ATD0DR0-ATD0DR2中;當一個序列轉(zhuǎn)換結(jié)束后,下一個轉(zhuǎn)換序列的結(jié)果還是存儲在這幾個對應(yīng)寄存器中。
(2)當FIFO=1時,第一次轉(zhuǎn)換結(jié)果存儲在ATD0DR0-ATD0DR2中;當一個序列轉(zhuǎn)換結(jié)束后,下一個轉(zhuǎn)換序列的結(jié)果是存儲在緊接其后的幾個對應(yīng)寄存器中,循環(huán)存儲(即存儲到ATD0DR7后,返回ATD0DR0,再從ATD0DR0-ATD0DR7存儲)。
6 通道轉(zhuǎn)換是不是通過設(shè)置這二個寄存器,ATDCTRL3中轉(zhuǎn)換序列的長度來采集設(shè)置需要的通道數(shù).還有ATDCTRL5中的MULT來設(shè)置啟動多通道轉(zhuǎn)換?
是的,ATDCTRL5設(shè)置成多通道轉(zhuǎn)換后,ATDCTRL3設(shè)置采集的通道數(shù),此外ATDCTRL5中還需要設(shè)置多通道采集的起始通道。比如采集7個通道,起始通道是1,那么就采集從1-7通道,如果起始通道是2,就采集2-7,還有0通道。
7 多通道轉(zhuǎn)換應(yīng)該是同時進行的吧?各個通道的轉(zhuǎn)換結(jié)果分別放在哪個數(shù)據(jù)寄存器(這一點我非常困惑)?
多通道轉(zhuǎn)換也不是同時的,可以看AD的系統(tǒng)框圖,只有一個采樣保持電路,前面通過8通道選擇器來選擇通道,所以不能同時,只是多通道一次采集過程可以連續(xù)連續(xù)采集多個通道。每個通道的結(jié)果都保存在各自的結(jié)果寄存器reslut registers中
8 MC9SDg128上面有16個AD通道,而寄存器上好像只能啟動8個通道吧?另外8個通道該如何使用?
DG128是兩個8通道的AD,看dg128的數(shù)據(jù)手冊總的memory map,AD0的寄存器在基址的$0080-$009F 32個字節(jié)的地方, AD1的寄存器在基址的$0120-$013F 32個字節(jié)的地方。
評論