发新帖我要提问
12
返回列表
打印
[应用相关]

ADC采集电位器电压,生成PWM--STM32Cube配置RCC

[复制链接]
楼主: 尽快回复过
手机看帖
扫描二维码
随时随地手机跟帖
21
尽快回复过|  楼主 | 2023-12-28 14:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
单通道中断
配置ADC1
使用连续采样模式,采样转换完成自动进入中断
开启ADC全局中断

使用特权

评论回复
22
尽快回复过|  楼主 | 2023-12-28 14:50 | 只看该作者
在嵌套向量中断控制器NVIC修改一下ADC全局中断的优先级

单通道中断采样配置过程与单通道轮询采样相同,利用cubemx配置完成后有两种开始ADC采样的方法。

使用特权

评论回复
23
尽快回复过|  楼主 | 2023-12-28 14:50 | 只看该作者
配置定时器TIM2与轮询相同
使用的函数
使用以下函数开启ADC与ADC中断

__HAL_ADC_ENABLE_IT(&hadc1,ADC_IT_EOC);用于打开ADC转换完成中断HAL_ADC_Start(&hadc1);用于开启ADC采样

或者使用

HAL_ADC_Start_IT(&hadc1);
该函数比较特殊,调用一次该函数就打开了ADC转换完成中断和开启ADC采样

使用特权

评论回复
24
尽快回复过|  楼主 | 2023-12-28 14:50 | 只看该作者
(开启中断一定要放到外设初始化函数的后面,否则串口函数初始化未完成,在ADC中断中使用printf函数可能会卡死)

使用特权

评论回复
25
尽快回复过|  楼主 | 2023-12-28 14:50 | 只看该作者
采样,转换完成后自动进入ADC中断回调函数
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)      
在中断回调函数中计算电压值,比较值,占空比并打印

问题是采样太快,从而中断更新很快,串口收到数据太多来不及打印

使用特权

评论回复
26
尽快回复过|  楼主 | 2023-12-28 14:50 | 只看该作者
最后将adc.c文件中的通道转换结束标准修改为ADC_EOC_SEQ_CONV,否则只会进入一次中断

使用特权

评论回复
27
尽快回复过|  楼主 | 2023-12-28 14:51 | 只看该作者
ADC_EOC_SEQ_CONV:在所有通道转换完成后进入中断
ADC_EOC_SINGLE_CONV:单个通道转换完成后进入中断
多个通道时,两种均可采用,单通道采样时需使用ADC_EOC_SEQ_CONV才能连续进入中断

配置定时器触发采样,解决直接ADC采样频率过快问题
步骤:

1.假设好采样频率
2.配置好ADC转换时间小于两点间隔时间
3.配置好定时器重装载更新事件频率为采样频率

对于直接用ADC采样,而不用定时器,转换时间就是两点间隔时间了,即采样频率为“1/转换时间”(个人不推荐使用,不好调时间)。

使用特权

评论回复
28
尽快回复过|  楼主 | 2023-12-28 14:51 | 只看该作者
3.单通道DMA
定时器TIM三个功能
重装载产生中断
比较输出pwm
输入捕获

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则