这次我们来试试每个单片机都有的ADC和DAC,STM32的ADC的功能是非常强大的,首先通道数多达十几条,可以同时进行十几个设备的ADC工作;其次精度达到12位(听说F3系列的位数更高,有十六位,具体多少位我也没仔细查过)。由于HAL库的硬件ADC十分完善,对STM32家族各个型号的支持也非常到位,因此在书写ADC程序时并没有遇到阻碍。这里我选择的ADC通道为PA0,使用杜邦线与电位器连接。 在调试DAC的时候遇到了问题,F412无法使用F4系列的HAL硬件DAC库,原因是硬件DAC库里面有个器件的宏定义,上面有F405,F407,F415,F429等等,唯独没有F412??而强行添加F412的宏定义进去的话会有21个报错;而在工程配置的C/C++页面改变F412为其它型号的话后果更可怕,会有高达92个报错,究其原因是很多库函数驱动头文件(如stm32f4xx_hal_adc.h stm32f4xx_hal_rcc.h stm32f4xx_hal_tim.h)等是与工程配置的C/C++页面的器件宏定义直接挂钩的,擅自修改会导致海量报错。 既然硬件DAC在F412板子上面行不通,那么我们可以试试其它方式的“DAC”,相信有人已经想到了,那就是PWMDAC,PWMDAC原理是改变PWM通道的占空比来改变输出效果,与硬件DAC直接改变电压的原理不一样,但实际效果是一样的,并且优点有三:1.PWMDAC的占空比可调范围比硬件DAC的电压可调范围更大,以及占空比精度比硬件DAC的电压精度高;2.由于直流减速电机存在停转电压阈值,当硬件DAC的电压降至停转电压阈值以下时,电机会直接停转而不是跟电压存在线性关系,如果按照模电的理论知识来讲这个现象就是进入死区,而PWMDAC的电压大小一直都是逻辑1参考电压和逻辑0参考电压的快速变换,并不存在停转阈值这个问题,即占空比与电机转速一直是线性关系,不存在死区;3.STM32库函数对PWM的支持以及完善程度都是比硬件DAC要高很多的,对于新手来说硬件DAC的函数参数并不是那么好调,而PWM库函数当中所有可调参数都是清晰明确的,新手玩PWM很快就上手了。这里我使用的PWM通道跟很久之前的一次实验一样,选择定时器3的通道3,即PB0,即F412开发板上面的绿灯。 老规矩,上传一份工程文件+头文件。 |
顶!!!很好的调试经验! |
支持一下 |
调试经验! |
我说是否升级下cube呀 |