stm32上用DAC和ADC实现PID控制问题

整体思路就是利用stm32的DAC输出电压,经过外围电路反馈电压通过ADC采样,想利用PID算法达到输出值与设定值的一致,但是达不到效果,不知道是不是我的程序是不是出问题了,还是我对PID的理解还不明白,新手,望指教,贴上主要程序····

//DA输出函数
void DA_Output(void)
{
vPID.SetPoint=v_set;//外部定义的电压指定值
vPID.Proportion=0.1;
vPID.Integral =0;
vPID.Derivative=0;
DA_value = PIDCalc ( &vPID,(ADC_ConvertedValue*(VREF*1000))/4095 );
Stepvalue=((DA_value/*-DA_zero*/)*4095)/(VREF*1000);
DAC_SetChannel1Data(DAC_Align_12b_R,Stepvalue);//12位右对齐,DAC1输出电压
DAC_SetChannel2Data(DAC_Align_12b_R,Stepvalue);//12位右对齐,DAC2输出电压
DAC_DualSoftwareTriggerCmd(ENABLE);//使能软件触发,更新DAC的值
}

/*****************************************************/
/* PID控制算法 */
/*****************************************************/
//PID计算函数
float PIDCalc( PID *pp, float NextPoint )
{
float dError
Error;
Error = pp->SetPoint - NextPoint;
pp->SumError += Error;
dError = pp->LastError - pp->PrevError;
pp->PrevError = pp->LastError;
pp->LastError = Error;
return (pp->Proportion * Error
+ pp->Integral * pp->SumError
+ pp->Derivative * dError
);
}

/*****************************************************/
/*****************************************************/

第1个回答  2011-08-08
我也有相同问题 不知楼主的程序是否正确,要是不合理在什么地方啊···有高手在么?指教指教啊 谢谢啦

STM32的ADC和DAC
同时,多通道ADC使用时需考虑通道间串扰问题,可通过增加采样间隔时间来缓解。I\/O引脚的串扰也可能干扰ADC输入,此时可能需要使用前置放大器来改善信号质量。DAC则负责将数字信号转换为模拟信号。STM32的DAC集成了缓冲功能,但可能产生失真,需根据输出要求调整输出阻抗和是否使用缓冲。使用时,输出频率和波形...

STM32的ADC和DAC
ADC精度的影响及提升方法:STM32 ADC特性包括50kΩ外部输入阻抗和SAR结构。高阻抗源测量时,采样时间受外部输入阻抗限制。ADC内部阻抗与采样时间、单片机特性有关。通过降低ADC工作频率或加大采样周期以减小电压误差。注意通道间串扰,增加采样间隔时间。减少I\/O引脚间的电容耦合,必要时使用前置放大器提高输入...

STM32学习笔记—DAC基础内容及常见问题
在使用STM32的DAC功能时,可能会遇到一些常见问题。例如,DAC转换触发源配置不当、输出电压稳定性问题以及无法输出0V等问题。解决这些问题的关键在于细致配置和避免遗漏。为解决触发源配置问题,务必确保选择的触发源已被正确配置。例如,若选择定时器触发,则需确保定时器设置为对应的触发源。对于输出电压稳...

【STM32学习】——ADC模数转换器
触发控制是ADC操作的关键,支持定时器、GPIO引脚和软件触发,只需通过寄存器配置即可实现。数据对齐方面,12位ADC需要16位寄存器,通常以右对齐为主,但也可通过调整对齐方式提升精度。STM32的ADC确保了采样保持以保证测量精度,采样时间可根据需求调整,量化编码过程在12.5个周期内完成。内置的自校准功能可以...

半个小时搞定——stm32 之 DAC
|= 1<<2; \/\/ 设置TEN1为1DAC->CR |= 7<<3; \/\/ 设置为软件触发最后,记得关闭DAC缓存,并设置输出偏移电源。在使用软件触发时,还需监控SWTRIGR寄存器。配置完成后,只需打开DAC即可开始工作。通过这个实践过程,你将掌握STM32 DAC的基本操作。现在,就动手实践,探索更多可能吧!

请教有关STM32DAC固定值输出问题
GPIO_SetBits(GPIOA,GPIO_Pin_4) ;\/\/这一句没用 DAC_InitStruct.DAC_Trigger = DAC_Trigger_Software; \/\/触发方式改为软件触发 DAC_SetChannel1Data(DAC_Align_12b_R,temp);\/\/这句后再跟一句DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE);...

STM32G4单片机实现双通道DAC同步输出(Dual-channel mode)
调研后发现,STM32G4等双通道DAC型号支持Dual-channel Mode,允许两通道同时访问同一个DAC,确保相位关系稳定。此模式下,无需额外中断处理数据复制,优化资源利用。实现过程包括在CubeMX中配置定时器触发、使用HAL库函数配置DMA位宽、循环模式等,确保双通道同时工作。在主函数中启动定时器,配置输出值及...

探索STM32F030的低功耗特性及应用场景
配备低功耗外设,如低功耗ADC、DAC、比较器、定时器等,有效控制系统功耗。DMA传输功能实现内部数据高效传输,进一步降低功耗。适用于能耗敏感型应用,如无线传感器、智能电表、智能水表,需要长时间低功耗运行,STM32F030提供低功耗模式支持,延长电池寿命。在高精度计量和控制应用中,STM32F030的ADC和DAC模块...

STM32的DAC性能怎么样,请用过的朋友来说说
要是要求精度高的话,还是建议使用ADI的DAC吧,之前用做过逆变器的给定正弦基准波形,效果不理想,正弦波形失真度3%以上。

STM32中,用定时器外部触发DAC发送DMA请求,将数据从内存发送到外设,数 ...
是按顺序传送8bit的数据。比如:有100个字节 每次传送一个字节,100次传完 如果你设的是16bit,则每次传送2个字节,50次传完 如果你设的是32bit,则每次传送4个字节,25次传完

相似回答