瑞萨sk-s7g2之旅(3)(HX711的简单移植)

  对于sk-s7g2这块板子,特点是,性能比较好,但是资料比较少。这块板子的资料与例程远比stm32,51等单片机少。但是例程都是人写的,故此,只要我们知道原理便可以写出来。今天我介绍A/D hx711在瑞萨sk-s7g2上的实现方式。对于这个A/D 。简单说HX711是一款专为高精度称重传感器而设计的24位A/D转换器芯片。与同类型其它芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。具体的原理,我将不予以介绍。

对于大多数传感器,我们知道原理以后便可以移植,移植的首要问题便是时序。这是一个难点。移植前我们简单了解一下。这个A/D的时序简单说就是,PD_SCK从低电平变高电平并保持在高电平超过60μs,HX711 即进入断电状态如图8 所示。如使用片内稳压电源电路,断电时,外部传感器和片内A/D 转换器会被同时断电。当PD_SCK 重新回到低电平时,芯片会自动复位后进入正常工作状态。芯片从复位或断电状态进入正常工作状态后,通道A和增益128会被自动选择作为第一次A/D转换的输入通道和增益。搞清楚这个,我们就可以来移植。将具体的功能换为瑞萨的代码。


/********************************************************************
** 文  件  名:HX711驱动程序
** 创  建  人:yk
** 最后修改时间:2018年7月1日
*********************************************************************/


#define HX711DIN_PORT           (IOPORT_PORT_05_PIN_13)//定义引脚
#define HX711SCK_PORT           (IOPORT_PORT_05_PIN_11)
void hx711_init(void)
{  
  	   g_ioport.p_api-> pinDirectionSet(HX711DIN_PORT,IOPORT_DIRECTION_INPUT);
  	   g_ioport.p_api->pinWrite(HX711SCK_PORT, IOPORT_LEVEL_LOW);
       g_ioport.p_api-> pinDirectionSet(HX711SCK_PORT,IOPORT_DIRECTION_OUTPUT);
}
int32_t hx711_read(void)
{
    int mask = 24;                      
    int32_t tmp=0;
    ioport_level_t in;
g_ioport.p_api->pinWrite(HX711SCK_PORT, IOPORT_LEVEL_LOW);
        do
        {
            tmp=tmp<<1;
            g_ioport.p_api->pinWrite(HX711SCK_PORT, IOPORT_LEVEL_HIGH);
            g_ioport.p_api->pinRead(HX711DIN_PORT,&in);
                    if(in)tmp+=1;
            mask-=1;
            g_ioport.p_api->pinWrite(HX711SCK_PORT, IOPORT_LEVEL_LOW);

        }
        while(mask);
        g_ioport.p_api->pinWrite(HX711SCK_PORT, IOPORT_LEVEL_HIGH);
        g_ioport.p_api->pinWrite(HX711SCK_PORT, IOPORT_LEVEL_LOW);
        tmp = (tmp & 0x800000ul)?(tmp | 0xff000000ul):tmp;
        tmp=(tmp+108563)/1654;
        return tmp;
}

可以直接用,但是具体的设备,需要校准公式,暂时没有研究万能公式,移植之后经过简单的数据处理便可以直接使用。已通过测试

发布了29 篇原创文章 · 获赞 24 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/yyk219/article/details/81635101