我用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);
}
|