
你好: 我想做一個使用UART接收資料,並搭配PWM控制馬達的應用。我UART是使用中斷接收的方式主要功能為: PWM初始化, if(當UART接收到感測器端發送出來的資料) { 調整PWM數值我UART是使用中斷接收的方式 } else { 維持PWM初始值 } 目前我僅把UART中斷接收資料的功能完成,但PWM的部份怎麼實作我不了解。請問我是要把PWM控制的程式寫到main 裡面的while迴圈嗎?如果是的話,那我上面if else的判斷式要怎麼寫?能否給個簡單的範例? 以下是我目前HAL_UART_RxCpltCallback部份的程式碼
|
分享一个PWM+DMA的BUG
STM32的TIM触发SPI的DMA发送使用NSS时MSSI的问题
使用STM32捕获PWM时同时捕获2个通道时会出现捕获的频率值不准确的问题
HRTIM 变频控制输出的第一个周期频率异常
PWM+DMA求助
怎么在不用中断的情况下,测量霍尔编码器的数据
STM32G070RET6,中断优先级配置没有效果
STM32G474 利用高精度HRTIM怎么捕获外部波形计算波形频率,想用STM32Cube配置工程代码,网上查了很多资料,没有看到这个用法。希望大神指导一下。
STM32G473 定时器事件触发DMAburst传输错位?
STM32H743VIT6 HAL 串口DMA发送掉帧
基于你的描述,你是希望根据UART接收的信息来调整PWM输出进而控制马达的运作,对吧。
一般来讲,马达往往会有个初始状态,比方以某种速率运行还是停止。马达运转速率由PWM的频率和
占空比决定。 具体到这里涉及到计数器的分频系数,计数器的重装值ARR及输出比较寄存器CCR的值。
在时钟分频系数固定的情况下,我们调节的无非是ARR和CCR的值,更多时候是CCR值,最终取决于你应用
需求。
具体结合你当前应用,当UART收到相应的信息后,在UART中断里做信息识别,你可以直接对
ccr或ARR的值进行调整,从而调节马达的运行情况。
当然,还是建议你对PWM输出的基本特性了解下,这里就不细说了。
关于PMW输出只需在某个地方启动一次就行了,不需要在循环体内来反复启动运行。
比方像下面这样开启TIM1-CH1的PWM输出。
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_TIM1_Init();
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
while (1)
{
}
想再進一步請教,您指的是UART有接收到資料的情況下,我可以對PWM進行相對應調整。但如果當我UART沒有接收資料的情況下如何將PWM再回覆到初始化的參數?
呵呵!
首先你要自己清楚整个工程的工作逻辑,不然别人怎么知道该如何做呢?
你没有uart信息过来,PWM输出如何拟定参数是根据你的实际应用决定的啊,比方维持停止?或者以某个速率转动?。。。