底层与上层函数的混用存在的问题

描述

项目需求:利用PWM产生加热信号,需要在PWM低信号时采集AD值

代码实现部分:

#define heat_det1_open GPIO_SetBits(GPIOB,GPIO_Pin_12)     //引脚PB12打开
#define heat_det1_close GPIO_ResetBits(GPIOB,GPIO_Pin_12)     //引脚PB12关闭
#define heat_det2_open GPIO_SetBits(GPIOB,GPIO_Pin_13)   //引脚PB13打开
#define heat_det2_close GPIO_ResetBits(GPIOB,GPIO_Pin_13)  //引脚PB13关闭
/******************************************************************************
* 负 责 人 : ***

* 函数功能 :控制PB12,PB13开启与关闭进行采集

******************************************************************************/
void heat_std_en()
{
    heat_det1_open;
    heat_det2_open;
}
void heat_std_disen()
{
    heat_det1_close;
    heat_det2_close;
}
/******************************************************************************
* 负 责 人 : ***


******************************************************************************/
double get_Pt_res()
{
    heat_std_en();  //使能det1与det2
    delay_us(5300); //防电压抖动延时
    get_val.ad1 = pm_get_adc(AD1Chn);
    delay_us(50);
    get_val.ad2 = pm_get_adc(AD2Chn);
    delay_us(50);
    get_val.ad3 = pm_get_adc(AD3Chn);
    delay_us(50);

测试发现,这里牵扯到一个问题,底层的函数调用和上层逻辑代码互用,而且存在 一个误区,ad采集的时间与ad采样以及时间延时的时间误差,加上本身跑的是裸机跑的系统,系统函数 调用过程产生的时间差导致函数在ad采集过程中达不到想要的采集效果,双线程同样给存在调度问题,因此双线程(1个产生PWM,1个用来检测引脚高低电平采集)这种方法在调度上和时间上存在误差。

解决方案:

重新开启一个定时器,在PWM开启时同时是开启,在PWM的低电平通过定时器的时间开始采集AD即可。

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分