打印
[应用方案]

NV32F100FD401驱动HX711模块

[复制链接]
12050|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lerbang|  楼主 | 2018-6-30 20:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lerbang 于 2018-6-30 20:57 编辑

HX711模块是24位AD转换模块,下面是由NV32F100FD401驱动HX711模块的程序。
/****************************************************************
2018年3月2日
文件名:main.c(FD40HX711A1.c)
****************************************************************/
#include "common.h"
#include "gpio.h"
#include "sysinit.h"
#include "start.h"
#include "TM1638.h"
#include "HX711.h"

void gpio_Init(void);
u32 get_weight(void);
int main(void)
{

        u32 b;
        sysinit();
        cpu_identify();               
        gpio_Init();
        GPIO_PinSet(GPIO_PTE7); //PTE7 置 1
        init_TM1638();
        Display(12045608);
        Delayms(2000);

        LedDisplay(10,11,12,13,14,15,16,17,0x02,0xff);  
        Delayms(2000);

        LedDisplay(18,19,20,21,22,23,24,25,0xff,0xff);  


        while(1)
        {
           /******************************************
           HX711 AD转换并通过Display(b)在数码管显示
           *******************************************/


           b=0;              
           b=get_weight();//读取AD 输出数据,赋值给b                  
           Display(b);
           Delayms(2000);
            
        }
}




u32 get_weight(void)
{
    u32 sum=0;
    u32 a;
    u8 count=0;

    for(count=0;count<6;count++)
        {
         a=0;
         a=ReadCount();
         a=a^0x800000;
         a=a>>8;
         sum+=a;
        }
    a=0;
    a=sum/5;
    return a;
}





void gpio_Init(void)
{

        GPIO_Init(GPIOA, GPIO_PTA0_MASK, GPIO_PinOutput);    // TM1638_DIO P26
        GPIO_Init(GPIOA, GPIO_PTA1_MASK, GPIO_PinOutput);   // TM1638_CLK  P25
        GPIO_Init(GPIOB, GPIO_PTH2_MASK, GPIO_PinOutput);   // TM1638_STB  P39
        GPIO_Init(GPIOB, GPIO_PTE7_MASK, GPIO_PinOutput);   //FMQ          P38

        GPIO_Init(GPIOA, GPIO_PTC3_MASK, GPIO_PinOutput);   //HX711_SCK    P7
        GPIO_Init(GPIOA, GPIO_PTC2_MASK, GPIO_PinInput);   //HX711_DIO    P8
}



/****************************************************************************************
程序运行。显示12045608和相关字母。
即运行了以下程序:
Display(12045608);
        Delayms(2000);

        LedDisplay(10,11,12,13,14,15,16,17,0x02,0xff);  
        Delayms(2000);

        LedDisplay(18,19,20,21,22,23,24,25,0xff,0xff);  
既时显示HX711的AD转换值。

****************************************************************************************/

/*********************************************************************
*文件名:HX711.c
*日  期:2018年3月2日
*功  能:HX711的AD转换驱动与NV32FD40芯片
********************************************************************/
#include "gpio.h"
#include"TM1638.h"
#include "HX711.h"


u32 ReadCount(void) //AD 驱动程序
{
u32 Count;
u8 i;


HX711_SCK_L; //使能AD(HX711_SCK 置低)
Count=0;
while(GPIO_BitRead(GPIO_PTC2)); //AD 转换未结束则等待,否则开始读取。起了同步作用。
Delayus(10);
  for (i=0;i<24;i++) //24 位时钟脉冲从最高位到最低位逐位输出
  {
  HX711_SCK_H; //HX711_SCK 置高(发送脉冲)

  Count=Count<<1; //下降沿来时变量Count 左移一位,右侧补零
  Delayus(10);
  HX711_SCK_L; //HX711_SCK; 置低

  if(GPIO_BitRead(GPIO_PTC2)) Count++;//当数据输出为高电平,Count 加1
  Delayus(10);
  }
  HX711_SCK_H; //第25 个脉冲到来
  Count=Count^0x800000;
//  Delayus(10);   //延长一个机器周期
  HX711_SCK_L; //第25 个脉冲结束
  Delayus(10);
  return Count; //输出Count

}

/*********************************************************************
*文件名:HX711.h
*日  期:2018年3月1日
*功  能:HX711与NV32FD40芯片连接的相关设置
*********************************************************************/

#ifndef        _HX711_H_
#define        _HX711_H_
#include "gpio.h"
#include <stdio.h>


//HX711的IO口操作函数





#define        HX711_SCK_H    GPIO_PinSet(GPIO_PTC3)        //HX711_SCK 置1。
#define        HX711_SCK_L    GPIO_PinClear(GPIO_PTC3)      //HX711_SCK 置0。

u32 ReadCount(void);

#endif

附工程文件
FD40HX711A.rar (1.58 MB)


               
         












相关帖子

沙发
xyz549040622| | 2018-6-30 22:13 | 只看该作者
NV32FD40芯片,这是个什么芯片?

使用特权

评论回复
板凳
lerbang|  楼主 | 2018-7-3 08:58 | 只看该作者
xyz549040622 发表于 2018-6-30 22:13
NV32FD40芯片,这是个什么芯片?

NV32F100FD401是DIP40封装。

使用特权

评论回复
地板
xyz549040622| | 2018-7-3 14:56 | 只看该作者
lerbang 发表于 2018-7-3 08:58
NV32F100FD401是DIP40封装。

省略了几个字。。。我说么。。

使用特权

评论回复
5
renzheshengui| | 2018-7-7 15:56 | 只看该作者
24位的 好厉害 难道是专门ad转换的芯片吗

使用特权

评论回复
6
lerbang|  楼主 | 2018-7-7 21:20 | 只看该作者
renzheshengui 发表于 2018-7-7 15:56
24位的 好厉害 难道是专门ad转换的芯片吗

是的。

使用特权

评论回复
7
wowu| | 2018-7-9 21:40 | 只看该作者
这个转换前需要校准吗

使用特权

评论回复
8
lerbang|  楼主 | 2018-7-10 10:06 | 只看该作者
wowu 发表于 2018-7-9 21:40
这个转换前需要校准吗

转换前无须校准,转换后的数据通过校准程序用法码校准。

使用特权

评论回复
9
123ycli| | 2018-7-22 22:55 | 只看该作者
renzheshengui 发表于 2018-7-7 15:56
24位的 好厉害 难道是专门ad转换的芯片吗

这个HX711的精度没想象的那么高,和TI 20位的精度差不多,就是价格比较便宜。

使用特权

评论回复
10
renzheshengui| | 2018-7-23 12:04 | 只看该作者
123ycli 发表于 2018-7-22 22:55
这个HX711的精度没想象的那么高,和TI 20位的精度差不多,就是价格比较便宜。 ...

那有效位能有几位呢

使用特权

评论回复
11
lerbang|  楼主 | 2018-7-31 10:24 | 只看该作者
123ycli 发表于 2018-7-22 22:55
这个HX711的精度没想象的那么高,和TI 20位的精度差不多,就是价格比较便宜。 ...

是的,HX711与TI的ADS1231相似,但精度和温漂不如ADS1231.

使用特权

评论回复
12
binxj2017| | 2020-10-21 09:10 | 只看该作者
你好,请教一下,读出来的AD值怎么换算出物体重量的呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

28

帖子

1

粉丝