完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
用STM32单片机写程序驱动hx711,无论传感器上是否放重物,输出的AD值一直在增加,我用的是单片机内部时钟,配置为8MHz,程序如下:
uint32_t HX711_Read(void) //读HX711芯片输出的数据。 { uint32_t val = 0; uint8_t i = 0; GPIO_SetBits(GPIOA,ADDO); //DOUT=1 GPIO_ResetBits(GPIOA,ADSK); //SCK=0 while(GPIO_ReadInputDataBit(GPIOA,ADDO)); //等待DOUT=0 delay_us(1); for(i=0;i<24;i++) { GPIO_SetBits(GPIOA,ADSK); //SCK=1 val=val<<1; delay_us(1); GPIO_ResetBits(GPIOA,ADSK); //SCK=0 if(GPIO_ReadInputDataBit(GPIOA,ADDO)) val++; //DOUT=1 delay_us(1); } GPIO_SetBits(GPIOA,ADSK);//25次脉冲 val = val^0x800000; delay_us(1); GPIO_ResetBits(GPIOA,ADSK); delay_us(1); return val; } |
|
相关推荐
5个回答
|
|
|
你的驱动有问题,读取没问题
最佳答案
|
|
|
|
|
|
这个一直在增加是i什么么意思?
|
|
|
|
|
|
我就用了一个滑动滤波函数,得到的Huadong_filter()直接用于计算重量了,读取滤波后的ad值就是一直增加,程序如下:
void Huadong_BUFInit(void) { uint8_t j; for(j=0;j BUF[j] = HX711_Read(); SUM+=BUF[j]; } } long double Huadong_filter(void) //滑动均值滤波法的函数。 { uint32_t temp=0,max=0,min=0; uint8_t j; temp = HX711_Read(); SUM = SUM+temp-BUF[M];//添加一个最新值,去掉一个最老值 BUF[M]=temp;//将最老值替换成最新值 M++; if(M == N) { M=0; } max=BUF[0]; min=BUF[0]; for(j=0;j if(max max=BUF[j];//找出当前数组中的最大值 } if(min>BUF[j]) { min=BUF[j];//找出当前数组中的最小值 } } return (SUM-max-min)/(N-2); } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
2810 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
2420 浏览 1 评论
stm32用fsmc读取ad7606采集数据,数据不变,只有开发版复位才更新数据
2288 浏览 0 评论
2404 浏览 1 评论
1643 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 13:46 , Processed in 0.913271 second(s), Total 83, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1958