|
我用hx711做ad轉(zhuǎn)換,四個(gè)半橋50kg的連接成全橋,主ic用的GD32F330,引腳配置和具體讀ad代碼我放下面
單片機(jī)源程序如下:
unsigned long HX711_Read(void) //選擇芯片工作方式并進(jìn)行數(shù)據(jù)讀取
{
unsigned long count; ///儲(chǔ)存輸出值
unsigned char i;
// high--高電平 1 low--低電平 0
gpio_bit_set(GPIOA, GPIO_PIN_2); //digitalWrite作用: DT=1;
delay_us(1); //延時(shí) 1微秒
gpio_bit_reset(GPIOA, GPIO_PIN_3); //digitalWrite作用: SCK=0;
delay_us(1); //延時(shí) 1微秒
count=0;
while(gpio_output_bit_get(GPIOA, GPIO_PIN_3)); //當(dāng)DT的值為1時(shí),開始ad轉(zhuǎn)換
for(i=0;i<24;i++) ///24個(gè)脈沖,對(duì)應(yīng)讀取24位數(shù)值
{
gpio_bit_set(GPIOA, GPIO_PIN_3); //digitalWrite作用: SCK=0;
/// 利用 SCK從0--1 ,發(fā)送一次脈沖,讀取數(shù)值
delay_us(1); //延時(shí) 1微秒
count=count<<1; ///用于移位存儲(chǔ)24位二進(jìn)制數(shù)值
gpio_bit_reset(GPIOA, GPIO_PIN_3); //digitalWrite作用: SCK=0;為下次脈沖做準(zhǔn)備
delay_us(1);
if(gpio_output_bit_get(GPIOA, GPIO_PIN_3)) ///若DT值為1,對(duì)應(yīng)count輸出值也為1
count++;
}
gpio_bit_set(GPIOA, GPIO_PIN_3); ///再來一次上升沿 選擇工作方式 128增益
count ^= 0x800000; //按位異或 不同則為1 0^0=0; 1^0=1;
///對(duì)應(yīng)二進(jìn)制 1000 0000 0000 0000 0000 0000 作用為將最高位取反,其他位保留原值
delay_us(1);
gpio_bit_reset(GPIOA, GPIO_PIN_3); /// SCK=0;
delay_us(1); //延時(shí) 1微秒
return(count); ///返回傳感器讀取值
}
PA2是DT腳 PA3是SCK
void gpio_config(void)
{
rcu_periph_clock_enable(RCU_GPIOA);
gpio_af_set(GPIOA, GPIO_AF_0, GPIO_PIN_2);
gpio_af_set(GPIOA, GPIO_AF_0, GPIO_PIN_3);
gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE,GPIO_PIN_2);
gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_3);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_3);
gpio_bit_set(GPIOA, GPIO_PIN_3);
}
|
|