项目需求:利用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即可。
“6个新”使万物互联 开启智慧物联网2.0时代
小米MIX、华为mate9分分入选目前最难买到的五部手机,你入手了谁?
飞驰之“芯”——TI芯科技赋能中国新基建之城际轨道交通
无人机智能电池的“智能”到底呈现在哪些方面?
佰维再获NCN-ICT峰会大奖——2022年度领先闪存厂商
底层与上层函数的混用存在的问题
realme X外观公布采用升降式摄像头全面屏设计搭载了屏下指纹技术
压电陶瓷动态操作中需要注意哪些问题
Avago推出新高性能宽带InGaP HBT增益方块
电子油门与CAN-BUS简介
不再怕专利流氓!我国正式起草知识产权反垄断指南
特斯拉有自己的长远前景 而不仅仅是成为一家汽车制造商
当运算放大器遇上滤波器
PCB电镀线注意事项有哪些
为什么在设计过程中应考虑PCB面板化
环境负氧离子检测仪产品简介
钡铼技术发布M160E双网口以太网IO模块:可以级联的IO模块
有RoHS就是不一样,RoHS认证给工业连接器带来哪些优势?
ASML将在韩建立半导体设备支持中心
ASML无视美国禁令出货400台***