|
1.與TM7711連接的單片機(jī)需要的外設(shè)資源,兩個(gè)普通IO口,一個(gè)輸入(推薦浮空輸入),一個(gè)輸出。
對(duì)于TM7711模塊,其中DT(Dout),用于向外傳輸數(shù)據(jù),也就是數(shù)據(jù)線,方向?qū)ν猓黄渲蠸CK(PD_SCK)是輸入外部時(shí)鐘的,也就是時(shí)鐘線。
所以,對(duì)于單片機(jī),需要一個(gè)輸入IO口,讀取Dout的數(shù)據(jù);需要一個(gè)輸出IO口,發(fā)送時(shí)鐘信號(hào)(方波),輸出給TM7711模塊。
2.串口時(shí)序
想要正確使用這個(gè)串口需要讀時(shí)序圖,如圖所示:
對(duì)于單片機(jī)來(lái)說(shuō),與Dout連接的輸入IO口,電平從高變成低電平,說(shuō)明TM7711準(zhǔn)備好了,可以發(fā)送數(shù)據(jù)了。
這個(gè)時(shí)候,與PD_SCK連接的輸出IO口,開始發(fā)送方波(時(shí)鐘),每個(gè)方波讀取一位數(shù)據(jù),數(shù)據(jù)總共24位。
圖上有三個(gè)PD_SCK的時(shí)序圖,是用于選擇下一次不同的通道和增益用的,所以這個(gè)模塊可以同時(shí)采集兩路惠斯通電橋的值。按照實(shí)際情況,選擇一種或者兩種的組合。所以單片機(jī)最少要發(fā)25個(gè)脈沖,前24個(gè)用于讀取這次的AD轉(zhuǎn)換數(shù)據(jù),最后一個(gè)用于選擇下一次的通道和增益。
注意:其實(shí)關(guān)鍵的就是那幾個(gè)T1,2,3,4的時(shí)間要求,不能低于也不能超時(shí),否則都不能得到正確結(jié)果
51hei截圖_20190904101313.png (48.41 KB, 下載次數(shù): 110)
下載附件
2019-9-4 10:13 上傳
51hei截圖_20190904095706.png (133.08 KB, 下載次數(shù): 103)
下載附件
2019-9-4 10:11 上傳
(2)讀取采樣值
TM7711模塊的串口輸出數(shù)據(jù)為24位的轉(zhuǎn)換值數(shù)據(jù)。
代碼如下,count為讀取到的值,通過移位,一位一位讀取;
首先,將單片機(jī)輸出口變成低電平,如果高電平達(dá)到一定時(shí)間會(huì)復(fù)位TM7711模塊的,所以平時(shí)一定將輸出口電平置為低;
然后就是等待單片機(jī)輸入口的電平變低,為了防止硬件出錯(cuò),在這里設(shè)置了超時(shí)時(shí)間,實(shí)際效果大概1s,過了1s直接跳出循環(huán),
避免一直等待,同時(shí)超時(shí)跳出時(shí)的AD值非常大,容易排除它;然后就加了一個(gè)誤觸發(fā)消除,用的延時(shí)的方法。
然后就進(jìn)入讀取AD轉(zhuǎn)換值了,先將單片機(jī)輸出口電平變高,延時(shí)一定時(shí)間,然后變低,然后讀入輸入口的電平狀態(tài),寫入count.
最后,循環(huán)24次后,發(fā)最后一個(gè)脈沖,說(shuō)明下一次AD轉(zhuǎn)換為差分輸入10hz,128增益。與0x800000異或是因?yàn)闉榱伺懦?fù)。
到這里,AD轉(zhuǎn)換后的值就讀取了.
sbit PIN_Set_Sck =P2^6;
sbit PIN_DOUT =P2^7
void Set_Sck_L()
{
PIN_Set_Sck=0;
}
void Set_Sck_H()
{
PIN_Set_Sck=1;
}
void delay_us2(int value)
{
int i;
for(i=value;i>0;i--);
}
unsigned long HX711_Read(void) //增益128
{
unsigned long count;
unsigned char i;
int ii=0;
Set_Sck_L();//模塊沒準(zhǔn)備好時(shí),單片機(jī)在CLK線上輸出低電平
count=0;
while(1)
{
if(PIN_DOUT==0)
{
delay_us2(1); //消抖
if(PIN_DOUT==0) //檢測(cè)數(shù)據(jù)口,電壓有沒有變低,如果變低,才開始收數(shù)據(jù)。
{
break;
}
}
ii++;
if(ii>=1000000) //如果數(shù)據(jù)口沒有變低,計(jì)數(shù)1S后,退出循環(huán)。
{
break;
}
}
delay_us2(1);
for(i=0;i<24;i++)
{
Set_Sck_H(); //SCK拉高
delay_us2(5); //延時(shí)1微秒
count=count<<1; //將數(shù)據(jù)左移
Set_Sck_L(); //SCK拉低
if(PIN_DOUT==1)//讀入數(shù)據(jù)
count++;
}
Set_Sck_H();
delay_us2(2);
count=count^0x800000;//第25個(gè)脈沖下降沿來(lái)時(shí),轉(zhuǎn)換數(shù)據(jù)
Set_Sck_L();
return count;
}
TM7711是一款24位的模數(shù)轉(zhuǎn)換器,最高位是符號(hào)位,其余為有效位,數(shù)據(jù)編碼格式為二進(jìn)制補(bǔ)碼。
輸出數(shù)據(jù)最小值【0x800000】,最大值【0x7FFFFF】。(往往我們讀到的數(shù)據(jù)可能不符合這個(gè)范圍,這和我們的硬件連接,還有AIN+和AIN-的電壓差分信號(hào)有關(guān),仔細(xì)分析數(shù)據(jù)會(huì)有更有意思的發(fā)現(xiàn))
AIN+(Input positive A)A端口正極輸入,AIN-(Input negative A)A 端口負(fù)極輸入。
本文實(shí)測(cè)數(shù)據(jù)使用的TM7711的A端口,128增益,即滿額度差分輸入信號(hào)幅值為±20mv,為了簡(jiǎn)單說(shuō)明,只觀察前12位數(shù)據(jù)。(首先說(shuō)明一下,AIN-和AIN+不要接反,隨著重量的增加AIN+端電壓正向增長(zhǎng),AIN-端電壓反向增長(zhǎng))
|
評(píng)分
-
查看全部評(píng)分
|