stm32F407控制器在驱动电机等执行机构时,ADS1256采集模块出现死机现象,问题待解决
原代码段
#define WaitDRDY while((GPIO_ReadInputDataBit(GPIO_ADS1256DRDY_PORT,GPIO_ADS1256DRDY))){;}
//一旦ADS1256出现死机,会出现DRDY低电平高不到,从而陷入死循环。建议更改下面的有限循环代码段
void WaitDRDY_Process(void)
{
while((GPIO_ReadInputDataBit(GPIO_ADS1256DRDY_PORT,GPIO_ADS1256DRDY)))
{
WaitDRDYcount++;
if(WaitDRDYcount>0xfdd)
{
WaitDRDYcount=0;
break;
}
}
WaitDRDYcount=0;
}
读取ADS1256某一通道数据代码
long double tRDATA(unsigned char channel)
{
static u32 stsum=0,ch;
ch=((channel << 4) | ADS1256_MUXN_AINCOM);
stsum=0;
CS_ADS1256;//片选
//WaitDRDY;//用下面代码代替
WaitDRDY_Process();
ADS1256WREG(ADS1256_MUX,ch);//通道选择
ADS1256_Delay_us(5);
ADS1256WCMD(ADS1256_CMD_SYNC); //0xfc 心跳
ADS1256_Delay_us(5);
ADS1256WCMD(ADS1256_CMD_WAKEUP); //0x00 唤醒
stsum=ADS1256ReadData();
ADS1256_Delay_us(10);
deCS_ADS1256;
return int_longdouble(stsum);
}
问题:
ADS1256在控制器驱动执行机构时,可能会引入有线传导干扰,出现 WaitDRDY 或 WaitDRDY_Process(void) 读取不到高电平,导致进入死循环。
从而导致ADS1256读取到的数据为异常值,全111111111/22222222、fffffffff之类的。
分析: WaitDRDY 或 WaitDRDY_Process(void) 读取不到高电平,说明此时ADS1256数据不可用。读出来的数据非常大是正常的。
此时应该中止继续读取ADS1256的值,直接return跳出。
建议 程序更改:
u8 WaitDRDY_Process(void)
{
while((GPIO_ReadInputDataBit(GPIO_ADS1256DRDY_PORT,GPIO_ADS1256DRDY)))
{
WaitDRDYcount++;
if(WaitDRDYcount>0xfdd)
{
WaitDRDYcount=0;
return 1;
}
}
WaitDRDYcount=0;
return 0;
}
long double tRDATA(unsigned char channel)
{
static u32 stsum=0,ch;
u8 ret=0;
ch=((channel << 4) | ADS1256_MUXN_AINCOM);
stsum=0;
CS_ADS1256;
//WaitDRDY;
ret=WaitDRDY_Process();//读取不到低电平,直接返回1,否则返回0
if(ret)
{
deCS_ADS1256;
return;
}
else
{
ADS1256WREG(ADS1256_MUX,ch);
ADS1256_Delay_us(5);
ADS1256WCMD(ADS1256_CMD_SYNC); //0xfc
ADS1256_Delay_us(5);
ADS1256WCMD(ADS1256_CMD_WAKEUP); //0x00
stsum=ADS1256ReadData();
ADS1256_Delay_us(10);
deCS_ADS1256;
return int_longdouble(stsum);
}
}
stm32F407控制器在驱动电机等执行机构时,ADS1256采集模块出现死机现象,问题待解决相关推荐
- RT-Thread:在dfs中使用cat、cp等命令时拔掉U盘死机问题
一.问题现象 1.使用ls.cp.mv.cat.rm.mkdir.echo命令操作文件未结束之前拔掉U盘,自己写的自动卸载U盘程序会出现死机现象. 二.问题原因 1.每次进行文件操作需要用到互斥锁的, ...
- 解决电脑一休眠时就黑屏死机
一般在Appdata下存储着用户使用电脑留下的信息,我在减轻C盘存储压力时,就主要减少该目录下的不需要的东西,可是不小心删除了某个文件,导致电脑一进入休眠状态就死机,可以用以下方法解决. 先进入BIO ...
- 计算机硬盘磁道损坏有什么症状,计算机硬盘扇区损坏,读取数据时出现死机现象的解决方法...
长时间使用计算机硬盘时,许多用户遇到了坏扇区,这将大大降低硬盘的使用寿命. 读取坏扇区数据时,在严重的情况下会冻结甚至崩溃. 如果计算机的硬盘上有坏道,则必须修复逻辑坏道. 如何修复计算机硬盘上的坏道 ...
- 服务器一拷贝文件就死机,u盘拷贝文件时导致电脑死机怎么办【解决方法】
使用u盘存储.拷贝文件在我们的日常工作生活中已是很常用的移动存储设备,而随着技术的发展,大容量u盘也随之而来,而使用 u盘拷贝文件导致死机 也是我们会遇到的问题,那么遇到这种 u盘导致电脑死机 的问题 ...
- 调试: Rose逆向工程时死机.
google key words: "rose" "逆向" "死机" 现象描述: 工程完成了,现在要写文档, 准备先用Rose2003逆向生 ...
- 分区的时候 计算机管理未响应,解决使用PartitionMagic调整硬盘分区时电脑死机的方法...
解决使用PartitionMagic调整硬盘分区时电脑死机的方法 如何解决使用PartitionMagic调整硬盘分区时电脑死机呢?有什么解决方法呢?下面十二个步骤就是在进行"易我分区表医生 ...
- thinkphp的控制器包含在Url中时注意区分大小写
thinkphp的控制器包含在Url中时要区分大小写. 转载于:https://www.cnblogs.com/npk19195global/p/4531961.html
- abb机器人指令手册_ABB机器人控制器死机故障维修
ABB机器人控制器死机故障维修描述:今天早上刚到公司,就接到日照客户电话其生产使用的ABB机器人IRC5控制器出现了死机故障,其主要的故障现象是没有指示灯亮起而且无法进行任何的操作,控制器死机直接导致 ...
- shiro和Spring整合使用注解时没有执行realm的doGetAuthorizationInfo回调方法的解决
shiro和Spring整合使用注解时没有执行realm的doGetAuthorizationInfo回调方法的解决 from :http://blog.csdn.net/babys/article/ ...
- ad hoc是什么的简称_签名后的App安装时出现安装失败是什么原因?如何解决?
相信了解过ios签名的朋友都知道,ios签名可以对App添加信任,使其能够绕过App Store的审核直接安装到ios设备上.但是有时我们在使用过程中会发现,签名后的App在安装时会出现安装失败的情况 ...
最新文章
- 如何去除C#Strings中的空格?
- 低版本eclipse导入高版本eclipse创建项目报错问题
- 工作172:自己工作开始封装的一个小组件
- LeetCode 1498. 满足条件的子序列数目(排序+二分查找+快速幂)
- C#.net实现密码加密算法的语句
- java excel 电话号码_数值或者电话号码被EXCEL转成了科学计数法,用XSSFCell 如何读取...
- Java 读取Oracle数据库中的Date日期型怎么去掉秒后面的0
- 给 Python 添加进度条 | 给小白的 tqdm 精炼实例!
- Qos拥塞避免原理与实验
- apk反编译 Android apktool下载 dex2jar下载 jd-gui下载
- vue 定位所在地_记录 vue 实现Web端的定位功能 获取经纬度
- 约束,修改表结构,添加删除约束
- Python中用于身份证验证的库函数
- YOLOX代码 loss计算过程 详细注释版
- 香橙派 One Plus 像单片机一样硬件寄存器 控制GPIO 点灯
- 在网上看到一篇很让人心水的三行情书,由此引发的种种
- python中iter_深入了解Python iter() 方法的用法
- Dev-C++5.11游戏创作之火柴人跑酷
- matlab出图时汉字都变成方框,linux下Matlab 2020中文字体方框问题解决方法
- 通过编程求解炉石传说酒馆战旗最佳血量和攻击力分配方式