我用hx711做ad轉換,四個半橋50kg的連接成全橋,主ic用的GD32F330,引腳配置和具體讀ad代碼我放下面
單片機源程序如下:
unsigned long HX711_Read(void) //選擇芯片工作方式并進行數據讀取
{
unsigned long count; ///儲存輸出值
unsigned char i;
// high--高電平 1 low--低電平 0
gpio_bit_set(GPIOA, GPIO_PIN_2); //digitalWrite作用: DT=1;
delay_us(1); //延時 1微秒
gpio_bit_reset(GPIOA, GPIO_PIN_3); //digitalWrite作用: SCK=0;
delay_us(1); //延時 1微秒
count=0;
while(gpio_output_bit_get(GPIOA, GPIO_PIN_3)); //當DT的值為1時,開始ad轉換
for(i=0;i<24;i++) ///24個脈沖,對應讀取24位數值
{
gpio_bit_set(GPIOA, GPIO_PIN_3); //digitalWrite作用: SCK=0;
/// 利用 SCK從0--1 ,發送一次脈沖,讀取數值
delay_us(1); //延時 1微秒
count=count<<1; ///用于移位存儲24位二進制數值
gpio_bit_reset(GPIOA, GPIO_PIN_3); //digitalWrite作用: SCK=0;為下次脈沖做準備
delay_us(1);
if(gpio_output_bit_get(GPIOA, GPIO_PIN_3)) ///若DT值為1,對應count輸出值也為1
count++;
}
gpio_bit_set(GPIOA, GPIO_PIN_3); ///再來一次上升沿 選擇工作方式 128增益
count ^= 0x800000; //按位異或 不同則為1 0^0=0; 1^0=1;
///對應二進制 1000 0000 0000 0000 0000 0000 作用為將最高位取反,其他位保留原值
delay_us(1);
gpio_bit_reset(GPIOA, GPIO_PIN_3); /// SCK=0;
delay_us(1); //延時 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);
}
|